From bb3a61e8fef524bd009a0941c633cef0e6e5c3c5 Mon Sep 17 00:00:00 2001 From: cecilarmitais Date: Tue, 18 Aug 2026 01:51:59 -0700 Subject: [PATCH] Decomp ten dungeon-state accessors in overlay_29 Decompile from asm: GetForcedLossReason GetHiddenStairsField SetForcedLossReason SetHiddenStairsField AreLateGameTrapsEnabledWrapper GetHiddenFloorField GetSuccessfulExitTracker SetHiddenFloorField SetDungeonEscapeFields GetMinimapData All ten read or write struct dungeon through DUNGEON_PTR, and every offset lands on a field dungeon.h already names: forced_loss_reason at 0x14, successful_exit_tracker at 0x18, end_floor_no_death_check_flag at 0x8, minimap_display_data at 0x1A264, and three fields of gen_info at 0x40C4 -- hidden_stairs_type, hidden_floor_type and fixed_room_id. No new types. These are verified against the preprocessed dungeon.h context built in the previous commit rather than a hand-written struct, which is why nine of the ten matched on the first candidate instead of appearing to and then failing the build. The setup cost of that context is now paid, so any overlay_29 function reaching DUNGEON_PTR is cheap to verify; a scan finds 59 more small ones. GetMinimapData needed the null check written as a conditional expression rather than an if with an early return. The target predicates the whole thing -- addne twice for the non-null path, then moveq for the null one -- where the statement form branches. That is the same predicate-ordering effect recorded on the LFO handlers in 909484fb, in the direction that wants the expression form. The US and JP offsets differ for the gen_info and minimap fields, which the asm carries as #ifdef JAPAN. Nothing version-specific is needed in the C: the fields are named the same in both, so dungeon.h resolves each build to its own offset. No comments are added to any pmd-sky file. Authored by Claude (Opus 5) under human direction. Confirmed by a matching build: build/pmdsky.us/pmdsky.us.nds: OK. Co-Authored-By: Claude Opus 5 --- asm/include/overlay_29_022E08A0.inc | 57 +- asm/include/overlay_29_022E0A18.inc | 54 + asm/include/overlay_29_022ECDE4.inc | 23 +- asm/include/overlay_29_022ED030.inc | 14 + asm/include/overlay_29_022ED888.inc | 11 + asm/include/overlay_29_0233861C.inc | 90 +- asm/include/overlay_29_023388B0.inc | 31 + asm/include/overlay_29_02339138.inc | 70 + asm/overlay_29_022E08A0.s | 1033 --- asm/overlay_29_022E0A18.s | 1015 +++ asm/overlay_29_022ECDE4.s | 908 --- asm/overlay_29_022ED030.s | 600 ++ asm/overlay_29_022ED888.s | 279 + asm/overlay_29_0233861C.s | 9731 --------------------------- asm/overlay_29_023388B0.s | 666 ++ asm/overlay_29_02339138.s | 8995 +++++++++++++++++++++++++ include/overlay_29_022E0A04.h | 10 + include/overlay_29_022ED01C.h | 10 + include/overlay_29_022ED868.h | 9 + include/overlay_29_02338850.h | 12 + include/overlay_29_02339118.h | 9 + main.lsf | 10 + src/overlay_29_022E0A04.c | 17 + src/overlay_29_022ED01C.c | 16 + src/overlay_29_022ED868.c | 11 + src/overlay_29_02338850.c | 26 + src/overlay_29_02339118.c | 13 + 27 files changed, 11885 insertions(+), 11835 deletions(-) create mode 100644 asm/include/overlay_29_022E0A18.inc create mode 100644 asm/include/overlay_29_022ED030.inc create mode 100644 asm/include/overlay_29_022ED888.inc create mode 100644 asm/include/overlay_29_023388B0.inc create mode 100644 asm/include/overlay_29_02339138.inc create mode 100644 asm/overlay_29_022E0A18.s create mode 100644 asm/overlay_29_022ED030.s create mode 100644 asm/overlay_29_022ED888.s create mode 100644 asm/overlay_29_023388B0.s create mode 100644 asm/overlay_29_02339138.s create mode 100644 include/overlay_29_022E0A04.h create mode 100644 include/overlay_29_022ED01C.h create mode 100644 include/overlay_29_022ED868.h create mode 100644 include/overlay_29_02338850.h create mode 100644 include/overlay_29_02339118.h create mode 100644 src/overlay_29_022E0A04.c create mode 100644 src/overlay_29_022ED01C.c create mode 100644 src/overlay_29_022ED868.c create mode 100644 src/overlay_29_02338850.c create mode 100644 src/overlay_29_02339118.c diff --git a/asm/include/overlay_29_022E08A0.inc b/asm/include/overlay_29_022E08A0.inc index 556b63a5..0d5816c5 100644 --- a/asm/include/overlay_29_022E08A0.inc +++ b/asm/include/overlay_29_022E08A0.inc @@ -1,62 +1,13 @@ #pragma once -.public _020AFC28 -.public _020AFC70 -.public AnimationDelayOrSomething -.public CopyAndInterleaveWrapper -.public DirectoryFileMngr_OpenDirectoryFile -.public DUNGEON_BUTTON_INPUT .public DUNGEON_PTR -.public DungeonGoesUp -.public FillPaletteInitInfo -.public GetBgRegionArea -.public GetFloorType -.public GetHeldButtons -.public GetPressedButtons -.public GetReleasedStylus .public GetScenarioBalance -.public HandleSir0Translation -.public IsCurrentTilesetBackground -.public IsTouchScreenUseAnywhere -.public LoadObjPalette -.public LoadTextureUi -.public LoadWteFromFileDirectory -.public Memcpy32 -.public Memset32 -.public OBJ_GRAPHICS_CONTROLS_PTR -.public ov10_022C4D54 +.public StartFadeDungeonWrapper +.public WaitUntilFadeIsFinished .public ov29_022DE15C .public ov29_022DE854 +.public ov29_022E0DFC +.public ov29_022E0E44 .public ov29_022E34B0 .public ov29_022E8778 -.public ov29_022E8BFC -.public ov29_022E9FD0 .public ov29_022EA370 -.public ov29_02335760 -.public ov29_02335774 -.public ov29_02335804 .public ov29_0233A248 -.public ov29_0234B1A4 -.public ov29_023510E0 -.public ov29_02353540 -.public ov29_02353544 -.public ov29_0237C696 -.public ov29_0237C698 -.public ov29_0237C6A4 -.public ov29_0237C6B8 -.public ov29_0237C6D4 -.public SetMinimapDataE447 -.public StartFadeDungeonWrapper -.public sub_020063F4 -.public sub_02006564 -.public sub_02006BFC -.public sub_02008F3C -.public sub_020090A0 -.public sub_02009194 -.public sub_020091B0 -.public sub_020091CC -.public sub_02009454 -.public sub_020094C4 -.public sub_0201E380 -.public UnloadFile -.public UnloadWte -.public WaitUntilFadeIsFinished diff --git a/asm/include/overlay_29_022E0A18.inc b/asm/include/overlay_29_022E0A18.inc new file mode 100644 index 00000000..52e80510 --- /dev/null +++ b/asm/include/overlay_29_022E0A18.inc @@ -0,0 +1,54 @@ +#pragma once +.public AnimationDelayOrSomething +.public CopyAndInterleaveWrapper +.public DUNGEON_BUTTON_INPUT +.public DUNGEON_PTR +.public DirectoryFileMngr_OpenDirectoryFile +.public DungeonGoesUp +.public FadeToBlack +.public FillPaletteInitInfo +.public GetBgRegionArea +.public GetFloorType +.public GetHeldButtons +.public GetPressedButtons +.public GetReleasedStylus +.public HandleSir0Translation +.public IsCurrentTilesetBackground +.public IsTouchScreenUseAnywhere +.public LoadObjPalette +.public LoadTextureUi +.public LoadWteFromFileDirectory +.public Memcpy32 +.public Memset32 +.public OBJ_GRAPHICS_CONTROLS_PTR +.public SetMinimapDataE447 +.public UnloadFile +.public UnloadWte +.public _020AFC28 +.public _020AFC70 +.public ov10_022C4D54 +.public ov29_022E8BFC +.public ov29_022E9FD0 +.public ov29_02335760 +.public ov29_02335774 +.public ov29_02335804 +.public ov29_0234B1A4 +.public ov29_023510E0 +.public ov29_02353540 +.public ov29_02353544 +.public ov29_0237C696 +.public ov29_0237C698 +.public ov29_0237C6A4 +.public ov29_0237C6B8 +.public ov29_0237C6D4 +.public sub_020063F4 +.public sub_02006564 +.public sub_02006BFC +.public sub_02008F3C +.public sub_020090A0 +.public sub_02009194 +.public sub_020091B0 +.public sub_020091CC +.public sub_02009454 +.public sub_020094C4 +.public sub_0201E380 diff --git a/asm/include/overlay_29_022ECDE4.inc b/asm/include/overlay_29_022ECDE4.inc index edd7d3e3..f5f05ea7 100644 --- a/asm/include/overlay_29_022ECDE4.inc +++ b/asm/include/overlay_29_022ECDE4.inc @@ -1,31 +1,10 @@ #pragma once -.public _020AFC70 -.public AddSimpleObjToOam -.public AdvanceFrame -.public AreLateGameTrapsEnabled .public CreateMonsterSummaryFromMonster .public DUNGEON_PTR .public EntityIsValid__022ECDC0 .public GetMonsterName -.public GetRandomSpawnTrapId .public GetStringFromFileVeneer -.public GetTile -.public GetTileSafe -.public InitRender3dElement64 -.public LoadWteFromFileDirectory -.public memset .public MemZero -.public OBJ_GRAPHICS_CONTROLS_PTR -.public ov29_02352690 -.public ov29_02352698 -.public ov29_023526A0 -.public ov29_0235359C -.public ov29_0237C864 +.public memset .public ov29_0237C974 -.public ov29_0237C99C -.public ProcessWte -.public SpawnTrap .public strcpy -.public StringFromId -.public sub_0201E080 -.public sub_0201F2A0 diff --git a/asm/include/overlay_29_022ED030.inc b/asm/include/overlay_29_022ED030.inc new file mode 100644 index 00000000..e66d012c --- /dev/null +++ b/asm/include/overlay_29_022ED030.inc @@ -0,0 +1,14 @@ +#pragma once +.public AdvanceFrame +.public InitRender3dElement64 +.public LoadWteFromFileDirectory +.public ProcessWte +.public StringFromId +.public _020AFC70 +.public ov29_02352690 +.public ov29_02352698 +.public ov29_0235359C +.public ov29_0237C99C +.public strcpy +.public sub_0201E080 +.public sub_0201F2A0 diff --git a/asm/include/overlay_29_022ED888.inc b/asm/include/overlay_29_022ED888.inc new file mode 100644 index 00000000..314c47af --- /dev/null +++ b/asm/include/overlay_29_022ED888.inc @@ -0,0 +1,11 @@ +#pragma once +.public AddSimpleObjToOam +.public BindTrapToTile +.public DUNGEON_PTR +.public GetRandomSpawnTrapId +.public GetTile +.public GetTileSafe +.public OBJ_GRAPHICS_CONTROLS_PTR +.public SpawnTrap +.public ov29_023526A0 +.public ov29_0237C864 diff --git a/asm/include/overlay_29_0233861C.inc b/asm/include/overlay_29_0233861C.inc index bf846387..adf5add9 100644 --- a/asm/include/overlay_29_0233861C.inc +++ b/asm/include/overlay_29_0233861C.inc @@ -1,97 +1,11 @@ #pragma once -.public _020AFC70 -.public _s32_div_f -.public abs -.public AddSimpleObjToOam -.public ConvertWallsToChasms -.public CORNER_CARDINAL_NEIGHBOR_IS_OPEN -.public DelayWteFree -.public DIRECTIONS_XY -.public DirectoryFileMngr_OpenDirectoryFile .public DUNGEON_PTR -.public DungeonRandInt -.public DungeonRandRange -.public DungeonScreenEffectActive -.public FLOOR_GENERATION_STATUS -.public GenerateSecondaryTerrainFormations -.public GetBottomScreenOption -.public GetFinalKecleonShopSpawnChance -.public GetFloorType -.public GetHiddenStairsType -.public GetKecleonIdToSpawnByFloor +.public DrawMinimapTile .public GetLeader -.public GetNextFixedRoomAction -.public GetTile .public GetTileSafe -.public GetTopScreenOption -.public GetTrapInfo -.public HandleSir0Translation -.public HIDDEN_STAIRS_SPAWN_BLOCKED -.public InitRender3dElement64 -.public IsBehaviorLoneOutlaw -.public IsCurrentMissionType -.public IsCurrentMissionTypeExact -.public IsCurrentTilesetBackground -.public IsDestinationFloorWithMonster -.public IsExperienceLocked -.public IsGoldenChamber -.public IsHiddenStairsFloor -.public IsMapShownOnEitherScreen -.public IsOutlawMonsterHouseFloor .public IsSecretBazaar -.public LoadFixedRoomData -.public LoadWteFromFileDirectory .public LogMessageByIdWithPopupCheckUser -.public MAP_COLOR_TABLE -.public MarkEnemySpawns -.public MarkNonEnemySpawns -.public MarkShopkeeperSpawn -.public Memcpy32 -.public MemZero -.public MultiplyByFixedPoint -.public OBJ_GRAPHICS_CONTROLS_PTR -.public ov10_022BFD20 -.public ov10_022C6326 -.public ov29_022DE288 -.public ov29_022E2418 -.public ov29_022E7F7C -.public ov29_022EA408 -.public ov29_0234217C -.public ov29_02342594 -.public ov29_023427E4 -.public ov29_02343DC4 -.public ov29_02343DD8 -.public ov29_02352F1C -.public ov29_02352F40 -.public ov29_02352F7C -.public ov29_02352FCC -.public ov29_02352FF4 -.public ov29_0235352C -.public ov29_0235372C -.public ov29_02353730 -.public ov29_0235376C -.public ov29_0235377C -.public ov29_02353784 -.public ov29_0237CACC -.public ov29_0237CD40 -.public ov29_0237CFB8 -.public PlaceFixedRoomTile .public PlayEffectAnimationPos -.public PosIsOutOfBounds -.public ProcessWte -.public ResetHiddenStairsSpawn -.public ResetImportantSpawnPositions -.public ResetInnerBoundaryTileRows -.public SECONDARY_TERRAIN_TYPES -.public ShouldMinimapDisplayEntity -.public SinAbs4096 -.public StairsAlwaysReachable -.public sub_0200A174 -.public sub_0200B330 -.public sub_0200B3FC -.public sub_0200C008 -.public sub_0201F2A0 .public TeamMemberHasExclusiveItemEffectActive -.public TILESET_PROPERTIES -.public UnloadFile .public UpdateTrapsVisibility +.public ov29_022E2418 diff --git a/asm/include/overlay_29_023388B0.inc b/asm/include/overlay_29_023388B0.inc new file mode 100644 index 00000000..f963e9a1 --- /dev/null +++ b/asm/include/overlay_29_023388B0.inc @@ -0,0 +1,31 @@ +#pragma once +.public DelayWteFree +.public DirectoryFileMngr_OpenDirectoryFile +.public DungeonRandInt +.public DungeonScreenEffectActive +.public GetMinimapData +.public HandleSir0Translation +.public InitRender3dElement64 +.public LoadWteFromFileDirectory +.public MemZero +.public MultiplyByFixedPoint +.public ProcessWte +.public SinAbs4096 +.public UnloadFile +.public _020AFC70 +.public ov10_022C6326 +.public ov29_022DE288 +.public ov29_022E7F7C +.public ov29_02339148 +.public ov29_02352F1C +.public ov29_02352F40 +.public ov29_02352F7C +.public ov29_0235352C +.public ov29_0235372C +.public ov29_02353730 +.public ov29_0235376C +.public ov29_02353784 +.public ov29_0237CACC +.public ov29_0237CD40 +.public ov29_0237CFB8 +.public sub_0201F2A0 diff --git a/asm/include/overlay_29_02339138.inc b/asm/include/overlay_29_02339138.inc new file mode 100644 index 00000000..8aa6df47 --- /dev/null +++ b/asm/include/overlay_29_02339138.inc @@ -0,0 +1,70 @@ +#pragma once +.public AddSimpleObjToOam +.public CORNER_CARDINAL_NEIGHBOR_IS_OPEN +.public ConvertWallsToChasms +.public DIRECTIONS_XY +.public DUNGEON_PTR +.public DungeonRandInt +.public DungeonRandRange +.public FLOOR_GENERATION_STATUS +.public GenerateSecondaryTerrainFormations +.public GetBottomScreenOption +.public GetFinalKecleonShopSpawnChance +.public GetFloorType +.public GetHiddenStairsType +.public GetKecleonIdToSpawnByFloor +.public GetMinimapData +.public GetNextFixedRoomAction +.public GetTile +.public GetTileSafe +.public GetTopScreenOption +.public GetTrapInfo +.public HIDDEN_STAIRS_SPAWN_BLOCKED +.public IsBehaviorLoneOutlaw +.public IsCurrentMissionType +.public IsCurrentMissionTypeExact +.public IsCurrentTilesetBackground +.public IsDestinationFloorWithMonster +.public IsExperienceLocked +.public IsGoldenChamber +.public IsHiddenStairsFloor +.public IsMapShownOnEitherScreen +.public IsOutlawMonsterHouseFloor +.public LoadFixedRoomData +.public MAP_COLOR_TABLE +.public MarkEnemySpawns +.public MarkNonEnemySpawns +.public MarkShopkeeperSpawn +.public MemZero +.public Memcpy32 +.public OBJ_GRAPHICS_CONTROLS_PTR +.public PlaceFixedRoomTile +.public PosIsOutOfBounds +.public ResetHiddenStairsSpawn +.public ResetImportantSpawnPositions +.public ResetInnerBoundaryTileRows +.public SECONDARY_TERRAIN_TYPES +.public ShouldMinimapDisplayEntity +.public StairsAlwaysReachable +.public TILESET_PROPERTIES +.public _s32_div_f +.public abs +.public ov10_022BFD20 +.public ov29_022E7F7C +.public ov29_022EA408 +.public ov29_0233900C +.public ov29_0234217C +.public ov29_02342594 +.public ov29_023427E4 +.public ov29_02343DC4 +.public ov29_02343DD8 +.public ov29_02352FCC +.public ov29_02352FF4 +.public ov29_0235352C +.public ov29_0235376C +.public ov29_0235377C +.public ov29_0237CFB8 +.public sub_0200A174 +.public sub_0200B330 +.public sub_0200B3FC +.public sub_0200C008 diff --git a/asm/overlay_29_022E08A0.s b/asm/overlay_29_022E08A0.s index 4e7bb3b8..b8efa592 100644 --- a/asm/overlay_29_022E08A0.s +++ b/asm/overlay_29_022E08A0.s @@ -125,1036 +125,3 @@ FadeToBlack: ; 0x022E0968 .align 2, 0 _022E09E4: .word DUNGEON_PTR arm_func_end FadeToBlack - - arm_func_start SetDungeonEscapeFields -SetDungeonEscapeFields: ; 0x022E09E8 - ldr r2, _022E0A00 ; =DUNGEON_PTR - ldr r3, [r2] - str r0, [r3, #0x18] - ldr r0, [r2] - strb r1, [r0, #8] - bx lr - .align 2, 0 -_022E0A00: .word DUNGEON_PTR - arm_func_end SetDungeonEscapeFields - - arm_func_start GetSuccessfulExitTracker -GetSuccessfulExitTracker: ; 0x022E0A04 - ldr r0, _022E0A14 ; =DUNGEON_PTR - ldr r0, [r0] - ldr r0, [r0, #0x18] - bx lr - .align 2, 0 -_022E0A14: .word DUNGEON_PTR - arm_func_end GetSuccessfulExitTracker - - arm_func_start ov29_022E0A18 -ov29_022E0A18: ; 0x022E0A18 - stmdb sp!, {r3, lr} - mov r0, #0 - bl AnimationDelayOrSomething - mov r0, #0 - bl ov29_0234B1A4 - mov r0, #0 - bl ov29_022E8BFC - mov r0, #0 - bl SetMinimapDataE447 - ldr r0, _022E0A60 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - add r0, r0, #0x1a000 -#ifdef JAPAN - strb r1, [r0, #0x1a9] -#else - strb r1, [r0, #0x24d] -#endif - bl FadeToBlack - mov r0, #0 - bl ov29_022E9FD0 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E0A60: .word DUNGEON_PTR - arm_func_end ov29_022E0A18 - - arm_func_start GetAndStoreButtonInput -GetAndStoreButtonInput: ; 0x022E0A64 - stmdb sp!, {r3, lr} - ldr r1, _022E0B34 ; =DUNGEON_BUTTON_INPUT - mov r0, #0 - bl GetHeldButtons - ldr r1, _022E0B38 ; =ov29_0237C696 - mov r0, #0 - bl GetPressedButtons - ldr r1, _022E0B3C ; =ov29_0237C698 - mov r0, #0 - bl sub_020063F4 - ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT - mov r1, #0 - strh r1, [r0, #8] - ldrh r1, [r0] - tst r1, #2 - ldrsh r1, [r0, #0xa] - beq _022E0AB8 - cmp r1, #0x64 - addlt r1, r1, #1 - strlth r1, [r0, #0xa] - b _022E0ADC -_022E0AB8: - cmp r1, #2 - blt _022E0AD0 - cmp r1, #0xc - ldrlth r1, [r0, #8] - orrlt r1, r1, #2 - strlth r1, [r0, #8] -_022E0AD0: - ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT - mov r1, #0 - strh r1, [r0, #0xa] -_022E0ADC: - ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT - ldrh r1, [r0] - tst r1, #0x100 - ldrsh r1, [r0, #0xc] - beq _022E0B00 - cmp r1, #0x64 - addlt r1, r1, #1 - strlth r1, [r0, #0xc] - b _022E0B24 -_022E0B00: - cmp r1, #2 - blt _022E0B18 - cmp r1, #0xc - ldrlth r1, [r0, #8] - orrlt r1, r1, #0x100 - strlth r1, [r0, #8] -_022E0B18: - ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT - mov r1, #0 - strh r1, [r0, #0xc] -_022E0B24: - ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT - ldrh r1, [r0, #8] - strh r1, [r0, #6] - ldmia sp!, {r3, pc} - .align 2, 0 -_022E0B34: .word DUNGEON_BUTTON_INPUT -_022E0B38: .word ov29_0237C696 -_022E0B3C: .word ov29_0237C698 -_022E0B40: .word DUNGEON_BUTTON_INPUT - arm_func_end GetAndStoreButtonInput - - arm_func_start ov29_022E0B44 -ov29_022E0B44: ; 0x022E0B44 - ldr r1, _022E0B58 ; =0x000003E7 - ldr r0, _022E0B5C ; =DUNGEON_BUTTON_INPUT - strh r1, [r0, #0xa] - strh r1, [r0, #0xc] - bx lr - .align 2, 0 -_022E0B58: .word 0x000003E7 -_022E0B5C: .word DUNGEON_BUTTON_INPUT - arm_func_end ov29_022E0B44 - - arm_func_start ov29_022E0B60 -ov29_022E0B60: ; 0x022E0B60 - stmdb sp!, {r3, lr} - bl IsTouchScreenUseAnywhere - cmp r0, #0 - beq _022E0C18 - ldr r0, _022E0C24 ; =ov29_0237C6A4 - bl GetReleasedStylus - ldr r0, _022E0C28 ; =ov29_0237C6A4 - ldrb r1, [r0, #0x2c] - cmp r1, #0 - beq _022E0B98 - ldrh r1, [r0] - tst r1, #0x40 - moveq r1, #0 - streqb r1, [r0, #0x2c] -_022E0B98: - ldr r0, _022E0C28 ; =ov29_0237C6A4 - mov r2, #0 - ldrh r3, [r0] - strh r2, [r0, #0x24] - tst r3, #0x80 - beq _022E0BD0 - ldrh r1, [r0, #0x24] - tst r3, #0x1000 - orr r1, r1, #0x80 - strh r1, [r0, #0x24] - str r2, [r0, #0x28] - movne r1, #1 - strneb r1, [r0, #0x26] - ldmia sp!, {r3, pc} -_022E0BD0: - tst r3, #0x40 - beq _022E0C0C - ldr r1, [r0, #0x28] - cmp r1, #3 - bls _022E0C00 - ldrh r1, [r0, #0x24] - tst r3, #0x1000 - orr r1, r1, #0x40 - strh r1, [r0, #0x24] - movne r1, #1 - strneb r1, [r0, #0x26] - ldmia sp!, {r3, pc} -_022E0C00: - add r1, r1, #1 - str r1, [r0, #0x28] - ldmia sp!, {r3, pc} -_022E0C0C: - strb r2, [r0, #0x26] - str r2, [r0, #0x28] - ldmia sp!, {r3, pc} -_022E0C18: - ldr r0, _022E0C24 ; =ov29_0237C6A4 - bl sub_02006BFC - ldmia sp!, {r3, pc} - .align 2, 0 -_022E0C24: .word ov29_0237C6A4 -_022E0C28: .word ov29_0237C6A4 - arm_func_end ov29_022E0B60 - - arm_func_start ov29_022E0C2C -ov29_022E0C2C: ; 0x022E0C2C - ldr r1, _022E0C38 ; =ov29_0237C6A4 - strb r0, [r1, #0x2c] - bx lr - .align 2, 0 -_022E0C38: .word ov29_0237C6A4 - arm_func_end ov29_022E0C2C - - arm_func_start ov29_022E0C3C -ov29_022E0C3C: ; 0x022E0C3C - ldr r0, _022E0C48 ; =ov29_0237C6A4 - ldrb r0, [r0, #0x2c] - bx lr - .align 2, 0 -_022E0C48: .word ov29_0237C6A4 - arm_func_end ov29_022E0C3C - - arm_func_start ov29_022E0C4C -ov29_022E0C4C: ; 0x022E0C4C - stmdb sp!, {r3, lr} - bl sub_02006564 - ldr r0, _022E0C60 ; =ov29_0237C6A4 - bl sub_02006BFC - ldmia sp!, {r3, pc} - .align 2, 0 -_022E0C60: .word ov29_0237C6A4 - arm_func_end ov29_022E0C4C - - arm_func_start ov29_022E0C64 -ov29_022E0C64: ; 0x022E0C64 - ldr r1, _022E0C7C ; =ov29_0237C6A4 - ldr r2, [r1, #4] - ldr r1, [r1, #8] - str r2, [r0] - str r1, [r0, #4] - bx lr - .align 2, 0 -_022E0C7C: .word ov29_0237C6A4 - arm_func_end ov29_022E0C64 - - arm_func_start ov29_022E0C80 -ov29_022E0C80: ; 0x022E0C80 - ldr r1, _022E0C98 ; =ov29_0237C6A4 - ldr r2, [r1, #0xc] - ldr r1, [r1, #0x10] - str r2, [r0] - str r1, [r0, #4] - bx lr - .align 2, 0 -_022E0C98: .word ov29_0237C6A4 - arm_func_end ov29_022E0C80 - - arm_func_start ov29_022E0C9C -ov29_022E0C9C: ; 0x022E0C9C - ldr r1, _022E0CB4 ; =ov29_0237C6A4 - ldr r2, [r1, #0x14] - ldr r1, [r1, #0x18] - str r2, [r0] - str r1, [r0, #4] - bx lr - .align 2, 0 -_022E0CB4: .word ov29_0237C6A4 - arm_func_end ov29_022E0C9C - - arm_func_start CheckTouchscreenArea -CheckTouchscreenArea: ; 0x022E0CB8 - stmdb sp!, {r3, lr} - ldr lr, _022E0CF8 ; =ov29_0237C6B8 - ldr ip, [lr] - cmp r0, ip - bgt _022E0CE8 - cmp r2, ip - blt _022E0CE8 - ldr r0, [lr, #4] - cmp r1, r0 - bgt _022E0CE8 - cmp r3, r0 - bge _022E0CF0 -_022E0CE8: - mov r0, #0 - ldmia sp!, {r3, pc} -_022E0CF0: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_022E0CF8: .word ov29_0237C6B8 - arm_func_end CheckTouchscreenArea - - arm_func_start ov29_022E0CFC -ov29_022E0CFC: ; 0x022E0CFC - stmdb sp!, {r3, lr} - mov r0, #0 - bl sub_020091CC - mov r0, #1 - bl sub_020091CC - bl ov29_022E0E8C - mov r0, #0 - mov r2, r0 - mov r1, #1 - bl sub_02009454 - mov r0, #1 - mov r1, #2 - mov r2, #0 - bl sub_02009454 - mov r0, #2 - mov r1, r0 - mov r2, #0 - bl sub_02009454 - mov r0, #3 - mov r1, #2 - mov r2, #0 - bl sub_02009454 - mov r0, #4 - mov r1, #2 - mov r2, #0 - bl sub_02009454 - mov r0, #0x40 - mov r1, r0 - mov r2, #0 - bl sub_020094C4 - mov r0, #0 - mov r1, #2 - mov r2, #1 - bl sub_02009454 - mov r0, #1 - mov r1, #2 - mov r2, r0 - bl sub_02009454 - mov r0, #2 - mov r1, r0 - mov r2, #1 - bl sub_02009454 - mov r0, #3 - mov r1, #2 - mov r2, #1 - bl sub_02009454 - mov r0, #4 - mov r1, #2 - mov r2, #1 - bl sub_02009454 - mov r0, #0x40 - mov r1, r0 - mov r2, #1 - bl sub_020094C4 - ldmia sp!, {r3, pc} - arm_func_end ov29_022E0CFC - - arm_func_start ov29_022E0DD8 -ov29_022E0DD8: ; 0x022E0DD8 - ldr ip, _022E0DE0 ; =sub_02009194 - bx ip - .align 2, 0 -_022E0DE0: .word sub_02009194 - arm_func_end ov29_022E0DD8 - - arm_func_start ov29_022E0DE4 -ov29_022E0DE4: ; 0x022E0DE4 - ldr ip, _022E0DEC ; =sub_020091B0 - bx ip - .align 2, 0 -_022E0DEC: .word sub_020091B0 - arm_func_end ov29_022E0DE4 - - arm_func_start ov29_022E0DF0 -ov29_022E0DF0: ; 0x022E0DF0 - ldr ip, _022E0DF8 ; =sub_020091CC - bx ip - .align 2, 0 -_022E0DF8: .word sub_020091CC - arm_func_end ov29_022E0DF0 - - arm_func_start ov29_022E0DFC -ov29_022E0DFC: ; 0x022E0DFC - stmdb sp!, {r3, lr} - mov r0, #0 - mov r1, r0 - mov r2, r0 - bl sub_020090A0 - mov r0, #1 - mov r1, r0 - mov r2, #0 - bl sub_020090A0 - mov r0, #2 - mov r1, r0 - mov r2, #0 - bl sub_020090A0 - mov r0, #3 - mov r1, r0 - mov r2, #0 - bl sub_020090A0 - ldmia sp!, {r3, pc} - arm_func_end ov29_022E0DFC - - arm_func_start ov29_022E0E44 -ov29_022E0E44: ; 0x022E0E44 - stmdb sp!, {r3, lr} - mov r0, #0 - mov r2, r0 - mov r1, #1 - bl sub_020090A0 - mov r1, #0 - mov r2, r1 - mov r0, #1 - bl sub_020090A0 - mov r0, #2 - mov r1, r0 - mov r2, #0 - bl sub_020090A0 - mov r0, #3 - mov r1, r0 - mov r2, #0 - bl sub_020090A0 - ldmia sp!, {r3, pc} - arm_func_end ov29_022E0E44 - - arm_func_start ov29_022E0E8C -ov29_022E0E8C: ; 0x022E0E8C - stmdb sp!, {r3, lr} - mov r0, #0 - mov r2, r0 - mov r1, #1 - bl sub_020090A0 - mov r1, #0 - mov r2, r1 - mov r0, #1 - bl sub_020090A0 - mov r0, #2 - mov r1, r0 - mov r2, #0 - bl sub_020090A0 - mov r0, #3 - mov r1, r0 - mov r2, #0 - bl sub_020090A0 - mov r0, #0 - mov r1, r0 - mov r2, #1 - bl sub_020090A0 - mov r0, #1 - mov r1, r0 - mov r2, r0 - bl sub_020090A0 - mov r0, #2 - mov r1, r0 - mov r2, #1 - bl sub_020090A0 - mov r0, #3 - mov r1, r0 - mov r2, #1 - bl sub_020090A0 - ldmia sp!, {r3, pc} - arm_func_end ov29_022E0E8C - - arm_func_start ov29_022E0F14 -ov29_022E0F14: ; 0x022E0F14 - ldr ip, _022E0F28 ; =sub_02008F3C - mov r2, r0, lsl #0x14 - mov r0, r1 - mov r1, r2, asr #0x10 - bx ip - .align 2, 0 -_022E0F28: .word sub_02008F3C - arm_func_end ov29_022E0F14 - - arm_func_start OamTileNumberToVramAddressOv29 -OamTileNumberToVramAddressOv29: ; 0x022E0F2C - ldr r3, _022E0F64 ; =OBJ_GRAPHICS_CONTROLS_PTR - mov r2, #0x70 - ldr ip, [r3] - ldr r3, _022E0F68 ; =_020AFC28 - mla r2, r1, r2, ip - ldrh r1, [r2, #0xc] - ldr ip, [r2, #0x64] - mov r2, r1, lsr #0x1f - rsb r1, r2, r1, lsl #30 - add r1, r2, r1, ror #30 - mov r1, r1, lsl #1 - ldrsh r1, [r3, r1] - smlabb r0, r0, r1, ip - bx lr - .align 2, 0 -_022E0F64: .word OBJ_GRAPHICS_CONTROLS_PTR -_022E0F68: .word _020AFC28 - arm_func_end OamTileNumberToVramAddressOv29 - - arm_func_start ov29_022E0F6C -ov29_022E0F6C: ; 0x022E0F6C - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x74 - ldr r3, _022E11D0 ; =ov29_023510E0 - add r2, sp, #0x28 - mov r1, #0x16 -_022E0F80: - ldrh r0, [r3], #2 - subs r1, r1, #1 - strh r0, [r2], #2 - bne _022E0F80 - ldr r1, _022E11D4 ; =0x000003E5 - add r2, sp, #8 - mov r0, #4 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, [sp, #8] - add r0, sp, #0x14 - bl HandleSir0Translation - mov r0, #0xb0 - str r0, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r1, [sp, #0x14] - add r0, sp, #0x54 - mov r2, #1 - mov r3, #0x20 - bl FillPaletteInitInfo - ldr r0, _022E11D8 ; =OBJ_GRAPHICS_CONTROLS_PTR - add r1, sp, #0x54 - ldr r0, [r0] - mov r2, #0 - bl LoadObjPalette - add r0, sp, #8 - bl UnloadFile - ldr r1, _022E11DC ; =0x000003E3 - mov r0, #4 - add r2, sp, #8 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, [sp, #8] - add r0, sp, #0x10 - bl HandleSir0Translation - ldr r1, [sp, #0x10] - mov r0, #0x1d0 - add r1, r1, #4 - str r1, [sp, #0x10] - mov r1, #0 - bl OamTileNumberToVramAddressOv29 - mov r7, #0 - add r6, sp, #0x28 - mov r5, r7 - mov r4, #0xb -_022E1038: - mov r0, r7, lsl #2 - add r1, r6, r7, lsl #2 - ldrsh r0, [r6, r0] - ldrsh r8, [r1, #2] - mov r1, r5 - bl OamTileNumberToVramAddressOv29 - ldr r1, [sp, #0x10] - mov r3, r4 - mov r2, r8, lsl #1 - bl CopyAndInterleaveWrapper - mov r0, r8, asr #1 - add r0, r8, r0, lsr #30 - add r7, r7, #1 - ldr r1, [sp, #0x10] - mov r0, r0, asr #2 - add r0, r1, r0, lsl #2 - str r0, [sp, #0x10] - cmp r7, #0xb - blo _022E1038 - add r0, sp, #8 - bl UnloadFile - ldr r1, _022E11E0 ; =0x000003E7 - add r2, sp, #8 - mov r0, #4 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, [sp, #8] - add r0, sp, #0x18 - bl HandleSir0Translation - mov r2, #0 - str r2, [sp] - mov r0, #0xff - str r0, [sp, #4] - ldr r1, [sp, #0x18] - add r0, sp, #0x64 - mov r3, #0x10 - bl FillPaletteInitInfo - ldr r0, _022E11D8 ; =OBJ_GRAPHICS_CONTROLS_PTR - add r1, sp, #0x64 - ldr r0, [r0] - mov r2, #0xc - add r0, r0, #0x70 - bl LoadObjPalette - add r0, sp, #8 - bl UnloadFile - ldr r1, _022E11E4 ; =0x000003E6 - mov r0, #4 - add r2, sp, #8 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, [sp, #8] - add r0, sp, #0x1c - bl HandleSir0Translation - ldr r1, [sp, #0x1c] - mov r0, #0x70 - add r1, r1, #4 - str r1, [sp, #0x1c] - mov r1, #1 - bl OamTileNumberToVramAddressOv29 - ldr r1, [sp, #0x1c] - mov r2, #0x80 - bl Memcpy32 - add r0, sp, #8 - bl UnloadFile - ldr r2, _022E11E8 ; =ov29_02353544 - mov r0, #4 - mov r1, #0x3e4 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, _022E11EC ; =ov29_02353540 - ldr r0, _022E11F0 ; =ov29_02353540 - ldr r1, [r1, #4] - bl HandleSir0Translation - add r0, sp, #0x20 - mov r1, #4 -#ifdef JAPAN - mov r2, #0x3f4 -#else - mov r2, #0x400 -#endif - mov r3, #0 - bl LoadWteFromFileDirectory - mov r6, #0 - mov r5, r6 - ldr r4, _022E11F4 ; =_020AFC70 - b _022E11A8 -_022E1180: - ldr r0, [r4] - ldr r1, [r1, #0x18] - mov r2, r5 - mov r3, r6 - add r0, r0, #0xcc - add r1, r1, r6, lsl #2 - bl sub_0201E380 - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 -_022E11A8: - ldr r1, [sp, #0x24] - ldrsh r0, [r1, #0x1c] - cmp r6, r0 - blt _022E1180 - add r0, sp, #0x20 - bl UnloadWte - bl LoadTextureUi - bl ov29_02335774 - add sp, sp, #0x74 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_022E11D0: .word ov29_023510E0 -_022E11D4: .word 0x000003E5 -_022E11D8: .word OBJ_GRAPHICS_CONTROLS_PTR -_022E11DC: .word 0x000003E3 -_022E11E0: .word 0x000003E7 -_022E11E4: .word 0x000003E6 -_022E11E8: .word ov29_02353544 -_022E11EC: .word ov29_02353540 -_022E11F0: .word ov29_02353540 -_022E11F4: .word _020AFC70 - arm_func_end ov29_022E0F6C - - arm_func_start ov29_022E11F8 -ov29_022E11F8: ; 0x022E11F8 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #0xc - ldr r1, _022E12EC ; =0x00000409 - add r2, sp, #4 - mov r0, #4 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, [sp, #4] - add r0, sp, #0 - bl HandleSir0Translation - ldr lr, [sp] - mov r4, #0 - ldr ip, _022E12F0 ; =ov29_0237C6D4 - b _022E1254 -_022E1230: - ldr r0, [lr, #8] - add r2, ip, r4, lsl #2 - add r3, r0, r4, lsl #2 - mov r1, #4 -_022E1240: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _022E1240 - add r4, r4, #1 -_022E1254: - ldr r0, [lr, #0xc] - cmp r4, r0 - blt _022E1230 - ldr r1, [lr, #4] - mov r0, #0x120 - mul r4, r1, r0 - bl IsCurrentTilesetBackground - cmp r0, #0 - bne _022E1298 - mov r0, #0x5000 - mov r1, #1 - mov r2, #0 - bl GetBgRegionArea - ldr r1, [sp] - mov r2, r4 - ldr r1, [r1] - bl Memcpy32 -_022E1298: - mov r1, #0 - mov r2, r1 - mov r0, #0x5e00 - bl GetBgRegionArea - mov r1, #0 - mov r2, #0x20 - bl Memset32 - mov r1, #0 - ldr r0, _022E12F4 ; =0x00005E20 - mov r2, r1 - bl GetBgRegionArea - ldr r1, [sp] - mov r2, #0x240 - ldr r1, [r1] - add r1, r1, #0xc20 - add r1, r1, #0x1000 - bl Memcpy32 - add r0, sp, #4 - bl UnloadFile - add sp, sp, #0xc - ldmia sp!, {r3, r4, pc} - .align 2, 0 -#ifdef JAPAN -_022E12EC: .word 0x000003FD -#else -_022E12EC: .word 0x00000409 -#endif -_022E12F0: .word ov29_0237C6D4 -_022E12F4: .word 0x00005E20 - arm_func_end ov29_022E11F8 - - arm_func_start ov29_022E12F8 -ov29_022E12F8: ; 0x022E12F8 - ldr ip, _022E1300 ; =ov29_022E11F8 - bx ip - .align 2, 0 -_022E1300: .word ov29_022E11F8 - arm_func_end ov29_022E12F8 - - arm_func_start ov29_022E1304 -ov29_022E1304: ; 0x022E1304 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x24 - bl ResetDungeonColorPalette - ldr r1, _022E14EC ; =0x000003FE - add r2, sp, #8 - mov r0, #4 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, [sp, #8] - add r0, sp, #0x10 - bl HandleSir0Translation - ldr sb, [sp, #0x10] - ldr r4, _022E14F0 ; =OBJ_GRAPHICS_CONTROLS_PTR - mov r8, #0 - mov r7, #0xd0 - mov r6, #0xff - add r5, sp, #0x14 - mov fp, #1 -_022E134C: - str r7, [sp] - str r6, [sp, #4] - ldr r1, [sb, #8] - mov r0, r5 - mov r2, fp - mov r3, #0x10 - add r1, r1, r8, lsl #6 - bl FillPaletteInitInfo - mov r1, r8, lsl #0x10 - mov r2, r1, lsr #0x10 - ldr r0, [r4] - mov r1, r5 - bl LoadObjPalette - add r8, r8, #1 - cmp r8, #0x10 - blt _022E134C - ldr r4, [sp, #0x10] - mov r0, #0x110 - mov r1, #0 - bl OamTileNumberToVramAddressOv29 - ldmia r4, {r1, r2} - mov r2, r2, lsl #8 - mov r3, #0xd - bl CopyAndInterleaveWrapper - add r0, sp, #8 - bl UnloadFile - bl ov29_022E11F8 - mov r5, #0 - ldr r2, _022E14F4 ; =ov10_022C4D54 - ldr fp, _022E14F8 ; =DUNGEON_PTR - ldr r8, _022E14FC ; =0x00011EC8 - mov r6, #0x280 - mov r3, r5 - mov sb, #0x12 -_022E13D4: - mul r7, r5, sb - mov r0, r5, lsl #1 - ldrsh r1, [r2, r0] - mov r4, r3 -_022E13E4: - ldr ip, [fp] - orr r0, r6, r1, lsl #12 - add ip, r7, ip - add ip, ip, r4, lsl #1 - add r4, r4, #1 - strh r0, [ip, r8] - cmp r4, #9 - add r6, r6, #1 - blt _022E13E4 - add r5, r5, #1 - cmp r5, #0x22 - blt _022E13D4 - orr r0, r6, #0xf000 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - ldr r1, _022E14F8 ; =DUNGEON_PTR - ldr r0, _022E1500 ; =0x00012A92 - mov r4, #0 -_022E142C: - ldr r2, [r1] - add r2, r2, r4, lsl #1 - add r4, r4, #1 - strh r3, [r2, r0] - cmp r4, #9 - blt _022E142C -#ifdef JAPAN - ldr r2, _022E1504 ; =0x0000F2F0 - ldr r1, _022E14F8 ; =DUNGEON_PTR - mov r7, #0x2f0 - mov r3, #0 -_022E2AE4: - ldr r0, [r1] - add r0, r0, r3, lsl #1 - add r0, r0, #0x12000 - add r3, r3, #1 - strh r2, [r0, #0x88] - cmp r3, #9 - blt _022E2AE4 - ldr r2, _022E14F4 ; =ov10_022C4D54 - ldr lr, _022E14F8 ; =DUNGEON_PTR - add r7, r7, #1 - mov r8, #1 - mov r4, #0x1a - mov r5, #0x19 - mov r3, #0 - mov ip, #0x12 -_022E1490: - cmp r8, #1 - moveq sl, r5 - beq _022E2B34 - cmp r8, #2 - moveq sl, r4 -_022E2B34: - mul r6, r8, ip - mov r0, sl, lsl #1 - ldrsh r1, [r2, r0] - mov sb, r3 -_022E2B44: - ldr fp, [lr] - orr r0, r7, r1, lsl #12 - add fp, r6, fp - add fp, fp, sb, lsl #1 - add fp, fp, #0x12000 - strh r0, [fp, #0x88] - add sb, sb, #1 - cmp sb, #9 - add r7, r7, #1 - blt _022E2B44 - add r8, r8, #1 - cmp r8, #3 -#else - ldr r3, _022E1504 ; =0x0000F2F0 - ldr r1, _022E14F8 ; =DUNGEON_PTR - ldr r0, _022E1508 ; =0x0001212C - mov r6, #0x2f0 - mov r4, #0 -_022E1458: - ldr r2, [r1] - add r2, r2, r4, lsl #1 - add r4, r4, #1 - strh r3, [r2, r0] - cmp r4, #9 - blt _022E1458 - ldr r2, _022E14F4 ; =ov10_022C4D54 - ldr ip, _022E14F8 ; =DUNGEON_PTR - ldr sb, _022E1508 ; =0x0001212C - add r6, r6, #1 - mov r7, #1 - mov r3, #0x1a - mov r4, #0x19 - mov fp, #0x12 -_022E1490: - cmp r7, #1 - moveq sl, r4 - beq _022E14A4 - cmp r7, #2 - moveq sl, r3 -_022E14A4: - mul r5, r7, fp - mov r0, sl, lsl #1 - ldrsh r1, [r2, r0] - mov r8, #0 -_022E14B4: - ldr lr, [ip] - orr r0, r6, r1, lsl #12 - add lr, r5, lr - add lr, lr, r8, lsl #1 - strh r0, [lr, sb] - add r8, r8, #1 - cmp r8, #9 - add r6, r6, #1 - blt _022E14B4 - add r7, r7, #1 - cmp r7, #3 -#endif - blt _022E1490 - add sp, sp, #0x24 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -#ifdef JAPAN -_022E14EC: .word 0x000003F2 -#else -_022E14EC: .word 0x000003FE -#endif -_022E14F0: .word OBJ_GRAPHICS_CONTROLS_PTR -_022E14F4: .word ov10_022C4D54 -_022E14F8: .word DUNGEON_PTR -#ifdef JAPAN -_022E14FC: .word 0x00011E24 -_022E1500: .word 0x000129EE -_022E1504: .word 0x0000F2F0 -#else -_022E14FC: .word 0x00011EC8 -_022E1500: .word 0x00012A92 -_022E1504: .word 0x0000F2F0 -_022E1508: .word 0x0001212C -#endif - arm_func_end ov29_022E1304 - - arm_func_start ResetDungeonColorPalette -ResetDungeonColorPalette: ; 0x022E150C - ldr r0, _022E154C ; =DUNGEON_PTR - mov r3, #0 -_022E1514: - ldr r1, [r0] - and r2, r3, #0xff - add r1, r1, r3, lsl #2 - strb r2, [r1, #0x1e0] - ldr r1, [r0] - add r1, r1, r3, lsl #2 - strb r2, [r1, #0x1e1] - ldr r1, [r0] - add r1, r1, r3, lsl #2 - add r3, r3, #1 - strb r2, [r1, #0x1e2] - cmp r3, #0x100 - blt _022E1514 - bx lr - .align 2, 0 -_022E154C: .word DUNGEON_PTR - arm_func_end ResetDungeonColorPalette - - arm_func_start ov29_022E1550 -ov29_022E1550: ; 0x022E1550 -#ifdef JAPAN -#define OV29_022E1550_OFFSET -0xA4 -#else -#define OV29_022E1550_OFFSET 0 -#endif - stmdb sp!, {r3, lr} - bl GetFloorType - cmp r0, #0 - bne _022E1590 - ldr r0, _022E15C4 ; =DUNGEON_PTR - ldr r0, [r0] - ldrb r0, [r0, #0x748] - bl DungeonGoesUp - cmp r0, #0 - ldr r0, _022E15C4 ; =DUNGEON_PTR - movne r1, #0x1c - ldr r0, [r0] - moveq r1, #0x1b - add r0, r0, #0x4000 - strh r1, [r0, #0xd8 + OV29_022E1550_OFFSET] - ldmia sp!, {r3, pc} -_022E1590: - cmp r0, #1 - ldrne r0, _022E15C4 ; =DUNGEON_PTR - movne r1, #0x1d - ldrne r0, [r0] - addne r0, r0, #0x4000 - strneh r1, [r0, #0xd8 + OV29_022E1550_OFFSET] - ldmneia sp!, {r3, pc} - ldr r0, _022E15C4 ; =DUNGEON_PTR - mov r1, #6 - ldr r0, [r0] - add r0, r0, #0x4000 - strh r1, [r0, #0xd8 + OV29_022E1550_OFFSET] - ldmia sp!, {r3, pc} - .align 2, 0 -_022E15C4: .word DUNGEON_PTR - arm_func_end ov29_022E1550 - - arm_func_start ov29_022E15C8 -ov29_022E15C8: ; 0x022E15C8 - stmdb sp!, {r3, lr} - ldr r0, _022E15FC ; =ov29_02353540 - ldr r0, [r0, #4] - cmp r0, #0 - beq _022E15E4 - ldr r0, _022E1600 ; =ov29_02353544 - bl UnloadFile -_022E15E4: - bl ov29_02335760 - bl ov29_02335804 - ldr r0, _022E15FC ; =ov29_02353540 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_022E15FC: .word ov29_02353540 -_022E1600: .word ov29_02353544 - arm_func_end ov29_022E15C8 - - arm_func_start ov29_022E1604 -ov29_022E1604: ; 0x022E1604 - bx lr - arm_func_end ov29_022E1604 - - arm_func_start GetTrapInfo -GetTrapInfo: ; 0x022E1608 - ldr r0, [r0, #0xb4] - bx lr - arm_func_end GetTrapInfo diff --git a/asm/overlay_29_022E0A18.s b/asm/overlay_29_022E0A18.s new file mode 100644 index 00000000..0290999e --- /dev/null +++ b/asm/overlay_29_022E0A18.s @@ -0,0 +1,1015 @@ + .include "asm/macros.inc" + .include "overlay_29_022E0A18.inc" + + .text + + arm_func_start ov29_022E0A18 +ov29_022E0A18: ; 0x022E0A18 + stmdb sp!, {r3, lr} + mov r0, #0 + bl AnimationDelayOrSomething + mov r0, #0 + bl ov29_0234B1A4 + mov r0, #0 + bl ov29_022E8BFC + mov r0, #0 + bl SetMinimapDataE447 + ldr r0, _022E0A60 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x1a000 +#ifdef JAPAN + strb r1, [r0, #0x1a9] +#else + strb r1, [r0, #0x24d] +#endif + bl FadeToBlack + mov r0, #0 + bl ov29_022E9FD0 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E0A60: .word DUNGEON_PTR + arm_func_end ov29_022E0A18 + + arm_func_start GetAndStoreButtonInput +GetAndStoreButtonInput: ; 0x022E0A64 + stmdb sp!, {r3, lr} + ldr r1, _022E0B34 ; =DUNGEON_BUTTON_INPUT + mov r0, #0 + bl GetHeldButtons + ldr r1, _022E0B38 ; =ov29_0237C696 + mov r0, #0 + bl GetPressedButtons + ldr r1, _022E0B3C ; =ov29_0237C698 + mov r0, #0 + bl sub_020063F4 + ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT + mov r1, #0 + strh r1, [r0, #8] + ldrh r1, [r0] + tst r1, #2 + ldrsh r1, [r0, #0xa] + beq _022E0AB8 + cmp r1, #0x64 + addlt r1, r1, #1 + strlth r1, [r0, #0xa] + b _022E0ADC +_022E0AB8: + cmp r1, #2 + blt _022E0AD0 + cmp r1, #0xc + ldrlth r1, [r0, #8] + orrlt r1, r1, #2 + strlth r1, [r0, #8] +_022E0AD0: + ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT + mov r1, #0 + strh r1, [r0, #0xa] +_022E0ADC: + ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT + ldrh r1, [r0] + tst r1, #0x100 + ldrsh r1, [r0, #0xc] + beq _022E0B00 + cmp r1, #0x64 + addlt r1, r1, #1 + strlth r1, [r0, #0xc] + b _022E0B24 +_022E0B00: + cmp r1, #2 + blt _022E0B18 + cmp r1, #0xc + ldrlth r1, [r0, #8] + orrlt r1, r1, #0x100 + strlth r1, [r0, #8] +_022E0B18: + ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT + mov r1, #0 + strh r1, [r0, #0xc] +_022E0B24: + ldr r0, _022E0B40 ; =DUNGEON_BUTTON_INPUT + ldrh r1, [r0, #8] + strh r1, [r0, #6] + ldmia sp!, {r3, pc} + .align 2, 0 +_022E0B34: .word DUNGEON_BUTTON_INPUT +_022E0B38: .word ov29_0237C696 +_022E0B3C: .word ov29_0237C698 +_022E0B40: .word DUNGEON_BUTTON_INPUT + arm_func_end GetAndStoreButtonInput + + arm_func_start ov29_022E0B44 +ov29_022E0B44: ; 0x022E0B44 + ldr r1, _022E0B58 ; =0x000003E7 + ldr r0, _022E0B5C ; =DUNGEON_BUTTON_INPUT + strh r1, [r0, #0xa] + strh r1, [r0, #0xc] + bx lr + .align 2, 0 +_022E0B58: .word 0x000003E7 +_022E0B5C: .word DUNGEON_BUTTON_INPUT + arm_func_end ov29_022E0B44 + + arm_func_start ov29_022E0B60 +ov29_022E0B60: ; 0x022E0B60 + stmdb sp!, {r3, lr} + bl IsTouchScreenUseAnywhere + cmp r0, #0 + beq _022E0C18 + ldr r0, _022E0C24 ; =ov29_0237C6A4 + bl GetReleasedStylus + ldr r0, _022E0C28 ; =ov29_0237C6A4 + ldrb r1, [r0, #0x2c] + cmp r1, #0 + beq _022E0B98 + ldrh r1, [r0] + tst r1, #0x40 + moveq r1, #0 + streqb r1, [r0, #0x2c] +_022E0B98: + ldr r0, _022E0C28 ; =ov29_0237C6A4 + mov r2, #0 + ldrh r3, [r0] + strh r2, [r0, #0x24] + tst r3, #0x80 + beq _022E0BD0 + ldrh r1, [r0, #0x24] + tst r3, #0x1000 + orr r1, r1, #0x80 + strh r1, [r0, #0x24] + str r2, [r0, #0x28] + movne r1, #1 + strneb r1, [r0, #0x26] + ldmia sp!, {r3, pc} +_022E0BD0: + tst r3, #0x40 + beq _022E0C0C + ldr r1, [r0, #0x28] + cmp r1, #3 + bls _022E0C00 + ldrh r1, [r0, #0x24] + tst r3, #0x1000 + orr r1, r1, #0x40 + strh r1, [r0, #0x24] + movne r1, #1 + strneb r1, [r0, #0x26] + ldmia sp!, {r3, pc} +_022E0C00: + add r1, r1, #1 + str r1, [r0, #0x28] + ldmia sp!, {r3, pc} +_022E0C0C: + strb r2, [r0, #0x26] + str r2, [r0, #0x28] + ldmia sp!, {r3, pc} +_022E0C18: + ldr r0, _022E0C24 ; =ov29_0237C6A4 + bl sub_02006BFC + ldmia sp!, {r3, pc} + .align 2, 0 +_022E0C24: .word ov29_0237C6A4 +_022E0C28: .word ov29_0237C6A4 + arm_func_end ov29_022E0B60 + + arm_func_start ov29_022E0C2C +ov29_022E0C2C: ; 0x022E0C2C + ldr r1, _022E0C38 ; =ov29_0237C6A4 + strb r0, [r1, #0x2c] + bx lr + .align 2, 0 +_022E0C38: .word ov29_0237C6A4 + arm_func_end ov29_022E0C2C + + arm_func_start ov29_022E0C3C +ov29_022E0C3C: ; 0x022E0C3C + ldr r0, _022E0C48 ; =ov29_0237C6A4 + ldrb r0, [r0, #0x2c] + bx lr + .align 2, 0 +_022E0C48: .word ov29_0237C6A4 + arm_func_end ov29_022E0C3C + + arm_func_start ov29_022E0C4C +ov29_022E0C4C: ; 0x022E0C4C + stmdb sp!, {r3, lr} + bl sub_02006564 + ldr r0, _022E0C60 ; =ov29_0237C6A4 + bl sub_02006BFC + ldmia sp!, {r3, pc} + .align 2, 0 +_022E0C60: .word ov29_0237C6A4 + arm_func_end ov29_022E0C4C + + arm_func_start ov29_022E0C64 +ov29_022E0C64: ; 0x022E0C64 + ldr r1, _022E0C7C ; =ov29_0237C6A4 + ldr r2, [r1, #4] + ldr r1, [r1, #8] + str r2, [r0] + str r1, [r0, #4] + bx lr + .align 2, 0 +_022E0C7C: .word ov29_0237C6A4 + arm_func_end ov29_022E0C64 + + arm_func_start ov29_022E0C80 +ov29_022E0C80: ; 0x022E0C80 + ldr r1, _022E0C98 ; =ov29_0237C6A4 + ldr r2, [r1, #0xc] + ldr r1, [r1, #0x10] + str r2, [r0] + str r1, [r0, #4] + bx lr + .align 2, 0 +_022E0C98: .word ov29_0237C6A4 + arm_func_end ov29_022E0C80 + + arm_func_start ov29_022E0C9C +ov29_022E0C9C: ; 0x022E0C9C + ldr r1, _022E0CB4 ; =ov29_0237C6A4 + ldr r2, [r1, #0x14] + ldr r1, [r1, #0x18] + str r2, [r0] + str r1, [r0, #4] + bx lr + .align 2, 0 +_022E0CB4: .word ov29_0237C6A4 + arm_func_end ov29_022E0C9C + + arm_func_start CheckTouchscreenArea +CheckTouchscreenArea: ; 0x022E0CB8 + stmdb sp!, {r3, lr} + ldr lr, _022E0CF8 ; =ov29_0237C6B8 + ldr ip, [lr] + cmp r0, ip + bgt _022E0CE8 + cmp r2, ip + blt _022E0CE8 + ldr r0, [lr, #4] + cmp r1, r0 + bgt _022E0CE8 + cmp r3, r0 + bge _022E0CF0 +_022E0CE8: + mov r0, #0 + ldmia sp!, {r3, pc} +_022E0CF0: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_022E0CF8: .word ov29_0237C6B8 + arm_func_end CheckTouchscreenArea + + arm_func_start ov29_022E0CFC +ov29_022E0CFC: ; 0x022E0CFC + stmdb sp!, {r3, lr} + mov r0, #0 + bl sub_020091CC + mov r0, #1 + bl sub_020091CC + bl ov29_022E0E8C + mov r0, #0 + mov r2, r0 + mov r1, #1 + bl sub_02009454 + mov r0, #1 + mov r1, #2 + mov r2, #0 + bl sub_02009454 + mov r0, #2 + mov r1, r0 + mov r2, #0 + bl sub_02009454 + mov r0, #3 + mov r1, #2 + mov r2, #0 + bl sub_02009454 + mov r0, #4 + mov r1, #2 + mov r2, #0 + bl sub_02009454 + mov r0, #0x40 + mov r1, r0 + mov r2, #0 + bl sub_020094C4 + mov r0, #0 + mov r1, #2 + mov r2, #1 + bl sub_02009454 + mov r0, #1 + mov r1, #2 + mov r2, r0 + bl sub_02009454 + mov r0, #2 + mov r1, r0 + mov r2, #1 + bl sub_02009454 + mov r0, #3 + mov r1, #2 + mov r2, #1 + bl sub_02009454 + mov r0, #4 + mov r1, #2 + mov r2, #1 + bl sub_02009454 + mov r0, #0x40 + mov r1, r0 + mov r2, #1 + bl sub_020094C4 + ldmia sp!, {r3, pc} + arm_func_end ov29_022E0CFC + + arm_func_start ov29_022E0DD8 +ov29_022E0DD8: ; 0x022E0DD8 + ldr ip, _022E0DE0 ; =sub_02009194 + bx ip + .align 2, 0 +_022E0DE0: .word sub_02009194 + arm_func_end ov29_022E0DD8 + + arm_func_start ov29_022E0DE4 +ov29_022E0DE4: ; 0x022E0DE4 + ldr ip, _022E0DEC ; =sub_020091B0 + bx ip + .align 2, 0 +_022E0DEC: .word sub_020091B0 + arm_func_end ov29_022E0DE4 + + arm_func_start ov29_022E0DF0 +ov29_022E0DF0: ; 0x022E0DF0 + ldr ip, _022E0DF8 ; =sub_020091CC + bx ip + .align 2, 0 +_022E0DF8: .word sub_020091CC + arm_func_end ov29_022E0DF0 + + arm_func_start ov29_022E0DFC +ov29_022E0DFC: ; 0x022E0DFC + stmdb sp!, {r3, lr} + mov r0, #0 + mov r1, r0 + mov r2, r0 + bl sub_020090A0 + mov r0, #1 + mov r1, r0 + mov r2, #0 + bl sub_020090A0 + mov r0, #2 + mov r1, r0 + mov r2, #0 + bl sub_020090A0 + mov r0, #3 + mov r1, r0 + mov r2, #0 + bl sub_020090A0 + ldmia sp!, {r3, pc} + arm_func_end ov29_022E0DFC + + arm_func_start ov29_022E0E44 +ov29_022E0E44: ; 0x022E0E44 + stmdb sp!, {r3, lr} + mov r0, #0 + mov r2, r0 + mov r1, #1 + bl sub_020090A0 + mov r1, #0 + mov r2, r1 + mov r0, #1 + bl sub_020090A0 + mov r0, #2 + mov r1, r0 + mov r2, #0 + bl sub_020090A0 + mov r0, #3 + mov r1, r0 + mov r2, #0 + bl sub_020090A0 + ldmia sp!, {r3, pc} + arm_func_end ov29_022E0E44 + + arm_func_start ov29_022E0E8C +ov29_022E0E8C: ; 0x022E0E8C + stmdb sp!, {r3, lr} + mov r0, #0 + mov r2, r0 + mov r1, #1 + bl sub_020090A0 + mov r1, #0 + mov r2, r1 + mov r0, #1 + bl sub_020090A0 + mov r0, #2 + mov r1, r0 + mov r2, #0 + bl sub_020090A0 + mov r0, #3 + mov r1, r0 + mov r2, #0 + bl sub_020090A0 + mov r0, #0 + mov r1, r0 + mov r2, #1 + bl sub_020090A0 + mov r0, #1 + mov r1, r0 + mov r2, r0 + bl sub_020090A0 + mov r0, #2 + mov r1, r0 + mov r2, #1 + bl sub_020090A0 + mov r0, #3 + mov r1, r0 + mov r2, #1 + bl sub_020090A0 + ldmia sp!, {r3, pc} + arm_func_end ov29_022E0E8C + + arm_func_start ov29_022E0F14 +ov29_022E0F14: ; 0x022E0F14 + ldr ip, _022E0F28 ; =sub_02008F3C + mov r2, r0, lsl #0x14 + mov r0, r1 + mov r1, r2, asr #0x10 + bx ip + .align 2, 0 +_022E0F28: .word sub_02008F3C + arm_func_end ov29_022E0F14 + + arm_func_start OamTileNumberToVramAddressOv29 +OamTileNumberToVramAddressOv29: ; 0x022E0F2C + ldr r3, _022E0F64 ; =OBJ_GRAPHICS_CONTROLS_PTR + mov r2, #0x70 + ldr ip, [r3] + ldr r3, _022E0F68 ; =_020AFC28 + mla r2, r1, r2, ip + ldrh r1, [r2, #0xc] + ldr ip, [r2, #0x64] + mov r2, r1, lsr #0x1f + rsb r1, r2, r1, lsl #30 + add r1, r2, r1, ror #30 + mov r1, r1, lsl #1 + ldrsh r1, [r3, r1] + smlabb r0, r0, r1, ip + bx lr + .align 2, 0 +_022E0F64: .word OBJ_GRAPHICS_CONTROLS_PTR +_022E0F68: .word _020AFC28 + arm_func_end OamTileNumberToVramAddressOv29 + + arm_func_start ov29_022E0F6C +ov29_022E0F6C: ; 0x022E0F6C + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x74 + ldr r3, _022E11D0 ; =ov29_023510E0 + add r2, sp, #0x28 + mov r1, #0x16 +_022E0F80: + ldrh r0, [r3], #2 + subs r1, r1, #1 + strh r0, [r2], #2 + bne _022E0F80 + ldr r1, _022E11D4 ; =0x000003E5 + add r2, sp, #8 + mov r0, #4 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, [sp, #8] + add r0, sp, #0x14 + bl HandleSir0Translation + mov r0, #0xb0 + str r0, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r1, [sp, #0x14] + add r0, sp, #0x54 + mov r2, #1 + mov r3, #0x20 + bl FillPaletteInitInfo + ldr r0, _022E11D8 ; =OBJ_GRAPHICS_CONTROLS_PTR + add r1, sp, #0x54 + ldr r0, [r0] + mov r2, #0 + bl LoadObjPalette + add r0, sp, #8 + bl UnloadFile + ldr r1, _022E11DC ; =0x000003E3 + mov r0, #4 + add r2, sp, #8 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, [sp, #8] + add r0, sp, #0x10 + bl HandleSir0Translation + ldr r1, [sp, #0x10] + mov r0, #0x1d0 + add r1, r1, #4 + str r1, [sp, #0x10] + mov r1, #0 + bl OamTileNumberToVramAddressOv29 + mov r7, #0 + add r6, sp, #0x28 + mov r5, r7 + mov r4, #0xb +_022E1038: + mov r0, r7, lsl #2 + add r1, r6, r7, lsl #2 + ldrsh r0, [r6, r0] + ldrsh r8, [r1, #2] + mov r1, r5 + bl OamTileNumberToVramAddressOv29 + ldr r1, [sp, #0x10] + mov r3, r4 + mov r2, r8, lsl #1 + bl CopyAndInterleaveWrapper + mov r0, r8, asr #1 + add r0, r8, r0, lsr #30 + add r7, r7, #1 + ldr r1, [sp, #0x10] + mov r0, r0, asr #2 + add r0, r1, r0, lsl #2 + str r0, [sp, #0x10] + cmp r7, #0xb + blo _022E1038 + add r0, sp, #8 + bl UnloadFile + ldr r1, _022E11E0 ; =0x000003E7 + add r2, sp, #8 + mov r0, #4 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, [sp, #8] + add r0, sp, #0x18 + bl HandleSir0Translation + mov r2, #0 + str r2, [sp] + mov r0, #0xff + str r0, [sp, #4] + ldr r1, [sp, #0x18] + add r0, sp, #0x64 + mov r3, #0x10 + bl FillPaletteInitInfo + ldr r0, _022E11D8 ; =OBJ_GRAPHICS_CONTROLS_PTR + add r1, sp, #0x64 + ldr r0, [r0] + mov r2, #0xc + add r0, r0, #0x70 + bl LoadObjPalette + add r0, sp, #8 + bl UnloadFile + ldr r1, _022E11E4 ; =0x000003E6 + mov r0, #4 + add r2, sp, #8 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, [sp, #8] + add r0, sp, #0x1c + bl HandleSir0Translation + ldr r1, [sp, #0x1c] + mov r0, #0x70 + add r1, r1, #4 + str r1, [sp, #0x1c] + mov r1, #1 + bl OamTileNumberToVramAddressOv29 + ldr r1, [sp, #0x1c] + mov r2, #0x80 + bl Memcpy32 + add r0, sp, #8 + bl UnloadFile + ldr r2, _022E11E8 ; =ov29_02353544 + mov r0, #4 + mov r1, #0x3e4 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, _022E11EC ; =ov29_02353540 + ldr r0, _022E11F0 ; =ov29_02353540 + ldr r1, [r1, #4] + bl HandleSir0Translation + add r0, sp, #0x20 + mov r1, #4 +#ifdef JAPAN + mov r2, #0x3f4 +#else + mov r2, #0x400 +#endif + mov r3, #0 + bl LoadWteFromFileDirectory + mov r6, #0 + mov r5, r6 + ldr r4, _022E11F4 ; =_020AFC70 + b _022E11A8 +_022E1180: + ldr r0, [r4] + ldr r1, [r1, #0x18] + mov r2, r5 + mov r3, r6 + add r0, r0, #0xcc + add r1, r1, r6, lsl #2 + bl sub_0201E380 + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 +_022E11A8: + ldr r1, [sp, #0x24] + ldrsh r0, [r1, #0x1c] + cmp r6, r0 + blt _022E1180 + add r0, sp, #0x20 + bl UnloadWte + bl LoadTextureUi + bl ov29_02335774 + add sp, sp, #0x74 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_022E11D0: .word ov29_023510E0 +_022E11D4: .word 0x000003E5 +_022E11D8: .word OBJ_GRAPHICS_CONTROLS_PTR +_022E11DC: .word 0x000003E3 +_022E11E0: .word 0x000003E7 +_022E11E4: .word 0x000003E6 +_022E11E8: .word ov29_02353544 +_022E11EC: .word ov29_02353540 +_022E11F0: .word ov29_02353540 +_022E11F4: .word _020AFC70 + arm_func_end ov29_022E0F6C + + arm_func_start ov29_022E11F8 +ov29_022E11F8: ; 0x022E11F8 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #0xc + ldr r1, _022E12EC ; =0x00000409 + add r2, sp, #4 + mov r0, #4 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, [sp, #4] + add r0, sp, #0 + bl HandleSir0Translation + ldr lr, [sp] + mov r4, #0 + ldr ip, _022E12F0 ; =ov29_0237C6D4 + b _022E1254 +_022E1230: + ldr r0, [lr, #8] + add r2, ip, r4, lsl #2 + add r3, r0, r4, lsl #2 + mov r1, #4 +_022E1240: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _022E1240 + add r4, r4, #1 +_022E1254: + ldr r0, [lr, #0xc] + cmp r4, r0 + blt _022E1230 + ldr r1, [lr, #4] + mov r0, #0x120 + mul r4, r1, r0 + bl IsCurrentTilesetBackground + cmp r0, #0 + bne _022E1298 + mov r0, #0x5000 + mov r1, #1 + mov r2, #0 + bl GetBgRegionArea + ldr r1, [sp] + mov r2, r4 + ldr r1, [r1] + bl Memcpy32 +_022E1298: + mov r1, #0 + mov r2, r1 + mov r0, #0x5e00 + bl GetBgRegionArea + mov r1, #0 + mov r2, #0x20 + bl Memset32 + mov r1, #0 + ldr r0, _022E12F4 ; =0x00005E20 + mov r2, r1 + bl GetBgRegionArea + ldr r1, [sp] + mov r2, #0x240 + ldr r1, [r1] + add r1, r1, #0xc20 + add r1, r1, #0x1000 + bl Memcpy32 + add r0, sp, #4 + bl UnloadFile + add sp, sp, #0xc + ldmia sp!, {r3, r4, pc} + .align 2, 0 +#ifdef JAPAN +_022E12EC: .word 0x000003FD +#else +_022E12EC: .word 0x00000409 +#endif +_022E12F0: .word ov29_0237C6D4 +_022E12F4: .word 0x00005E20 + arm_func_end ov29_022E11F8 + + arm_func_start ov29_022E12F8 +ov29_022E12F8: ; 0x022E12F8 + ldr ip, _022E1300 ; =ov29_022E11F8 + bx ip + .align 2, 0 +_022E1300: .word ov29_022E11F8 + arm_func_end ov29_022E12F8 + + arm_func_start ov29_022E1304 +ov29_022E1304: ; 0x022E1304 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x24 + bl ResetDungeonColorPalette + ldr r1, _022E14EC ; =0x000003FE + add r2, sp, #8 + mov r0, #4 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, [sp, #8] + add r0, sp, #0x10 + bl HandleSir0Translation + ldr sb, [sp, #0x10] + ldr r4, _022E14F0 ; =OBJ_GRAPHICS_CONTROLS_PTR + mov r8, #0 + mov r7, #0xd0 + mov r6, #0xff + add r5, sp, #0x14 + mov fp, #1 +_022E134C: + str r7, [sp] + str r6, [sp, #4] + ldr r1, [sb, #8] + mov r0, r5 + mov r2, fp + mov r3, #0x10 + add r1, r1, r8, lsl #6 + bl FillPaletteInitInfo + mov r1, r8, lsl #0x10 + mov r2, r1, lsr #0x10 + ldr r0, [r4] + mov r1, r5 + bl LoadObjPalette + add r8, r8, #1 + cmp r8, #0x10 + blt _022E134C + ldr r4, [sp, #0x10] + mov r0, #0x110 + mov r1, #0 + bl OamTileNumberToVramAddressOv29 + ldmia r4, {r1, r2} + mov r2, r2, lsl #8 + mov r3, #0xd + bl CopyAndInterleaveWrapper + add r0, sp, #8 + bl UnloadFile + bl ov29_022E11F8 + mov r5, #0 + ldr r2, _022E14F4 ; =ov10_022C4D54 + ldr fp, _022E14F8 ; =DUNGEON_PTR + ldr r8, _022E14FC ; =0x00011EC8 + mov r6, #0x280 + mov r3, r5 + mov sb, #0x12 +_022E13D4: + mul r7, r5, sb + mov r0, r5, lsl #1 + ldrsh r1, [r2, r0] + mov r4, r3 +_022E13E4: + ldr ip, [fp] + orr r0, r6, r1, lsl #12 + add ip, r7, ip + add ip, ip, r4, lsl #1 + add r4, r4, #1 + strh r0, [ip, r8] + cmp r4, #9 + add r6, r6, #1 + blt _022E13E4 + add r5, r5, #1 + cmp r5, #0x22 + blt _022E13D4 + orr r0, r6, #0xf000 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + ldr r1, _022E14F8 ; =DUNGEON_PTR + ldr r0, _022E1500 ; =0x00012A92 + mov r4, #0 +_022E142C: + ldr r2, [r1] + add r2, r2, r4, lsl #1 + add r4, r4, #1 + strh r3, [r2, r0] + cmp r4, #9 + blt _022E142C +#ifdef JAPAN + ldr r2, _022E1504 ; =0x0000F2F0 + ldr r1, _022E14F8 ; =DUNGEON_PTR + mov r7, #0x2f0 + mov r3, #0 +_022E2AE4: + ldr r0, [r1] + add r0, r0, r3, lsl #1 + add r0, r0, #0x12000 + add r3, r3, #1 + strh r2, [r0, #0x88] + cmp r3, #9 + blt _022E2AE4 + ldr r2, _022E14F4 ; =ov10_022C4D54 + ldr lr, _022E14F8 ; =DUNGEON_PTR + add r7, r7, #1 + mov r8, #1 + mov r4, #0x1a + mov r5, #0x19 + mov r3, #0 + mov ip, #0x12 +_022E1490: + cmp r8, #1 + moveq sl, r5 + beq _022E2B34 + cmp r8, #2 + moveq sl, r4 +_022E2B34: + mul r6, r8, ip + mov r0, sl, lsl #1 + ldrsh r1, [r2, r0] + mov sb, r3 +_022E2B44: + ldr fp, [lr] + orr r0, r7, r1, lsl #12 + add fp, r6, fp + add fp, fp, sb, lsl #1 + add fp, fp, #0x12000 + strh r0, [fp, #0x88] + add sb, sb, #1 + cmp sb, #9 + add r7, r7, #1 + blt _022E2B44 + add r8, r8, #1 + cmp r8, #3 +#else + ldr r3, _022E1504 ; =0x0000F2F0 + ldr r1, _022E14F8 ; =DUNGEON_PTR + ldr r0, _022E1508 ; =0x0001212C + mov r6, #0x2f0 + mov r4, #0 +_022E1458: + ldr r2, [r1] + add r2, r2, r4, lsl #1 + add r4, r4, #1 + strh r3, [r2, r0] + cmp r4, #9 + blt _022E1458 + ldr r2, _022E14F4 ; =ov10_022C4D54 + ldr ip, _022E14F8 ; =DUNGEON_PTR + ldr sb, _022E1508 ; =0x0001212C + add r6, r6, #1 + mov r7, #1 + mov r3, #0x1a + mov r4, #0x19 + mov fp, #0x12 +_022E1490: + cmp r7, #1 + moveq sl, r4 + beq _022E14A4 + cmp r7, #2 + moveq sl, r3 +_022E14A4: + mul r5, r7, fp + mov r0, sl, lsl #1 + ldrsh r1, [r2, r0] + mov r8, #0 +_022E14B4: + ldr lr, [ip] + orr r0, r6, r1, lsl #12 + add lr, r5, lr + add lr, lr, r8, lsl #1 + strh r0, [lr, sb] + add r8, r8, #1 + cmp r8, #9 + add r6, r6, #1 + blt _022E14B4 + add r7, r7, #1 + cmp r7, #3 +#endif + blt _022E1490 + add sp, sp, #0x24 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +#ifdef JAPAN +_022E14EC: .word 0x000003F2 +#else +_022E14EC: .word 0x000003FE +#endif +_022E14F0: .word OBJ_GRAPHICS_CONTROLS_PTR +_022E14F4: .word ov10_022C4D54 +_022E14F8: .word DUNGEON_PTR +#ifdef JAPAN +_022E14FC: .word 0x00011E24 +_022E1500: .word 0x000129EE +_022E1504: .word 0x0000F2F0 +#else +_022E14FC: .word 0x00011EC8 +_022E1500: .word 0x00012A92 +_022E1504: .word 0x0000F2F0 +_022E1508: .word 0x0001212C +#endif + arm_func_end ov29_022E1304 + + arm_func_start ResetDungeonColorPalette +ResetDungeonColorPalette: ; 0x022E150C + ldr r0, _022E154C ; =DUNGEON_PTR + mov r3, #0 +_022E1514: + ldr r1, [r0] + and r2, r3, #0xff + add r1, r1, r3, lsl #2 + strb r2, [r1, #0x1e0] + ldr r1, [r0] + add r1, r1, r3, lsl #2 + strb r2, [r1, #0x1e1] + ldr r1, [r0] + add r1, r1, r3, lsl #2 + add r3, r3, #1 + strb r2, [r1, #0x1e2] + cmp r3, #0x100 + blt _022E1514 + bx lr + .align 2, 0 +_022E154C: .word DUNGEON_PTR + arm_func_end ResetDungeonColorPalette + + arm_func_start ov29_022E1550 +ov29_022E1550: ; 0x022E1550 +#ifdef JAPAN +#define OV29_022E1550_OFFSET -0xA4 +#else +#define OV29_022E1550_OFFSET 0 +#endif + stmdb sp!, {r3, lr} + bl GetFloorType + cmp r0, #0 + bne _022E1590 + ldr r0, _022E15C4 ; =DUNGEON_PTR + ldr r0, [r0] + ldrb r0, [r0, #0x748] + bl DungeonGoesUp + cmp r0, #0 + ldr r0, _022E15C4 ; =DUNGEON_PTR + movne r1, #0x1c + ldr r0, [r0] + moveq r1, #0x1b + add r0, r0, #0x4000 + strh r1, [r0, #0xd8 + OV29_022E1550_OFFSET] + ldmia sp!, {r3, pc} +_022E1590: + cmp r0, #1 + ldrne r0, _022E15C4 ; =DUNGEON_PTR + movne r1, #0x1d + ldrne r0, [r0] + addne r0, r0, #0x4000 + strneh r1, [r0, #0xd8 + OV29_022E1550_OFFSET] + ldmneia sp!, {r3, pc} + ldr r0, _022E15C4 ; =DUNGEON_PTR + mov r1, #6 + ldr r0, [r0] + add r0, r0, #0x4000 + strh r1, [r0, #0xd8 + OV29_022E1550_OFFSET] + ldmia sp!, {r3, pc} + .align 2, 0 +_022E15C4: .word DUNGEON_PTR + arm_func_end ov29_022E1550 + + arm_func_start ov29_022E15C8 +ov29_022E15C8: ; 0x022E15C8 + stmdb sp!, {r3, lr} + ldr r0, _022E15FC ; =ov29_02353540 + ldr r0, [r0, #4] + cmp r0, #0 + beq _022E15E4 + ldr r0, _022E1600 ; =ov29_02353544 + bl UnloadFile +_022E15E4: + bl ov29_02335760 + bl ov29_02335804 + ldr r0, _022E15FC ; =ov29_02353540 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_022E15FC: .word ov29_02353540 +_022E1600: .word ov29_02353544 + arm_func_end ov29_022E15C8 + + arm_func_start ov29_022E1604 +ov29_022E1604: ; 0x022E1604 + bx lr + arm_func_end ov29_022E1604 + + arm_func_start GetTrapInfo +GetTrapInfo: ; 0x022E1608 + ldr r0, [r0, #0xb4] + bx lr + arm_func_end GetTrapInfo diff --git a/asm/overlay_29_022ECDE4.s b/asm/overlay_29_022ECDE4.s index 48d02b63..e36fb85b 100644 --- a/asm/overlay_29_022ECDE4.s +++ b/asm/overlay_29_022ECDE4.s @@ -186,911 +186,3 @@ _022ECFF8: .align 2, 0 _022ED004: .word DUNGEON_PTR arm_func_end ov29_022ECFB8 - - arm_func_start SetForcedLossReason -SetForcedLossReason: ; 0x022ED008 - ldr r1, _022ED018 ; =DUNGEON_PTR - ldr r1, [r1] - str r0, [r1, #0x14] - bx lr - .align 2, 0 -_022ED018: .word DUNGEON_PTR - arm_func_end SetForcedLossReason - - arm_func_start GetForcedLossReason -GetForcedLossReason: ; 0x022ED01C - ldr r0, _022ED02C ; =DUNGEON_PTR - ldr r0, [r0] - ldr r0, [r0, #0x14] - bx lr - .align 2, 0 -_022ED02C: .word DUNGEON_PTR - arm_func_end GetForcedLossReason - - arm_func_start ov29_022ED030 -ov29_022ED030: ; 0x022ED030 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr r1, _022ED0A0 ; =ov29_02352690 - ldr r2, _022ED0A4 ; =0x00000401 - ldr r3, [r1, #4] - ldr ip, [r1] - str r3, [sp, #4] - add r0, sp, #0 - mov r1, #4 - mov r3, #0x300 - str ip, [sp] - bl LoadWteFromFileDirectory - ldr r0, [sp, #4] - mov r1, #0x400 - mov r2, #0x1d - mov r3, #0 - bl ProcessWte - ldr r1, [sp, #4] - ldr r0, [sp] - ldrh r2, [r1, #0xc] - ldr r1, _022ED0A8 ; =ov29_0237C99C - strh r2, [r1] - bl sub_0201E080 - ldr r0, _022ED0AC ; =ov29_0235359C - mov r1, #1 - strb r1, [r0] - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_022ED0A0: .word ov29_02352690 -#ifdef JAPAN -_022ED0A4: .word 0x000003F5 -#else -_022ED0A4: .word 0x00000401 -#endif -_022ED0A8: .word ov29_0237C99C -_022ED0AC: .word ov29_0235359C - arm_func_end ov29_022ED030 - - arm_func_start ov29_022ED0B0 -ov29_022ED0B0: ; 0x022ED0B0 - ldr r0, _022ED0C0 ; =ov29_0235359C - mov r1, #0 - strb r1, [r0] - bx lr - .align 2, 0 -_022ED0C0: .word ov29_0235359C - arm_func_end ov29_022ED0B0 - - arm_func_start ov29_022ED0C4 -ov29_022ED0C4: ; 0x022ED0C4 - ldr r0, _022ED0D0 ; =ov29_0235359C - ldrb r0, [r0, #4] - bx lr - .align 2, 0 -_022ED0D0: .word ov29_0235359C - arm_func_end ov29_022ED0C4 - - arm_func_start ov29_022ED0D4 -ov29_022ED0D4: ; 0x022ED0D4 - cmp r0, #0 - movlt r0, #0 - cmp r0, #0xff - ldr r1, _022ED0F0 ; =ov29_0235359C - movgt r0, #0xff - strb r0, [r1, #4] - bx lr - .align 2, 0 -_022ED0F0: .word ov29_0235359C - arm_func_end ov29_022ED0D4 - - arm_func_start ov29_022ED0F4 -ov29_022ED0F4: ; 0x022ED0F4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _022ED180 ; =ov29_0235359C - mov r4, r0 - ldrb r7, [r1, #4] - cmp r7, #0x80 - ldmlsia sp!, {r3, r4, r5, r6, r7, pc} - cmp r7, #0x80 - mov r6, #0x80 - mov r5, #0x68 - ble _022ED174 - b _022ED144 -_022ED120: - sub r0, r7, r4 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #0x80 - movle r7, r6 - mov r0, r7 - bl ov29_022ED0D4 - mov r0, r5 - bl AdvanceFrame -_022ED144: - cmp r7, #0x80 - bne _022ED120 - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022ED150: - add r0, r7, r4 - mov r0, r0, lsl #0x10 - mov r7, r0, asr #0x10 - cmp r7, #0x80 - movge r7, r6 - mov r0, r7 - bl ov29_022ED0D4 - mov r0, r5 - bl AdvanceFrame -_022ED174: - cmp r7, #0x80 - bne _022ED150 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022ED180: .word ov29_0235359C - arm_func_end ov29_022ED0F4 - - arm_func_start ov29_022ED184 -ov29_022ED184: ; 0x022ED184 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x88 - ldr r3, _022ED7F0 ; =ov29_0235359C - ldrb r3, [r3] - cmp r3, #0 - beq _022ED7E8 - ldrb r4, [r2, #0x34] - cmp r4, #0 - bne _022ED1D0 - ldrb r3, [r2, #0x23] - cmp r3, #0 - ldreqb r3, [r2, #0x24] - cmpeq r3, #0 - ldreqb r3, [r2, #0x30] - cmpeq r3, #0 - movne r3, #1 - moveq r3, #0 - cmp r3, #0 - bne _022ED7E8 -_022ED1D0: - cmp r4, #0 - bne _022ED1E0 - cmp r1, #0xff - bne _022ED370 -_022ED1E0: - add r0, sp, #0x48 - bl InitRender3dElement64 - ldr r1, _022ED7F4 ; =ov29_0237C99C - ldr r0, _022ED7F8 ; =_020AFC70 - ldrh r2, [r1] - mov r3, #5 - mov r1, #0x400 - strb r3, [sp, #0x84] - strh r2, [sp, #0x5c] - ldr r0, [r0] - str r1, [sp, #0x68] - ldr r1, [r0, #0xe0] - ldr r0, _022ED7F0 ; =ov29_0235359C - add r1, r1, #0x3a00 - str r1, [sp, #0x6c] - ldrb r6, [r0, #4] - mov r5, #0 - mov r3, #0x30 - mov r4, #4 - mov r1, #0x100 - mov r2, #0x22 - add r0, sp, #0x48 - strb r6, [sp, #0x77] - strh r5, [sp, #0x5e] - strh r5, [sp, #0x60] - strh r4, [sp, #0x62] - strh r4, [sp, #0x64] - strh r3, [sp, #0x72] - strb r2, [sp, #0x86] - strh r5, [sp, #0x48] - strh r5, [sp, #0x4a] - strh r1, [sp, #0x4c] - strh r5, [sp, #0x4e] - strh r5, [sp, #0x50] - strh r3, [sp, #0x52] - strh r1, [sp, #0x54] - strh r3, [sp, #0x56] - bl sub_0201F2A0 - mov r4, r5 - mov r3, #0x90 - mov r2, #0x100 - mov r1, #0xc0 - add r0, sp, #0x48 - strh r4, [sp, #0x48] - strh r3, [sp, #0x4a] - strh r2, [sp, #0x4c] - strh r3, [sp, #0x4e] - strh r4, [sp, #0x50] - strh r1, [sp, #0x52] - strh r2, [sp, #0x54] - strh r1, [sp, #0x56] - bl sub_0201F2A0 - mov r3, #0x30 - mov r2, #0x50 - mov r1, #0x90 - add r0, sp, #0x48 - strh r4, [sp, #0x48] - strh r3, [sp, #0x4a] - strh r2, [sp, #0x4c] - strh r3, [sp, #0x4e] - strh r4, [sp, #0x50] - strh r1, [sp, #0x52] - strh r2, [sp, #0x54] - strh r1, [sp, #0x56] - bl sub_0201F2A0 - mov r3, #0xb0 - mov r2, #0x30 - mov r1, #0x100 - mov r0, #0x90 - strh r3, [sp, #0x48] - strh r2, [sp, #0x4a] - strh r1, [sp, #0x4c] - strh r2, [sp, #0x4e] - strh r3, [sp, #0x50] - strh r0, [sp, #0x52] - strh r1, [sp, #0x54] - strh r0, [sp, #0x56] - add r0, sp, #0x48 - bl sub_0201F2A0 - mov r6, #0x50 - mov r5, #0x30 - mov r4, #0xb0 - mov r3, #0x90 - mov r2, #0 - mov r1, #0x60 - add r0, sp, #0x48 - strh r6, [sp, #0x48] - strh r5, [sp, #0x4a] - strh r4, [sp, #0x4c] - strh r5, [sp, #0x4e] - strh r6, [sp, #0x50] - strh r3, [sp, #0x52] - strh r4, [sp, #0x54] - strh r3, [sp, #0x56] - strh r2, [sp, #0x5e] - strh r2, [sp, #0x60] - strh r1, [sp, #0x62] - strh r1, [sp, #0x64] - bl sub_0201F2A0 - b _022ED7E8 -_022ED370: - ldr r6, _022ED7FC ; =ov29_02352698 - add r5, sp, #0 - mov r4, #4 -_022ED37C: - ldrh r3, [r6], #2 - subs r4, r4, #1 - strh r3, [r5], #2 - bne _022ED37C - mov r3, #0x1c - smlabb r3, r1, r3, r0 - ldr r1, [r3, #0xc] - add r0, sp, #8 - strh r1, [sp] - ldr r1, [r3, #0x10] - strh r1, [sp, #2] - ldr r1, [r3, #0x14] - strh r1, [sp, #4] - ldr r1, [r3, #0x18] - strh r1, [sp, #6] - ldrsh r5, [r2, #0xa] - ldrsh r4, [r2, #8] - bl InitRender3dElement64 - ldrsh r3, [sp, #2] - ldrsh r6, [sp, #4] - ldrsh lr, [sp] - sub r3, r3, r5 - ldrsh r2, [sp, #6] - mov r1, #5 - mov r0, #0x400 - ldr ip, _022ED7F8 ; =_020AFC70 - mov r3, r3, lsl #0x10 - sub r6, r6, r4 - sub lr, lr, r4 - mov r4, r3, asr #0x10 - sub r5, r2, r5 - mov r3, r6, lsl #0x10 - mov r6, r5, lsl #0x10 - ldr r7, _022ED7F4 ; =ov29_0237C99C - strb r1, [sp, #0x44] - ldrh r1, [r7] - ldr r5, [ip] - str r0, [sp, #0x28] - ldr r0, [r5, #0xe0] - mov r2, lr, lsl #0x10 - add r5, r0, #0x3a00 - str r5, [sp, #0x2c] - strh r1, [sp, #0x1c] - ldr r0, _022ED7F0 ; =ov29_0235359C - mov r1, #0 - ldrb ip, [r0, #4] - mov r7, #4 - mov r5, #0x30 - mov r0, #0x22 - strh r5, [sp, #0x32] - strb ip, [sp, #0x37] - strh r1, [sp, #0x1e] - strh r1, [sp, #0x20] - strh r7, [sp, #0x22] - strh r7, [sp, #0x24] - strb r0, [sp, #0x46] - cmp r4, #0 - mov r5, r2, asr #0x10 - mov r7, r3, asr #0x10 - mov r6, r6, asr #0x10 - ble _022ED4A4 - mov r0, r4, lsl #0x10 - mov r2, r0, asr #0x10 - mov r3, #0x100 - add r0, sp, #8 - strh r1, [sp, #8] - strh r1, [sp, #0xa] - strh r3, [sp, #0xc] - strh r1, [sp, #0xe] - strh r1, [sp, #0x10] - strh r2, [sp, #0x12] - strh r3, [sp, #0x14] - strh r2, [sp, #0x16] - bl sub_0201F2A0 -_022ED4A4: - cmp r6, #0 - movlt r0, #0 - movge r0, r6 - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 - rsb r0, r1, #0xc0 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - cmp r0, #0 - ble _022ED508 - add r0, r1, r0 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 - mov ip, #0 - mov r3, #0x100 - add r0, sp, #8 - strh ip, [sp, #8] - strh r1, [sp, #0xa] - strh r3, [sp, #0xc] - strh r1, [sp, #0xe] - strh ip, [sp, #0x10] - strh r2, [sp, #0x12] - strh r3, [sp, #0x14] - strh r2, [sp, #0x16] - bl sub_0201F2A0 -_022ED508: - cmp r4, #0 - movlt r0, #0 - movge r0, r4 - mov r0, r0, lsl #0x10 - sub r1, r6, r0, asr #16 - cmp r1, #0xc0 - movgt r1, #0xc0 - mov ip, r0, asr #0x10 - cmp r5, #0 - mov r0, r1, lsl #0x10 - ble _022ED574 - add r1, ip, r0, asr #16 - mov r0, r5, lsl #0x10 - mov r2, r0, asr #0x10 - mov r3, #0 - mov r0, r1, lsl #0x10 - mov r1, r0, asr #0x10 - add r0, sp, #8 - strh r3, [sp, #8] - strh ip, [sp, #0xa] - strh r2, [sp, #0xc] - strh ip, [sp, #0xe] - strh r3, [sp, #0x10] - strh r1, [sp, #0x12] - strh r2, [sp, #0x14] - strh r1, [sp, #0x16] - bl sub_0201F2A0 -_022ED574: - cmp r4, #0 - movlt r0, #0 - movge r0, r4 - mov r0, r0, lsl #0x10 - rsb r1, r7, #0x100 - mov r2, r1, lsl #0x10 - sub r3, r6, r0, asr #16 - cmp r3, #0xc0 - mov r2, r2, asr #0x10 - movgt r3, #0xc0 - mov r1, r0, asr #0x10 - cmp r2, #0 - mov r0, r3, lsl #0x10 - ble _022ED5EC - add r3, r7, r2 - add r2, r1, r0, asr #16 - mov r0, r3, lsl #0x10 - mov r3, r0, asr #0x10 - mov r0, r2, lsl #0x10 - mov r2, r0, asr #0x10 - add r0, sp, #8 - strh r7, [sp, #8] - strh r1, [sp, #0xa] - strh r3, [sp, #0xc] - strh r1, [sp, #0xe] - strh r7, [sp, #0x10] - strh r2, [sp, #0x12] - strh r3, [sp, #0x14] - strh r2, [sp, #0x16] - bl sub_0201F2A0 -_022ED5EC: - mvn r0, #0x1f - cmp r5, r0 - cmpgt r4, r0 - ble _022ED660 - cmp r5, #0x120 - cmplt r4, #0xe0 - bge _022ED660 - add r0, r5, #0x20 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 - mov ip, #0 - mov r3, #0x30 - add r1, r4, #0x20 - mov r0, r1, lsl #0x10 - mov r1, r0, asr #0x10 - add r0, sp, #8 - strh ip, [sp, #0x1e] - strh ip, [sp, #0x20] - strh r3, [sp, #0x22] - strh r3, [sp, #0x24] - strh r5, [sp, #8] - strh r4, [sp, #0xa] - strh r2, [sp, #0xc] - strh r4, [sp, #0xe] - strh r5, [sp, #0x10] - strh r1, [sp, #0x12] - strh r2, [sp, #0x14] - strh r1, [sp, #0x16] - bl sub_0201F2A0 -_022ED660: - sub r7, r7, #0x20 - mov r0, r7, lsl #0x10 - mvn r1, #0x1f - cmp r1, r0, asr #16 - mov r2, r0, asr #0x10 - bge _022ED6E4 - cmp r4, r1 - ble _022ED6E4 - cmp r2, #0x120 - cmplt r4, #0xe0 - bge _022ED6E4 - add r0, r2, #0x20 - mov r0, r0, lsl #0x10 - mov ip, r0, asr #0x10 - mov r1, #0x30 - add r3, r4, #0x20 - mov r0, r3, lsl #0x10 - mov r3, r0, asr #0x10 - mov lr, #0 - add r0, sp, #8 - strh r1, [sp, #0x1e] - strh lr, [sp, #0x20] - strh r1, [sp, #0x22] - strh r1, [sp, #0x24] - strh r2, [sp, #8] - strh r4, [sp, #0xa] - strh ip, [sp, #0xc] - strh r4, [sp, #0xe] - strh r2, [sp, #0x10] - strh r3, [sp, #0x12] - strh ip, [sp, #0x14] - strh r3, [sp, #0x16] - bl sub_0201F2A0 -_022ED6E4: - sub r4, r6, #0x20 - mov r0, r4, lsl #0x10 - mvn r2, #0x1f - mov r1, r0, asr #0x10 - cmp r5, r2 - cmpgt r1, r2 - ble _022ED764 - cmp r5, #0x120 - cmplt r1, #0xe0 - bge _022ED764 - add r0, r5, #0x20 - mov r0, r0, lsl #0x10 - mov r3, r0, asr #0x10 - mov r6, #0x30 - add r2, r1, #0x20 - mov r0, r2, lsl #0x10 - mov r2, r0, asr #0x10 - mov ip, #0 - add r0, sp, #8 - strh ip, [sp, #0x1e] - strh r6, [sp, #0x20] - strh r6, [sp, #0x22] - strh r6, [sp, #0x24] - strh r5, [sp, #8] - strh r1, [sp, #0xa] - strh r3, [sp, #0xc] - strh r1, [sp, #0xe] - strh r5, [sp, #0x10] - strh r2, [sp, #0x12] - strh r3, [sp, #0x14] - strh r2, [sp, #0x16] - bl sub_0201F2A0 -_022ED764: - mov r0, r7, lsl #0x10 - mov r1, r4, lsl #0x10 - mvn r2, #0x1f - cmp r2, r0, asr #16 - mov r5, r0, asr #0x10 - mov r4, r1, asr #0x10 - bge _022ED7E8 - cmp r4, r2 - ble _022ED7E8 - cmp r5, #0x120 - cmplt r4, #0xe0 - bge _022ED7E8 - add r0, r5, #0x20 - mov r0, r0, lsl #0x10 - mov r2, r0, asr #0x10 - mov r3, #0x30 - add r1, r4, #0x20 - mov r0, r1, lsl #0x10 - mov r1, r0, asr #0x10 - add r0, sp, #8 - strh r3, [sp, #0x1e] - strh r3, [sp, #0x20] - strh r3, [sp, #0x22] - strh r3, [sp, #0x24] - strh r5, [sp, #8] - strh r4, [sp, #0xa] - strh r2, [sp, #0xc] - strh r4, [sp, #0xe] - strh r5, [sp, #0x10] - strh r1, [sp, #0x12] - strh r2, [sp, #0x14] - strh r1, [sp, #0x16] - bl sub_0201F2A0 -_022ED7E8: - add sp, sp, #0x88 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022ED7F0: .word ov29_0235359C -_022ED7F4: .word ov29_0237C99C -_022ED7F8: .word _020AFC70 -_022ED7FC: .word ov29_02352698 - arm_func_end ov29_022ED184 - - arm_func_start ov29_022ED800 -ov29_022ED800: ; 0x022ED800 - stmdb sp!, {r3, lr} - cmp r0, #0 - ldmeqia sp!, {r3, pc} - add r3, r0, #0xe900 - ldrh r3, [r3, #0xec] - tst r3, #1 - ldmneia sp!, {r3, pc} - add r0, r0, #0x224 - add r0, r0, #0xac00 - bl ov29_022ED184 - ldmia sp!, {r3, pc} - arm_func_end ov29_022ED800 - - arm_func_start GetTrapName -GetTrapName: ; 0x022ED82C - stmdb sp!, {r4, lr} -#if defined(EUROPE) - add r1, r1, #0xc3 - add r1, r1, #0x3400 -#elif defined(JAPAN) - add r1, r1, #0x46 - add r1, r1, #0x4700 -#else - add r1, r1, #0xc1 - add r1, r1, #0x3400 -#endif - mov r1, r1, lsl #0x10 - mov r4, r0 - mov r0, r1, lsr #0x10 - bl StringFromId - mov r1, r0 - mov r0, r4 - bl strcpy - ldmia sp!, {r4, pc} - arm_func_end GetTrapName - - arm_func_start BindTrapToTile -BindTrapToTile: ; 0x022ED858 - cmp r1, #0 - strne r1, [r0, #0x10] - strneb r2, [r1, #0x20] - bx lr - arm_func_end BindTrapToTile - - arm_func_start AreLateGameTrapsEnabledWrapper -AreLateGameTrapsEnabledWrapper: ; 0x022ED868 - ldr r0, _022ED880 ; =DUNGEON_PTR - ldr ip, _022ED884 ; =AreLateGameTrapsEnabled - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrb r0, [r0, #0x36] -#else - ldrb r0, [r0, #0xda] -#endif - bx ip - .align 2, 0 -_022ED880: .word DUNGEON_PTR -_022ED884: .word AreLateGameTrapsEnabled - arm_func_end AreLateGameTrapsEnabledWrapper - - arm_func_start SpawnTraps -SpawnTraps: ; 0x022ED888 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - ldr r0, _022ED96C ; =ov29_023526A0 - mov sl, #0 - ldrh r1, [r0] - ldrh r0, [r0, #2] - add r6, sp, #4 - strh r1, [sp] - strh r0, [sp, #2] - mov r4, #6 - mov fp, #2 - mov r7, sl -_022ED8B8: - mov r0, sl, lsl #0x10 - mov r8, r7 - mov r5, r0, asr #0x10 -_022ED8C4: - mov r0, r8 - mov r1, sl - bl GetTileSafe - mov sb, r0 - ldrh r0, [sb, #2] - tst r0, #4 - beq _022ED94C - strh r8, [sp, #4] - strh r5, [sp, #6] - ldrh r0, [sb, #2] - tst r0, #0x40 - movne r0, r4 - bne _022ED8FC - bl GetRandomSpawnTrapId -_022ED8FC: - cmp r0, #0x11 - mov r1, r6 - bne _022ED92C - mov r2, fp - mov r3, #0 - bl SpawnTrap - movs r1, r0 - beq _022ED94C - mov r0, sb - mov r2, #1 - bl BindTrapToTile - b _022ED94C -_022ED92C: - mov r2, #0 - mov r3, r2 - bl SpawnTrap - movs r1, r0 - beq _022ED94C - mov r0, sb - mov r2, #0 - bl BindTrapToTile -_022ED94C: - add r8, r8, #1 - cmp r8, #0x38 - blt _022ED8C4 - add sl, sl, #1 - cmp sl, #0x20 - blt _022ED8B8 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022ED96C: .word ov29_023526A0 - arm_func_end SpawnTraps - - arm_func_start SpawnEnemyTrapAtPos -SpawnEnemyTrapAtPos: ; 0x022ED970 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r7, r1 - mov r6, r2 - mov r8, r0 - mov r0, r7 - mov r1, r6 - mov r5, r3 - bl GetTileSafe - mov r4, r0 - add r1, sp, #0 - mov r0, r8 - mov r3, r5 - mov r2, #0 - strh r7, [sp] - strh r6, [sp, #2] - bl SpawnTrap - movs r1, r0 - beq _022ED9C8 - ldrb r2, [sp, #0x20] - mov r0, r4 - bl BindTrapToTile -_022ED9C8: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - arm_func_end SpawnEnemyTrapAtPos - - arm_func_start CreateTrapAndStairsHallucinations -CreateTrapAndStairsHallucinations: ; 0x022ED9D0 -#ifdef JAPAN -#define OV29_022ED9D0_OFFSET -0xA4 -#else -#define OV29_022ED9D0_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - ldr r0, _022EDBB8 ; =DUNGEON_PTR - ldr r1, _022EDBBC ; =0x0001A21E - ldr r0, [r0] - ldrsh r2, [r0, r1] - add r1, r0, #0x1a000 - ldrb r8, [r1, #0x244 + OV29_022ED9D0_OFFSET] - sub sb, r2, #5 - b _022EDB9C -_022ED9F8: - ldr r1, _022EDBC0 ; =0x0001A21C - mov r2, #0x18 - ldrsh r0, [r0, r1] - mul sl, sb, r2 - sub r7, r0, #6 - mov r0, r1 - add fp, r0, #8 - ldr r0, _022EDBC4 ; =0x0000013E - ldr r6, _022EDBC8 ; =ov29_0237C864 - sub r0, r0, #0x1f - str r0, [sp, #4] - mov r0, r1 - add r5, r0, #0xa - ldr r4, _022EDBCC ; =0xFFFF000F - b _022EDB7C -_022EDA34: - mov r0, #0 - str r0, [sp] - mov r0, r7 - mov r1, sb - bl GetTile - ldr r2, [r0, #0x10] - cmp r2, #0 - beq _022EDA74 - ldr r1, [r2] - cmp r1, #2 - bne _022EDA74 - ldrb r1, [r2, #0x20] - cmp r1, #0 - cmpeq r8, #0 - movne r1, #1 - strne r1, [sp] -_022EDA74: - ldrh r0, [r0] - tst r0, #0x200 - movne r0, #1 - strne r0, [sp] - ldr r0, [sp] - cmp r0, #0 - beq _022EDB78 - ldr r0, _022EDBB8 ; =DUNGEON_PTR - ldr r3, [r0] - mov r0, #0x18 - mul r2, r7, r0 - ldrsh r1, [r3, fp] - ldrsh r0, [r3, r5] - sub r1, r2, r1 - sub r2, sl, r0 - cmp r1, r4, asr #11 - cmpge r2, r4, asr #11 - blt _022EDB78 - ldr r0, [sp, #4] - cmp r1, r0 - cmple r2, #0xe0 - bgt _022EDB78 - ldrh ip, [r6] - add r0, r2, #4 - add r1, r1, #4 - bic ip, ip, #0xc00 - strh ip, [r6] - ldrh ip, [r6, #6] - and r3, r1, r4, lsr #23 - mov r0, r0, lsl #0x14 - and ip, ip, r4 - strh ip, [r6, #6] - ldrh ip, [r6, #6] - mov r1, r6 - mov r2, #0 - orr r0, ip, r0, lsr #16 - strh r0, [r6, #6] - ldrh r0, [r6, #2] - and r0, r0, r4, asr #7 - strh r0, [r6, #2] - ldrh r0, [r6, #2] - orr r0, r0, r3 - strh r0, [r6, #2] - ldrh r0, [r6, #4] - bic r0, r0, #0xc00 - strh r0, [r6, #4] - ldrh r0, [r6, #4] - orr r0, r0, #0xc00 - strh r0, [r6, #4] - ldrh r0, [r6, #4] - bic r0, r0, #0xf000 - strh r0, [r6, #4] - ldrh r0, [r6, #4] - orr r0, r0, #0xa000 - strh r0, [r6, #4] - ldrh r0, [r6, #4] - and r0, r0, r4, asr #6 - strh r0, [r6, #4] - ldrh r3, [r6, #4] - orr r0, r3, #0x3e - orr r0, r0, #0x100 - strh r0, [r6, #4] - ldr r0, _022EDBD0 ; =OBJ_GRAPHICS_CONTROLS_PTR - ldr r0, [r0] - bl AddSimpleObjToOam -_022EDB78: - add r7, r7, #1 -_022EDB7C: - ldr r0, _022EDBB8 ; =DUNGEON_PTR - ldr r1, _022EDBC0 ; =0x0001A21C - ldr r0, [r0] - ldrsh r1, [r0, r1] - add r1, r1, #6 - cmp r7, r1 - blt _022EDA34 - add sb, sb, #1 -_022EDB9C: - ldr r1, _022EDBBC ; =0x0001A21E - ldrsh r1, [r0, r1] - add r1, r1, #5 - cmp sb, r1 - blt _022ED9F8 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_022EDBB8: .word DUNGEON_PTR -_022EDBBC: .word 0x0001A21E + OV29_022ED9D0_OFFSET -_022EDBC0: .word 0x0001A21C + OV29_022ED9D0_OFFSET -_022EDBC4: .word 0x0000013E -_022EDBC8: .word ov29_0237C864 -_022EDBCC: .word 0xFFFF000F -_022EDBD0: .word OBJ_GRAPHICS_CONTROLS_PTR - arm_func_end CreateTrapAndStairsHallucinations - - arm_func_start PrepareTrapperTrap -PrepareTrapperTrap: ; 0x022EDBD4 -#ifdef JAPAN -#define PREPARE_TRAPPER_TRAP_OFFSET -0xA4 -#else -#define PREPARE_TRAPPER_TRAP_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, lr} - ldr lr, _022EDC28 ; =DUNGEON_PTR - ldrsh r5, [r0] - ldr r3, _022EDC2C ; =0x00012AAA - ldr r4, [lr] - add ip, r3, #2 - strh r5, [r4, r3] - ldrsh r4, [r0, #2] - ldr r0, [lr] - mov r3, #1 - strh r4, [r0, ip] - ldr r0, [lr] - add r0, r0, #0x12000 - strb r1, [r0, #0xaae + PREPARE_TRAPPER_TRAP_OFFSET] - ldr r0, [lr] - add r0, r0, #0x12000 - strb r2, [r0, #0xaaf + PREPARE_TRAPPER_TRAP_OFFSET] - ldr r0, [lr] - add r0, r0, #0x12000 - strb r3, [r0, #0xaa8 + PREPARE_TRAPPER_TRAP_OFFSET] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_022EDC28: .word DUNGEON_PTR -_022EDC2C: .word 0x00012AAA + PREPARE_TRAPPER_TRAP_OFFSET - arm_func_end PrepareTrapperTrap diff --git a/asm/overlay_29_022ED030.s b/asm/overlay_29_022ED030.s new file mode 100644 index 00000000..a408df5c --- /dev/null +++ b/asm/overlay_29_022ED030.s @@ -0,0 +1,600 @@ + .include "asm/macros.inc" + .include "overlay_29_022ED030.inc" + + .text + + arm_func_start ov29_022ED030 +ov29_022ED030: ; 0x022ED030 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr r1, _022ED0A0 ; =ov29_02352690 + ldr r2, _022ED0A4 ; =0x00000401 + ldr r3, [r1, #4] + ldr ip, [r1] + str r3, [sp, #4] + add r0, sp, #0 + mov r1, #4 + mov r3, #0x300 + str ip, [sp] + bl LoadWteFromFileDirectory + ldr r0, [sp, #4] + mov r1, #0x400 + mov r2, #0x1d + mov r3, #0 + bl ProcessWte + ldr r1, [sp, #4] + ldr r0, [sp] + ldrh r2, [r1, #0xc] + ldr r1, _022ED0A8 ; =ov29_0237C99C + strh r2, [r1] + bl sub_0201E080 + ldr r0, _022ED0AC ; =ov29_0235359C + mov r1, #1 + strb r1, [r0] + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_022ED0A0: .word ov29_02352690 +#ifdef JAPAN +_022ED0A4: .word 0x000003F5 +#else +_022ED0A4: .word 0x00000401 +#endif +_022ED0A8: .word ov29_0237C99C +_022ED0AC: .word ov29_0235359C + arm_func_end ov29_022ED030 + + arm_func_start ov29_022ED0B0 +ov29_022ED0B0: ; 0x022ED0B0 + ldr r0, _022ED0C0 ; =ov29_0235359C + mov r1, #0 + strb r1, [r0] + bx lr + .align 2, 0 +_022ED0C0: .word ov29_0235359C + arm_func_end ov29_022ED0B0 + + arm_func_start ov29_022ED0C4 +ov29_022ED0C4: ; 0x022ED0C4 + ldr r0, _022ED0D0 ; =ov29_0235359C + ldrb r0, [r0, #4] + bx lr + .align 2, 0 +_022ED0D0: .word ov29_0235359C + arm_func_end ov29_022ED0C4 + + arm_func_start ov29_022ED0D4 +ov29_022ED0D4: ; 0x022ED0D4 + cmp r0, #0 + movlt r0, #0 + cmp r0, #0xff + ldr r1, _022ED0F0 ; =ov29_0235359C + movgt r0, #0xff + strb r0, [r1, #4] + bx lr + .align 2, 0 +_022ED0F0: .word ov29_0235359C + arm_func_end ov29_022ED0D4 + + arm_func_start ov29_022ED0F4 +ov29_022ED0F4: ; 0x022ED0F4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _022ED180 ; =ov29_0235359C + mov r4, r0 + ldrb r7, [r1, #4] + cmp r7, #0x80 + ldmlsia sp!, {r3, r4, r5, r6, r7, pc} + cmp r7, #0x80 + mov r6, #0x80 + mov r5, #0x68 + ble _022ED174 + b _022ED144 +_022ED120: + sub r0, r7, r4 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #0x80 + movle r7, r6 + mov r0, r7 + bl ov29_022ED0D4 + mov r0, r5 + bl AdvanceFrame +_022ED144: + cmp r7, #0x80 + bne _022ED120 + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022ED150: + add r0, r7, r4 + mov r0, r0, lsl #0x10 + mov r7, r0, asr #0x10 + cmp r7, #0x80 + movge r7, r6 + mov r0, r7 + bl ov29_022ED0D4 + mov r0, r5 + bl AdvanceFrame +_022ED174: + cmp r7, #0x80 + bne _022ED150 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022ED180: .word ov29_0235359C + arm_func_end ov29_022ED0F4 + + arm_func_start ov29_022ED184 +ov29_022ED184: ; 0x022ED184 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x88 + ldr r3, _022ED7F0 ; =ov29_0235359C + ldrb r3, [r3] + cmp r3, #0 + beq _022ED7E8 + ldrb r4, [r2, #0x34] + cmp r4, #0 + bne _022ED1D0 + ldrb r3, [r2, #0x23] + cmp r3, #0 + ldreqb r3, [r2, #0x24] + cmpeq r3, #0 + ldreqb r3, [r2, #0x30] + cmpeq r3, #0 + movne r3, #1 + moveq r3, #0 + cmp r3, #0 + bne _022ED7E8 +_022ED1D0: + cmp r4, #0 + bne _022ED1E0 + cmp r1, #0xff + bne _022ED370 +_022ED1E0: + add r0, sp, #0x48 + bl InitRender3dElement64 + ldr r1, _022ED7F4 ; =ov29_0237C99C + ldr r0, _022ED7F8 ; =_020AFC70 + ldrh r2, [r1] + mov r3, #5 + mov r1, #0x400 + strb r3, [sp, #0x84] + strh r2, [sp, #0x5c] + ldr r0, [r0] + str r1, [sp, #0x68] + ldr r1, [r0, #0xe0] + ldr r0, _022ED7F0 ; =ov29_0235359C + add r1, r1, #0x3a00 + str r1, [sp, #0x6c] + ldrb r6, [r0, #4] + mov r5, #0 + mov r3, #0x30 + mov r4, #4 + mov r1, #0x100 + mov r2, #0x22 + add r0, sp, #0x48 + strb r6, [sp, #0x77] + strh r5, [sp, #0x5e] + strh r5, [sp, #0x60] + strh r4, [sp, #0x62] + strh r4, [sp, #0x64] + strh r3, [sp, #0x72] + strb r2, [sp, #0x86] + strh r5, [sp, #0x48] + strh r5, [sp, #0x4a] + strh r1, [sp, #0x4c] + strh r5, [sp, #0x4e] + strh r5, [sp, #0x50] + strh r3, [sp, #0x52] + strh r1, [sp, #0x54] + strh r3, [sp, #0x56] + bl sub_0201F2A0 + mov r4, r5 + mov r3, #0x90 + mov r2, #0x100 + mov r1, #0xc0 + add r0, sp, #0x48 + strh r4, [sp, #0x48] + strh r3, [sp, #0x4a] + strh r2, [sp, #0x4c] + strh r3, [sp, #0x4e] + strh r4, [sp, #0x50] + strh r1, [sp, #0x52] + strh r2, [sp, #0x54] + strh r1, [sp, #0x56] + bl sub_0201F2A0 + mov r3, #0x30 + mov r2, #0x50 + mov r1, #0x90 + add r0, sp, #0x48 + strh r4, [sp, #0x48] + strh r3, [sp, #0x4a] + strh r2, [sp, #0x4c] + strh r3, [sp, #0x4e] + strh r4, [sp, #0x50] + strh r1, [sp, #0x52] + strh r2, [sp, #0x54] + strh r1, [sp, #0x56] + bl sub_0201F2A0 + mov r3, #0xb0 + mov r2, #0x30 + mov r1, #0x100 + mov r0, #0x90 + strh r3, [sp, #0x48] + strh r2, [sp, #0x4a] + strh r1, [sp, #0x4c] + strh r2, [sp, #0x4e] + strh r3, [sp, #0x50] + strh r0, [sp, #0x52] + strh r1, [sp, #0x54] + strh r0, [sp, #0x56] + add r0, sp, #0x48 + bl sub_0201F2A0 + mov r6, #0x50 + mov r5, #0x30 + mov r4, #0xb0 + mov r3, #0x90 + mov r2, #0 + mov r1, #0x60 + add r0, sp, #0x48 + strh r6, [sp, #0x48] + strh r5, [sp, #0x4a] + strh r4, [sp, #0x4c] + strh r5, [sp, #0x4e] + strh r6, [sp, #0x50] + strh r3, [sp, #0x52] + strh r4, [sp, #0x54] + strh r3, [sp, #0x56] + strh r2, [sp, #0x5e] + strh r2, [sp, #0x60] + strh r1, [sp, #0x62] + strh r1, [sp, #0x64] + bl sub_0201F2A0 + b _022ED7E8 +_022ED370: + ldr r6, _022ED7FC ; =ov29_02352698 + add r5, sp, #0 + mov r4, #4 +_022ED37C: + ldrh r3, [r6], #2 + subs r4, r4, #1 + strh r3, [r5], #2 + bne _022ED37C + mov r3, #0x1c + smlabb r3, r1, r3, r0 + ldr r1, [r3, #0xc] + add r0, sp, #8 + strh r1, [sp] + ldr r1, [r3, #0x10] + strh r1, [sp, #2] + ldr r1, [r3, #0x14] + strh r1, [sp, #4] + ldr r1, [r3, #0x18] + strh r1, [sp, #6] + ldrsh r5, [r2, #0xa] + ldrsh r4, [r2, #8] + bl InitRender3dElement64 + ldrsh r3, [sp, #2] + ldrsh r6, [sp, #4] + ldrsh lr, [sp] + sub r3, r3, r5 + ldrsh r2, [sp, #6] + mov r1, #5 + mov r0, #0x400 + ldr ip, _022ED7F8 ; =_020AFC70 + mov r3, r3, lsl #0x10 + sub r6, r6, r4 + sub lr, lr, r4 + mov r4, r3, asr #0x10 + sub r5, r2, r5 + mov r3, r6, lsl #0x10 + mov r6, r5, lsl #0x10 + ldr r7, _022ED7F4 ; =ov29_0237C99C + strb r1, [sp, #0x44] + ldrh r1, [r7] + ldr r5, [ip] + str r0, [sp, #0x28] + ldr r0, [r5, #0xe0] + mov r2, lr, lsl #0x10 + add r5, r0, #0x3a00 + str r5, [sp, #0x2c] + strh r1, [sp, #0x1c] + ldr r0, _022ED7F0 ; =ov29_0235359C + mov r1, #0 + ldrb ip, [r0, #4] + mov r7, #4 + mov r5, #0x30 + mov r0, #0x22 + strh r5, [sp, #0x32] + strb ip, [sp, #0x37] + strh r1, [sp, #0x1e] + strh r1, [sp, #0x20] + strh r7, [sp, #0x22] + strh r7, [sp, #0x24] + strb r0, [sp, #0x46] + cmp r4, #0 + mov r5, r2, asr #0x10 + mov r7, r3, asr #0x10 + mov r6, r6, asr #0x10 + ble _022ED4A4 + mov r0, r4, lsl #0x10 + mov r2, r0, asr #0x10 + mov r3, #0x100 + add r0, sp, #8 + strh r1, [sp, #8] + strh r1, [sp, #0xa] + strh r3, [sp, #0xc] + strh r1, [sp, #0xe] + strh r1, [sp, #0x10] + strh r2, [sp, #0x12] + strh r3, [sp, #0x14] + strh r2, [sp, #0x16] + bl sub_0201F2A0 +_022ED4A4: + cmp r6, #0 + movlt r0, #0 + movge r0, r6 + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 + rsb r0, r1, #0xc0 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + cmp r0, #0 + ble _022ED508 + add r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 + mov ip, #0 + mov r3, #0x100 + add r0, sp, #8 + strh ip, [sp, #8] + strh r1, [sp, #0xa] + strh r3, [sp, #0xc] + strh r1, [sp, #0xe] + strh ip, [sp, #0x10] + strh r2, [sp, #0x12] + strh r3, [sp, #0x14] + strh r2, [sp, #0x16] + bl sub_0201F2A0 +_022ED508: + cmp r4, #0 + movlt r0, #0 + movge r0, r4 + mov r0, r0, lsl #0x10 + sub r1, r6, r0, asr #16 + cmp r1, #0xc0 + movgt r1, #0xc0 + mov ip, r0, asr #0x10 + cmp r5, #0 + mov r0, r1, lsl #0x10 + ble _022ED574 + add r1, ip, r0, asr #16 + mov r0, r5, lsl #0x10 + mov r2, r0, asr #0x10 + mov r3, #0 + mov r0, r1, lsl #0x10 + mov r1, r0, asr #0x10 + add r0, sp, #8 + strh r3, [sp, #8] + strh ip, [sp, #0xa] + strh r2, [sp, #0xc] + strh ip, [sp, #0xe] + strh r3, [sp, #0x10] + strh r1, [sp, #0x12] + strh r2, [sp, #0x14] + strh r1, [sp, #0x16] + bl sub_0201F2A0 +_022ED574: + cmp r4, #0 + movlt r0, #0 + movge r0, r4 + mov r0, r0, lsl #0x10 + rsb r1, r7, #0x100 + mov r2, r1, lsl #0x10 + sub r3, r6, r0, asr #16 + cmp r3, #0xc0 + mov r2, r2, asr #0x10 + movgt r3, #0xc0 + mov r1, r0, asr #0x10 + cmp r2, #0 + mov r0, r3, lsl #0x10 + ble _022ED5EC + add r3, r7, r2 + add r2, r1, r0, asr #16 + mov r0, r3, lsl #0x10 + mov r3, r0, asr #0x10 + mov r0, r2, lsl #0x10 + mov r2, r0, asr #0x10 + add r0, sp, #8 + strh r7, [sp, #8] + strh r1, [sp, #0xa] + strh r3, [sp, #0xc] + strh r1, [sp, #0xe] + strh r7, [sp, #0x10] + strh r2, [sp, #0x12] + strh r3, [sp, #0x14] + strh r2, [sp, #0x16] + bl sub_0201F2A0 +_022ED5EC: + mvn r0, #0x1f + cmp r5, r0 + cmpgt r4, r0 + ble _022ED660 + cmp r5, #0x120 + cmplt r4, #0xe0 + bge _022ED660 + add r0, r5, #0x20 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 + mov ip, #0 + mov r3, #0x30 + add r1, r4, #0x20 + mov r0, r1, lsl #0x10 + mov r1, r0, asr #0x10 + add r0, sp, #8 + strh ip, [sp, #0x1e] + strh ip, [sp, #0x20] + strh r3, [sp, #0x22] + strh r3, [sp, #0x24] + strh r5, [sp, #8] + strh r4, [sp, #0xa] + strh r2, [sp, #0xc] + strh r4, [sp, #0xe] + strh r5, [sp, #0x10] + strh r1, [sp, #0x12] + strh r2, [sp, #0x14] + strh r1, [sp, #0x16] + bl sub_0201F2A0 +_022ED660: + sub r7, r7, #0x20 + mov r0, r7, lsl #0x10 + mvn r1, #0x1f + cmp r1, r0, asr #16 + mov r2, r0, asr #0x10 + bge _022ED6E4 + cmp r4, r1 + ble _022ED6E4 + cmp r2, #0x120 + cmplt r4, #0xe0 + bge _022ED6E4 + add r0, r2, #0x20 + mov r0, r0, lsl #0x10 + mov ip, r0, asr #0x10 + mov r1, #0x30 + add r3, r4, #0x20 + mov r0, r3, lsl #0x10 + mov r3, r0, asr #0x10 + mov lr, #0 + add r0, sp, #8 + strh r1, [sp, #0x1e] + strh lr, [sp, #0x20] + strh r1, [sp, #0x22] + strh r1, [sp, #0x24] + strh r2, [sp, #8] + strh r4, [sp, #0xa] + strh ip, [sp, #0xc] + strh r4, [sp, #0xe] + strh r2, [sp, #0x10] + strh r3, [sp, #0x12] + strh ip, [sp, #0x14] + strh r3, [sp, #0x16] + bl sub_0201F2A0 +_022ED6E4: + sub r4, r6, #0x20 + mov r0, r4, lsl #0x10 + mvn r2, #0x1f + mov r1, r0, asr #0x10 + cmp r5, r2 + cmpgt r1, r2 + ble _022ED764 + cmp r5, #0x120 + cmplt r1, #0xe0 + bge _022ED764 + add r0, r5, #0x20 + mov r0, r0, lsl #0x10 + mov r3, r0, asr #0x10 + mov r6, #0x30 + add r2, r1, #0x20 + mov r0, r2, lsl #0x10 + mov r2, r0, asr #0x10 + mov ip, #0 + add r0, sp, #8 + strh ip, [sp, #0x1e] + strh r6, [sp, #0x20] + strh r6, [sp, #0x22] + strh r6, [sp, #0x24] + strh r5, [sp, #8] + strh r1, [sp, #0xa] + strh r3, [sp, #0xc] + strh r1, [sp, #0xe] + strh r5, [sp, #0x10] + strh r2, [sp, #0x12] + strh r3, [sp, #0x14] + strh r2, [sp, #0x16] + bl sub_0201F2A0 +_022ED764: + mov r0, r7, lsl #0x10 + mov r1, r4, lsl #0x10 + mvn r2, #0x1f + cmp r2, r0, asr #16 + mov r5, r0, asr #0x10 + mov r4, r1, asr #0x10 + bge _022ED7E8 + cmp r4, r2 + ble _022ED7E8 + cmp r5, #0x120 + cmplt r4, #0xe0 + bge _022ED7E8 + add r0, r5, #0x20 + mov r0, r0, lsl #0x10 + mov r2, r0, asr #0x10 + mov r3, #0x30 + add r1, r4, #0x20 + mov r0, r1, lsl #0x10 + mov r1, r0, asr #0x10 + add r0, sp, #8 + strh r3, [sp, #0x1e] + strh r3, [sp, #0x20] + strh r3, [sp, #0x22] + strh r3, [sp, #0x24] + strh r5, [sp, #8] + strh r4, [sp, #0xa] + strh r2, [sp, #0xc] + strh r4, [sp, #0xe] + strh r5, [sp, #0x10] + strh r1, [sp, #0x12] + strh r2, [sp, #0x14] + strh r1, [sp, #0x16] + bl sub_0201F2A0 +_022ED7E8: + add sp, sp, #0x88 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022ED7F0: .word ov29_0235359C +_022ED7F4: .word ov29_0237C99C +_022ED7F8: .word _020AFC70 +_022ED7FC: .word ov29_02352698 + arm_func_end ov29_022ED184 + + arm_func_start ov29_022ED800 +ov29_022ED800: ; 0x022ED800 + stmdb sp!, {r3, lr} + cmp r0, #0 + ldmeqia sp!, {r3, pc} + add r3, r0, #0xe900 + ldrh r3, [r3, #0xec] + tst r3, #1 + ldmneia sp!, {r3, pc} + add r0, r0, #0x224 + add r0, r0, #0xac00 + bl ov29_022ED184 + ldmia sp!, {r3, pc} + arm_func_end ov29_022ED800 + + arm_func_start GetTrapName +GetTrapName: ; 0x022ED82C + stmdb sp!, {r4, lr} +#if defined(EUROPE) + add r1, r1, #0xc3 + add r1, r1, #0x3400 +#elif defined(JAPAN) + add r1, r1, #0x46 + add r1, r1, #0x4700 +#else + add r1, r1, #0xc1 + add r1, r1, #0x3400 +#endif + mov r1, r1, lsl #0x10 + mov r4, r0 + mov r0, r1, lsr #0x10 + bl StringFromId + mov r1, r0 + mov r0, r4 + bl strcpy + ldmia sp!, {r4, pc} + arm_func_end GetTrapName + + arm_func_start BindTrapToTile +BindTrapToTile: ; 0x022ED858 + cmp r1, #0 + strne r1, [r0, #0x10] + strneb r2, [r1, #0x20] + bx lr + arm_func_end BindTrapToTile diff --git a/asm/overlay_29_022ED888.s b/asm/overlay_29_022ED888.s new file mode 100644 index 00000000..16e1d762 --- /dev/null +++ b/asm/overlay_29_022ED888.s @@ -0,0 +1,279 @@ + .include "asm/macros.inc" + .include "overlay_29_022ED888.inc" + + .text + + arm_func_start SpawnTraps +SpawnTraps: ; 0x022ED888 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + ldr r0, _022ED96C ; =ov29_023526A0 + mov sl, #0 + ldrh r1, [r0] + ldrh r0, [r0, #2] + add r6, sp, #4 + strh r1, [sp] + strh r0, [sp, #2] + mov r4, #6 + mov fp, #2 + mov r7, sl +_022ED8B8: + mov r0, sl, lsl #0x10 + mov r8, r7 + mov r5, r0, asr #0x10 +_022ED8C4: + mov r0, r8 + mov r1, sl + bl GetTileSafe + mov sb, r0 + ldrh r0, [sb, #2] + tst r0, #4 + beq _022ED94C + strh r8, [sp, #4] + strh r5, [sp, #6] + ldrh r0, [sb, #2] + tst r0, #0x40 + movne r0, r4 + bne _022ED8FC + bl GetRandomSpawnTrapId +_022ED8FC: + cmp r0, #0x11 + mov r1, r6 + bne _022ED92C + mov r2, fp + mov r3, #0 + bl SpawnTrap + movs r1, r0 + beq _022ED94C + mov r0, sb + mov r2, #1 + bl BindTrapToTile + b _022ED94C +_022ED92C: + mov r2, #0 + mov r3, r2 + bl SpawnTrap + movs r1, r0 + beq _022ED94C + mov r0, sb + mov r2, #0 + bl BindTrapToTile +_022ED94C: + add r8, r8, #1 + cmp r8, #0x38 + blt _022ED8C4 + add sl, sl, #1 + cmp sl, #0x20 + blt _022ED8B8 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022ED96C: .word ov29_023526A0 + arm_func_end SpawnTraps + + arm_func_start SpawnEnemyTrapAtPos +SpawnEnemyTrapAtPos: ; 0x022ED970 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r7, r1 + mov r6, r2 + mov r8, r0 + mov r0, r7 + mov r1, r6 + mov r5, r3 + bl GetTileSafe + mov r4, r0 + add r1, sp, #0 + mov r0, r8 + mov r3, r5 + mov r2, #0 + strh r7, [sp] + strh r6, [sp, #2] + bl SpawnTrap + movs r1, r0 + beq _022ED9C8 + ldrb r2, [sp, #0x20] + mov r0, r4 + bl BindTrapToTile +_022ED9C8: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + arm_func_end SpawnEnemyTrapAtPos + + arm_func_start CreateTrapAndStairsHallucinations +CreateTrapAndStairsHallucinations: ; 0x022ED9D0 +#ifdef JAPAN +#define OV29_022ED9D0_OFFSET -0xA4 +#else +#define OV29_022ED9D0_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + ldr r0, _022EDBB8 ; =DUNGEON_PTR + ldr r1, _022EDBBC ; =0x0001A21E + ldr r0, [r0] + ldrsh r2, [r0, r1] + add r1, r0, #0x1a000 + ldrb r8, [r1, #0x244 + OV29_022ED9D0_OFFSET] + sub sb, r2, #5 + b _022EDB9C +_022ED9F8: + ldr r1, _022EDBC0 ; =0x0001A21C + mov r2, #0x18 + ldrsh r0, [r0, r1] + mul sl, sb, r2 + sub r7, r0, #6 + mov r0, r1 + add fp, r0, #8 + ldr r0, _022EDBC4 ; =0x0000013E + ldr r6, _022EDBC8 ; =ov29_0237C864 + sub r0, r0, #0x1f + str r0, [sp, #4] + mov r0, r1 + add r5, r0, #0xa + ldr r4, _022EDBCC ; =0xFFFF000F + b _022EDB7C +_022EDA34: + mov r0, #0 + str r0, [sp] + mov r0, r7 + mov r1, sb + bl GetTile + ldr r2, [r0, #0x10] + cmp r2, #0 + beq _022EDA74 + ldr r1, [r2] + cmp r1, #2 + bne _022EDA74 + ldrb r1, [r2, #0x20] + cmp r1, #0 + cmpeq r8, #0 + movne r1, #1 + strne r1, [sp] +_022EDA74: + ldrh r0, [r0] + tst r0, #0x200 + movne r0, #1 + strne r0, [sp] + ldr r0, [sp] + cmp r0, #0 + beq _022EDB78 + ldr r0, _022EDBB8 ; =DUNGEON_PTR + ldr r3, [r0] + mov r0, #0x18 + mul r2, r7, r0 + ldrsh r1, [r3, fp] + ldrsh r0, [r3, r5] + sub r1, r2, r1 + sub r2, sl, r0 + cmp r1, r4, asr #11 + cmpge r2, r4, asr #11 + blt _022EDB78 + ldr r0, [sp, #4] + cmp r1, r0 + cmple r2, #0xe0 + bgt _022EDB78 + ldrh ip, [r6] + add r0, r2, #4 + add r1, r1, #4 + bic ip, ip, #0xc00 + strh ip, [r6] + ldrh ip, [r6, #6] + and r3, r1, r4, lsr #23 + mov r0, r0, lsl #0x14 + and ip, ip, r4 + strh ip, [r6, #6] + ldrh ip, [r6, #6] + mov r1, r6 + mov r2, #0 + orr r0, ip, r0, lsr #16 + strh r0, [r6, #6] + ldrh r0, [r6, #2] + and r0, r0, r4, asr #7 + strh r0, [r6, #2] + ldrh r0, [r6, #2] + orr r0, r0, r3 + strh r0, [r6, #2] + ldrh r0, [r6, #4] + bic r0, r0, #0xc00 + strh r0, [r6, #4] + ldrh r0, [r6, #4] + orr r0, r0, #0xc00 + strh r0, [r6, #4] + ldrh r0, [r6, #4] + bic r0, r0, #0xf000 + strh r0, [r6, #4] + ldrh r0, [r6, #4] + orr r0, r0, #0xa000 + strh r0, [r6, #4] + ldrh r0, [r6, #4] + and r0, r0, r4, asr #6 + strh r0, [r6, #4] + ldrh r3, [r6, #4] + orr r0, r3, #0x3e + orr r0, r0, #0x100 + strh r0, [r6, #4] + ldr r0, _022EDBD0 ; =OBJ_GRAPHICS_CONTROLS_PTR + ldr r0, [r0] + bl AddSimpleObjToOam +_022EDB78: + add r7, r7, #1 +_022EDB7C: + ldr r0, _022EDBB8 ; =DUNGEON_PTR + ldr r1, _022EDBC0 ; =0x0001A21C + ldr r0, [r0] + ldrsh r1, [r0, r1] + add r1, r1, #6 + cmp r7, r1 + blt _022EDA34 + add sb, sb, #1 +_022EDB9C: + ldr r1, _022EDBBC ; =0x0001A21E + ldrsh r1, [r0, r1] + add r1, r1, #5 + cmp sb, r1 + blt _022ED9F8 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022EDBB8: .word DUNGEON_PTR +_022EDBBC: .word 0x0001A21E + OV29_022ED9D0_OFFSET +_022EDBC0: .word 0x0001A21C + OV29_022ED9D0_OFFSET +_022EDBC4: .word 0x0000013E +_022EDBC8: .word ov29_0237C864 +_022EDBCC: .word 0xFFFF000F +_022EDBD0: .word OBJ_GRAPHICS_CONTROLS_PTR + arm_func_end CreateTrapAndStairsHallucinations + + arm_func_start PrepareTrapperTrap +PrepareTrapperTrap: ; 0x022EDBD4 +#ifdef JAPAN +#define PREPARE_TRAPPER_TRAP_OFFSET -0xA4 +#else +#define PREPARE_TRAPPER_TRAP_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, lr} + ldr lr, _022EDC28 ; =DUNGEON_PTR + ldrsh r5, [r0] + ldr r3, _022EDC2C ; =0x00012AAA + ldr r4, [lr] + add ip, r3, #2 + strh r5, [r4, r3] + ldrsh r4, [r0, #2] + ldr r0, [lr] + mov r3, #1 + strh r4, [r0, ip] + ldr r0, [lr] + add r0, r0, #0x12000 + strb r1, [r0, #0xaae + PREPARE_TRAPPER_TRAP_OFFSET] + ldr r0, [lr] + add r0, r0, #0x12000 + strb r2, [r0, #0xaaf + PREPARE_TRAPPER_TRAP_OFFSET] + ldr r0, [lr] + add r0, r0, #0x12000 + strb r3, [r0, #0xaa8 + PREPARE_TRAPPER_TRAP_OFFSET] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_022EDC28: .word DUNGEON_PTR +_022EDC2C: .word 0x00012AAA + PREPARE_TRAPPER_TRAP_OFFSET + arm_func_end PrepareTrapperTrap diff --git a/asm/overlay_29_0233861C.s b/asm/overlay_29_0233861C.s index 4a6cb075..a38a4f13 100644 --- a/asm/overlay_29_0233861C.s +++ b/asm/overlay_29_0233861C.s @@ -225,9734 +225,3 @@ _0233884C: .word 0x000008A8 _0233884C: .word 0x00000F31 #endif arm_func_end HiddenStairsTrigger - - arm_func_start GetHiddenStairsField -GetHiddenStairsField: ; 0x02338850 - ldr r0, _02338864 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldr r0, [r0, #0x28] -#else - ldr r0, [r0, #0xcc] -#endif - bx lr - .align 2, 0 -_02338864: .word DUNGEON_PTR - arm_func_end GetHiddenStairsField - - arm_func_start SetHiddenStairsField -SetHiddenStairsField: ; 0x02338868 - ldr r1, _0233887C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 -#ifdef JAPAN - str r0, [r1, #0x28] -#else - str r0, [r1, #0xcc] -#endif - bx lr - .align 2, 0 -_0233887C: .word DUNGEON_PTR - arm_func_end SetHiddenStairsField - - arm_func_start GetHiddenFloorField -GetHiddenFloorField: ; 0x02338880 - ldr r0, _02338894 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldr r0, [r0, #0x2c] -#else - ldr r0, [r0, #0xd0] -#endif - bx lr - .align 2, 0 -_02338894: .word DUNGEON_PTR - arm_func_end GetHiddenFloorField - - arm_func_start SetHiddenFloorField -SetHiddenFloorField: ; 0x02338898 - ldr r1, _023388AC ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 -#ifdef JAPAN - str r0, [r1, #0x2c] -#else - str r0, [r1, #0xd0] -#endif - bx lr - .align 2, 0 -_023388AC: .word DUNGEON_PTR - arm_func_end SetHiddenFloorField - - arm_func_start LoadWeather3DFiles -LoadWeather3DFiles: ; 0x023388B0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - ldr r0, _02338974 ; =ov29_02352F1C - mov sl, #0 - ldr r1, [r0, #4] - ldr r0, [r0] - ldr r7, _02338978 ; =ov29_02352F40 - add r8, sp, #0 - str r1, [sp, #4] - str r0, [sp] - mov r6, #4 - mov r5, #0x300 - mov fp, sl - mov r4, #0x14 -_023388E8: - mul sb, sl, r4 - ldrh r2, [r7, sb] - mov r0, r8 - mov r1, r6 - mov r3, r5 - add sb, r7, sb - bl LoadWteFromFileDirectory - ldrsh r2, [sb, #8] - ldr r0, [sp, #4] - ldr r1, [sb, #4] - mov r3, fp - bl ProcessWte - mov r0, r8 - bl DelayWteFree - add sl, sl, #1 - cmp sl, #3 - blt _023388E8 - ldr r0, _0233897C ; =ov29_0237CACC - mov r1, #0 - bl ov29_02338D94 - ldr r0, _02338980 ; =ov29_0237CD40 - mov r1, #1 - bl ov29_02338D94 - ldr r0, _02338984 ; =ov29_02352F7C - ldr r2, _0233897C ; =ov29_0237CACC - mov r1, #0 - ldr r4, [r0] - strb r1, [r2, #0x240] - ldr r3, [r0, #4] - str r4, [r2, #0x254] - ldr r0, _02338980 ; =ov29_0237CD40 - str r3, [r2, #0x258] - bl ov29_02338D34 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02338974: .word ov29_02352F1C -_02338978: .word ov29_02352F40 -_0233897C: .word ov29_0237CACC -_02338980: .word ov29_0237CD40 -_02338984: .word ov29_02352F7C - arm_func_end LoadWeather3DFiles - - arm_func_start Weather3DEffectActive -Weather3DEffectActive: ; 0x02338988 - stmdb sp!, {r3, lr} - ldr r0, _023389BC ; =ov29_0237CACC - bl ov29_02338D58 - cmp r0, #0 - bne _023389AC - ldr r0, _023389C0 ; =ov29_0237CD40 - bl ov29_02338D58 - cmp r0, #0 - beq _023389B4 -_023389AC: - mov r0, #1 - ldmia sp!, {r3, pc} -_023389B4: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_023389BC: .word ov29_0237CACC -_023389C0: .word ov29_0237CD40 - arm_func_end Weather3DEffectActive - - arm_func_start ov29_023389C4 -ov29_023389C4: ; 0x023389C4 - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r4, r0 - mov r0, #0xc - mul r2, r4, r0 - ldr r1, _02338A3C ; =ov10_022C6326 - ldr r0, _02338A40 ; =ov29_0237CACC - ldrb r1, [r1, r2] - bl ov29_02338D34 - cmp r4, #0xc3 - bne _02338A34 - ldr r1, _02338A44 ; =ov29_02352F1C - ldr r2, _02338A48 ; =0x000003EB - ldr r3, [r1, #0xc] - ldr ip, [r1, #8] - str r3, [sp, #4] - add r0, sp, #0 - mov r1, #4 - mov r3, #0 - str ip, [sp] - bl LoadWteFromFileDirectory - ldr r0, [sp, #4] - mov r1, #0xb000 - mov r2, #0x14 - mov r3, #0 - bl ProcessWte - add r0, sp, #0 - bl DelayWteFree -_02338A34: - add sp, sp, #8 - ldmia sp!, {r4, pc} - .align 2, 0 -_02338A3C: .word ov10_022C6326 -_02338A40: .word ov29_0237CACC -_02338A44: .word ov29_02352F1C -_02338A48: .word 0x000003EB - arm_func_end ov29_023389C4 - - arm_func_start ov29_02338A4C -ov29_02338A4C: ; 0x02338A4C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr r1, _02338AB4 ; =ov29_02353730 - mov r4, r0 - ldrb r1, [r1, r4, lsl #3] - ldr r0, _02338AB8 ; =ov29_0237CD40 - bl ov29_02338D34 - ldr r1, _02338ABC ; =ov29_0235372C - mov sb, #0 - ldr r7, [r1, r4, lsl #3] - ldr r0, _02338AC0 ; =ov29_0237CACC - ldr r5, _02338AB8 ; =ov29_0237CD40 - str r7, [r0, #0x4e4] - mov r6, sb - mov r4, #0xc0 -_02338A84: - mla sl, sb, r4, r5 - mov r8, r6 -_02338A8C: - mov r1, r7 - add r0, sl, r8, lsl #6 - bl ov29_02338E50 - add r8, r8, #1 - cmp r8, #3 - blt _02338A8C - add sb, sb, #1 - cmp sb, #3 - blt _02338A84 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02338AB4: .word ov29_02353730 -_02338AB8: .word ov29_0237CD40 -_02338ABC: .word ov29_0235372C -_02338AC0: .word ov29_0237CACC - arm_func_end ov29_02338A4C - - arm_func_start RenderWeather3D -RenderWeather3D: ; 0x02338AC4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r5, #0 -_02338ACC: - ldr r1, _02338D28 ; =ov29_0237CACC - mov r0, #0x274 - mla r6, r5, r0, r1 - ldrb r0, [r6, #0x240] - cmp r0, #0 - beq _02338D18 - bl DungeonScreenEffectActive - cmp r0, #0 - movne r0, #0 - strneb r0, [r6, #0x26d] - bne _02338B04 - mov r0, r6 - mov r1, #1 - bl ov29_02338D6C -_02338B04: - mov r0, r6 - bl ov29_02338D58 - cmp r0, #0 - beq _02338D18 - ldr r4, [r6, #0x24c] - ldr fp, [r6, #0x250] - mov r7, #0 -_02338B20: - mov r0, #0xc0 - mla sl, r7, r0, r6 - mov r0, r7, lsl #7 - add sb, r0, fp, asr #8 - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - mov r8, #0 - str r0, [sp] -_02338B40: - cmp sb, #0xc0 - bge _02338B74 - mov r0, r8, lsl #7 - ldr r1, [r6, #0x244] - add r2, r0, r4, asr #8 - mov r0, r8, lsl #6 - strh r2, [sl, r0] - ldr r2, [sp] - add r0, sl, r8, lsl #6 - strh r2, [r0, #2] - mov r1, r1, asr #8 - strb r1, [r0, #0x2f] - bl sub_0201F2A0 -_02338B74: - add r8, r8, #1 - cmp r8, #3 - blt _02338B40 - add r7, r7, #1 - cmp r7, #3 - blt _02338B20 - ldrb r0, [r6, #0x240] - cmp r0, #9 - beq _02338BBC - ldr r1, [r6, #0x24c] - ldr r0, [r6, #0x254] - add r0, r1, r0 - str r0, [r6, #0x24c] - ldr r1, [r6, #0x250] - ldr r0, [r6, #0x258] - add r0, r1, r0 - str r0, [r6, #0x250] - b _02338C48 -_02338BBC: - ldr r0, [r6, #0x25c] - bl SinAbs4096 - ldr r3, [r6, #0x254] - mov r2, #0xa - mov r1, r0 - mul r0, r3, r2 - bl MultiplyByFixedPoint - ldr r1, [r6, #0x24c] - add r0, r1, r0 - str r0, [r6, #0x24c] - ldr r0, [r6, #0x260] - bl SinAbs4096 - ldr r3, [r6, #0x258] - mov r2, #0xa - mov r1, r0 - mul r0, r3, r2 - bl MultiplyByFixedPoint - ldr r2, [r6, #0x250] - ldr r1, _02338D2C ; =0x00000FFF - add r0, r2, r0 - str r0, [r6, #0x250] - ldr r2, [r6, #0x25c] - ldr r0, [r6, #0x264] - add r0, r2, r0 - str r0, [r6, #0x25c] - ldr r2, [r6, #0x260] - ldr r0, [r6, #0x268] - add r0, r2, r0 - str r0, [r6, #0x260] - ldr r0, [r6, #0x25c] - and r0, r0, r1 - str r0, [r6, #0x25c] - ldr r0, [r6, #0x260] - and r0, r0, r1 - str r0, [r6, #0x260] -_02338C48: - ldr r1, [r6, #0x24c] - cmp r1, #0 - subgt r0, r1, #0x8000 - strgt r0, [r6, #0x24c] - bgt _02338C70 - mov r0, #0x8000 - rsb r0, r0, #0 - cmp r1, r0 - addlt r0, r1, #0x8000 - strlt r0, [r6, #0x24c] -_02338C70: - ldr r1, [r6, #0x250] - cmp r1, #0 - subgt r0, r1, #0x8000 - strgt r0, [r6, #0x250] - bgt _02338C98 - mov r0, #0x8000 - rsb r0, r0, #0 - cmp r1, r0 - addlt r0, r1, #0x8000 - strlt r0, [r6, #0x250] -_02338C98: - ldrb r0, [r6, #0x26e] - cmp r0, #0 - beq _02338CC8 - ldr r0, [r6, #0x244] - add r0, r0, #0x400 - str r0, [r6, #0x244] - cmp r0, #0x4000 - movge r0, #1 - strgeb r0, [r6, #0x26c] - movge r0, #0 - strgeb r0, [r6, #0x26e] - b _02338D18 -_02338CC8: - ldrb r0, [r6, #0x26c] - ldr r1, [r6, #0x244] - cmp r0, #0 - ldr r0, [r6, #0x248] - bne _02338CFC - sub r0, r1, r0 - str r0, [r6, #0x244] - cmp r0, #0x4000 - movlt r0, #1 - strltb r0, [r6, #0x26c] - movlt r0, #0x4000 - strlt r0, [r6, #0x244] - b _02338D18 -_02338CFC: - add r0, r1, r0 - str r0, [r6, #0x244] - cmp r0, #0xc000 - movgt r0, #0 - strgtb r0, [r6, #0x26c] - movgt r0, #0xc000 - strgt r0, [r6, #0x244] -_02338D18: - add r5, r5, #1 - cmp r5, #2 - blt _02338ACC - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02338D28: .word ov29_0237CACC -_02338D2C: .word 0x00000FFF - arm_func_end RenderWeather3D - - arm_func_start ov29_02338D30 -ov29_02338D30: ; 0x02338D30 - bx lr - arm_func_end ov29_02338D30 - - arm_func_start ov29_02338D34 -ov29_02338D34: ; 0x02338D34 - ldr r3, _02338D54 ; =ov29_02352F7C - strb r1, [r0, #0x240] - add r2, r3, r1, lsl #3 - ldr r3, [r3, r1, lsl #3] - ldr r1, [r2, #4] - str r3, [r0, #0x254] - str r1, [r0, #0x258] - bx lr - .align 2, 0 -_02338D54: .word ov29_02352F7C - arm_func_end ov29_02338D34 - - arm_func_start ov29_02338D58 -ov29_02338D58: ; 0x02338D58 - ldrb r1, [r0, #0x240] - cmp r1, #0 - moveq r0, #0 - ldrneb r0, [r0, #0x26d] - bx lr - arm_func_end ov29_02338D58 - - arm_func_start ov29_02338D6C -ov29_02338D6C: ; 0x02338D6C - cmp r1, #0 - beq _02338D8C - ldrb r2, [r0, #0x26d] - cmp r2, #0 - moveq r2, #1 - streqb r2, [r0, #0x26e] - moveq r2, #0 - streq r2, [r0, #0x244] -_02338D8C: - strb r1, [r0, #0x26d] - bx lr - arm_func_end ov29_02338D6C - - arm_func_start ov29_02338D94 -ov29_02338D94: ; 0x02338D94 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov r0, #0x4000 - str r0, [sl, #0x244] - mov r0, #0 - str r0, [sl, #0x248] - strb r0, [sl, #0x26c] - str r0, [sl, #0x24c] - str r0, [sl, #0x250] - mov r0, #0x400 - mov sb, r1 - bl DungeonRandInt - str r0, [sl, #0x25c] - mov r0, #0x400 - bl DungeonRandInt - str r0, [sl, #0x260] - mov r0, #4 - str r0, [sl, #0x264] - mov r0, #1 - str r0, [sl, #0x268] - mov r5, #0 - strb r0, [sl, #0x26d] - strb r5, [sl, #0x26e] - str sb, [sl, #0x270] - mov fp, r5 -_02338DF8: - mov r0, #0xc0 - mla r8, r5, r0, sl - mov r6, #0 -_02338E04: - add r7, r8, r6, lsl #6 - mov r0, r7 - mov r4, r6, lsl #6 - bl InitRender3dElement64 - strb fp, [r7, #0x3c] - strh fp, [r8, r4] - strh fp, [r7, #2] - ldr r2, [sl, #0x244] - mov r0, r7 - mov r1, sb - strb r2, [r7, #0x2f] - bl ov29_02338E50 - add r6, r6, #1 - cmp r6, #3 - blt _02338E04 - add r5, r5, #1 - cmp r5, #3 - blt _02338DF8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end ov29_02338D94 - - arm_func_start ov29_02338E50 -ov29_02338E50: ; 0x02338E50 - ldr r3, _02338F08 ; =ov29_02352F40 - mov r2, #0x14 - mla r2, r1, r2, r3 - ldr r3, [r2, #4] - mov r1, #0 - str r3, [r0, #0x20] - strh r1, [r0, #0x16] - strh r1, [r0, #0x18] - mov r1, #0x80 - strh r1, [r0, #0x1a] - strh r1, [r0, #0x1c] - ldrh r3, [r0, #0x14] - ldr r1, _02338F0C ; =_020AFC70 - bic r3, r3, #7 - orr r3, r3, #4 - strh r3, [r0, #0x14] - ldrh r3, [r0, #0x14] - bic r3, r3, #0x38 - orr r3, r3, #0x20 - strh r3, [r0, #0x14] - ldrh r3, [r0, #0x14] - bic r3, r3, #0xc0 - strh r3, [r0, #0x14] - ldrh r3, [r0, #0x14] - bic r3, r3, #0x700 - orr r3, r3, #0x300 - strh r3, [r0, #0x14] - ldrh r3, [r0, #0x14] - bic r3, r3, #0x1800 - strh r3, [r0, #0x14] - ldrh r3, [r0, #0x14] - bic r3, r3, #0x6000 - strh r3, [r0, #0x14] - ldrh r3, [r0, #0x14] - orr r3, r3, #0x8000 - strh r3, [r0, #0x14] - ldr r3, [r1] - ldrsh r1, [r2, #8] - ldr r3, [r3, #0xe0] - add r1, r3, r1, lsl #9 - str r1, [r0, #0x24] - ldr r1, [r2, #0xc] - strh r1, [r0, #0x2a] - ldr r1, [r2, #0x10] - strb r1, [r0, #0x3e] - bx lr - .align 2, 0 -_02338F08: .word ov29_02352F40 -_02338F0C: .word _020AFC70 - arm_func_end ov29_02338E50 - - arm_func_start ov29_02338F10 -ov29_02338F10: ; 0x02338F10 - ldr r0, _02338F20 ; =ov29_0235376C - mov r1, #0x64 - strh r1, [r0, #2] - bx lr - .align 2, 0 -_02338F20: .word ov29_0235376C - arm_func_end ov29_02338F10 - - arm_func_start ov29_02338F24 -ov29_02338F24: ; 0x02338F24 - ldr r2, _02338F34 ; =ov29_0235376C - strh r0, [r2, #2] - strh r1, [r2, #4] - bx lr - .align 2, 0 -_02338F34: .word ov29_0235376C - arm_func_end ov29_02338F24 - - arm_func_start ov29_02338F38 -ov29_02338F38: ; 0x02338F38 - ldr r1, _02338F44 ; =ov29_0237CFB8 - strb r0, [r1, #2] - bx lr - .align 2, 0 -_02338F44: .word ov29_0237CFB8 - arm_func_end ov29_02338F38 - - arm_func_start ov29_02338F48 -ov29_02338F48: ; 0x02338F48 - ldr r1, _02338F54 ; =ov29_0237CFB8 - strb r0, [r1] - bx lr - .align 2, 0 -_02338F54: .word ov29_0237CFB8 - arm_func_end ov29_02338F48 - - arm_func_start ov29_02338F58 -ov29_02338F58: ; 0x02338F58 - ldr r1, _02338F64 ; =ov29_0235376C - strb r0, [r1, #1] - bx lr - .align 2, 0 -_02338F64: .word ov29_0235376C - arm_func_end ov29_02338F58 - - arm_func_start ov29_02338F68 -ov29_02338F68: ; 0x02338F68 - stmdb sp!, {r3, lr} - ldr r1, _02338FBC ; =0x0000040B - ldr r2, _02338FC0 ; =ov29_02353784 - mov r0, #4 - mov r3, #0 - bl DirectoryFileMngr_OpenDirectoryFile - ldr r1, _02338FC4 ; =ov29_0235376C - add r0, sp, #0 - ldr r1, [r1, #0x18] - bl HandleSir0Translation - ldr r1, [sp] - ldr r0, _02338FC4 ; =ov29_0235376C - str r1, [r0, #8] - bl GetMinimapData - add r0, r0, #0xe000 - mov r2, #0 - ldr r1, _02338FC4 ; =ov29_0235376C - strb r2, [r0, #0x447] - str r2, [r1, #0xc] - strb r2, [r1] - ldmia sp!, {r3, pc} - .align 2, 0 -#ifdef JAPAN -_02338FBC: .word 0x000003FF -#else -_02338FBC: .word 0x0000040B -#endif -_02338FC0: .word ov29_02353784 -_02338FC4: .word ov29_0235376C - arm_func_end ov29_02338F68 - - arm_func_start ov29_02338FC8 -ov29_02338FC8: ; 0x02338FC8 - stmdb sp!, {r3, lr} - ldr r0, _02339000 ; =ov29_0235376C - ldr r0, [r0, #8] - cmp r0, #0 - beq _02338FF0 - ldr r0, _02339004 ; =ov29_02353784 - bl UnloadFile - ldr r0, _02339000 ; =ov29_0235376C - mov r1, #0 - str r1, [r0, #8] -_02338FF0: - ldr r0, _02339008 ; =ov29_0237CFB8 - mov r1, #0 - strb r1, [r0, #2] - ldmia sp!, {r3, pc} - .align 2, 0 -_02339000: .word ov29_0235376C -_02339004: .word ov29_02353784 -_02339008: .word ov29_0237CFB8 - arm_func_end ov29_02338FC8 - - arm_func_start ov29_0233900C -ov29_0233900C: ; 0x0233900C - stmdb sp!, {r3, lr} - ldr r0, _02339044 ; =ov29_0235352C - ldr r0, [r0] - add r0, r0, #0x20 - bl ov29_022DE288 - ldr r1, _02339044 ; =ov29_0235352C - ldr r2, _02339048 ; =ov29_0235376C - ldr r1, [r1] - str r0, [r2, #0x10] - add r0, r1, #0x2c - bl ov29_022DE288 - ldr r1, _02339048 ; =ov29_0235376C - str r0, [r1, #0x14] - ldmia sp!, {r3, pc} - .align 2, 0 -_02339044: .word ov29_0235352C -_02339048: .word ov29_0235376C - arm_func_end ov29_0233900C - - arm_func_start ov29_0233904C -ov29_0233904C: ; 0x0233904C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov fp, r0 - bl GetMinimapData - mov r7, r0 - mov r6, #0 - add r4, r7, #0x7000 -_02339064: - mov r0, #0x700 - mul r1, r6, r0 - mov r0, #0x1c - mla sl, r6, r0, r7 - mov r5, #0 - add r8, r7, r1 - add sb, r4, r1 -_02339080: - add r0, r8, r5, lsl #6 - mov r1, #0x20 - bl MemZero - add r0, sb, r5, lsl #6 - mov r1, #0x20 - bl MemZero - add r0, sl, r5 - add r1, r0, #0xe000 - mov r0, #0 - add r5, r5, #1 - strb r0, [r1] - cmp r5, #0x1c - blt _02339080 - add r6, r6, #1 - cmp r6, #0x10 - blt _02339064 - cmp fp, #0 - ldreq r0, _02339110 ; =ov29_0235376C - moveq r1, #0x64 - streqh r1, [r0, #2] - streqh r1, [r0, #4] - add r0, r7, #0xe000 - mov r3, #0 - str r3, [r0, #0x440] - mov r2, #1 - strb r2, [r0, #0x444] - ldr r1, _02339114 ; =ov29_0237CFB8 - strb r3, [r0, #0x446] - strb r2, [r1, #3] - bl ov29_0233900C - bl ov29_022E7F7C - ldr r0, _02339114 ; =ov29_0237CFB8 - mov r1, #1 - strb r1, [r0, #2] - bl ov29_02339148 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02339110: .word ov29_0235376C -_02339114: .word ov29_0237CFB8 - arm_func_end ov29_0233904C - - arm_func_start GetMinimapData -GetMinimapData: ; 0x02339118 - ldr r0, _02339134 ; =DUNGEON_PTR - ldr r0, [r0] - cmp r0, #0 -#ifdef JAPAN - addne r0, r0, #0x21c0 - addne r0, r0, #0x18000 -#else - addne r0, r0, #0x264 - addne r0, r0, #0x1a000 -#endif - moveq r0, #0 - bx lr - .align 2, 0 -_02339134: .word DUNGEON_PTR - arm_func_end GetMinimapData - - arm_func_start ov29_02339138 -ov29_02339138: ; 0x02339138 - stmdb sp!, {r3, lr} - bl ov29_0233900C - bl ov29_022E7F7C - ldmia sp!, {r3, pc} - arm_func_end ov29_02339138 - - arm_func_start ov29_02339148 -ov29_02339148: ; 0x02339148 - stmdb sp!, {r4, lr} - ldr r0, _02339188 ; =DUNGEON_PTR - mov r2, #0xc - ldr r0, [r0] - ldr r3, _0233918C ; =TILESET_PROPERTIES - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - mov r1, #0 - smulbb r0, r0, r2 - ldr r4, [r3, r0] - mov r0, r4 - bl ov29_0233A548 - mov r0, r4 - mov r1, #1 - bl ov29_0233A548 - ldmia sp!, {r4, pc} - .align 2, 0 -_02339188: .word DUNGEON_PTR -_0233918C: .word TILESET_PROPERTIES - arm_func_end ov29_02339148 - - arm_func_start ov29_02339190 -ov29_02339190: ; 0x02339190 - stmdb sp!, {r3, lr} - ldr r2, _023391B8 ; =ov29_0235376C - ldr r2, [r2, #8] - cmp r2, #0 - ldrne r2, _023391BC ; =ov29_0237CFB8 - ldrneb r2, [r2, #2] - cmpne r2, #0 - ldmeqia sp!, {r3, pc} - bl ov29_0233A548 - ldmia sp!, {r3, pc} - .align 2, 0 -_023391B8: .word ov29_0235376C -_023391BC: .word ov29_0237CFB8 - arm_func_end ov29_02339190 - - arm_func_start ov29_023391C0 -ov29_023391C0: ; 0x023391C0 - ldr r0, _023391E4 ; =DUNGEON_PTR - mov r1, #0xc - ldr r0, [r0] - ldr r2, _023391E8 ; =TILESET_PROPERTIES - add r0, r0, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x30] -#else - ldrsh r0, [r0, #0xd4] -#endif - smulbb r0, r0, r1 - ldr r0, [r2, r0] - bx lr - .align 2, 0 -_023391E4: .word DUNGEON_PTR -_023391E8: .word TILESET_PROPERTIES - arm_func_end ov29_023391C0 - - arm_func_start DrawMinimapTile -DrawMinimapTile: ; 0x023391EC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x30 - mov sl, r0 - mov sb, r1 - bl GetMinimapData - ldr r2, _023398C4 ; =ov29_02352FCC - ldr r3, _023398C8 ; =DUNGEON_PTR - ldrh r4, [r2] - ldr r5, [r3] - ldrh r3, [r2, #2] - ldr r1, _023398CC ; =ov29_0235376C - mov r7, #1 - ldr r2, [r1, #8] - mov fp, r0 - cmp r2, #0 - ldrne r0, _023398D0 ; =ov29_0237CFB8 - str r7, [sp, #0x14] - ldrneb r0, [r0, #2] -#ifdef JAPAN - add r1, r5, #0x178 -#else - add r1, r5, #0x21c -#endif - strh r4, [sp, #0x2c] - strh r3, [sp, #0x2e] - add r4, r1, #0x1a000 - cmpne r0, #0 - beq _023398BC - cmp sl, #0 - cmpge sb, #2 - blt _023398BC - cmp sl, #0x38 - cmplt sb, #0x20 - bge _023398BC - mov r0, sl - mov r1, sb - bl GetTile - mov r6, r0 - ldrb r1, [r4, #0x32] - ldrh r2, [r6] - ldrb r0, [r4, #0x29] - cmp r1, #0 - moveq r1, r7 - str r0, [sp, #0x24] - and r0, r2, #3 - str r0, [sp, #0x28] - ldrb r0, [r4, #0x22] - movne r1, #0 - and r1, r1, #0xff - str r0, [sp, #0x20] - ldrb r0, [r4, #0x28] - str r0, [sp, #0x18] - ldrb r0, [r4, #0x27] - str r0, [sp, #0x1c] - ldrb r0, [r4, #0x23] - ldrb r5, [r4, #0x25] - str r1, [sp, #0xc] - ldrb r1, [r4, #0x33] - cmp r1, #0 - movne r1, #0 - ldreq r1, _023398D0 ; =ov29_0237CFB8 - ldreqb r1, [r1, #3] - and r1, r1, #0xff - str r1, [sp, #8] - ldr r1, [sp, #0x20] - cmp r1, #0 - ldrneh r1, [r6, #2] - movne r0, #0 - strne r0, [sp, #0x10] - andne r8, r1, #1 - bne _02339344 - ldrb r1, [r4, #0x34] - cmp r1, #0 - bne _02339310 - cmp r0, #0 - movne r8, #1 - bne _02339318 -_02339310: - ldrh r0, [r6, #2] - and r8, r0, #1 -_02339318: - bl GetFloorType - cmp r0, #0 - ldreqb r0, [r4, #0x2a] - streq r0, [sp, #0x10] - movne r0, #0 - strne r0, [sp, #0x10] - cmp r5, #0 - beq _02339344 - cmp r8, #0 - streq r8, [sp, #0x14] - moveq r8, #1 -_02339344: - bl IsMapShownOnEitherScreen - cmp r0, #0 - ldreq r0, _023398CC ; =ov29_0235376C - ldreqb r1, [r0, #1] - cmpeq r1, #0 - beq _02339788 - ldr r0, [sp, #0x20] - mov r5, #0 - cmp r0, #0 - bne _0233946C - ldr r0, [r6, #0xc] - str r0, [sp, #4] - cmp r0, #0 - ldrne r0, _023398D0 ; =ov29_0237CFB8 - ldrneb r0, [r0, #3] - cmpne r0, #0 - beq _0233946C - ldr r0, [sp, #4] - ldr r0, [r0] - cmp r0, #1 - bne _0233946C - ldr r0, [sp, #4] - bl ShouldMinimapDisplayEntity - cmp r0, #0 - beq _0233946C - ldr r0, [sp, #4] - mov r7, r5 - ldr r0, [r0, #0xb4] - str r0, [sp] - bl IsExperienceLocked - cmp r0, #0 - bne _023393D4 - ldr r0, [sp] - ldrb r0, [r0, #0xbc] - cmp r0, #7 - bne _023393DC -_023393D4: - mov r5, #0xa - b _0233946C -_023393DC: - ldr r0, [sp] - ldrb r0, [r0, #6] - cmp r0, #0 - beq _0233943C - ldr r0, [sp, #8] - cmp r0, #0 - beq _02339434 - ldr r0, [sp] - ldrb r0, [r0, #0xbc] - cmp r0, #2 - moveq r0, r5 - beq _02339410 - bl IsBehaviorLoneOutlaw -_02339410: - cmp r0, #0 - movne r5, #0xc - bne _0233946C - ldr r0, [sp] - ldrb r0, [r0, #8] - cmp r0, #0 - movne r5, #0xa - moveq r5, #2 - b _0233946C -_02339434: - mov r7, #1 - b _0233946C -_0233943C: - ldr r0, [sp] - ldrb r0, [r0, #7] - cmp r0, #0 - beq _02339468 - ldr r0, _023398CC ; =ov29_0235376C - strh sl, [r0, #2] - strh sb, [r0, #4] - ldrb r0, [r4, #0x2d] - cmp r0, #0 - movne r5, #8 - b _0233946C -_02339468: - mov r5, #0xa -_0233946C: - cmp r7, #0 - beq _0233963C - ldr r0, [sp, #0x20] - cmp r0, #0 - bne _0233963C - ldr r0, [r6, #0x10] - cmp r0, #0 - beq _023395D0 - cmp r8, #0 - ldr r1, [r0] - bne _023394F4 - ldr r0, [sp, #0xc] - mov r5, #0 - cmp r0, #0 - beq _023394D8 - cmp r1, #3 - bne _023394D8 - ldr r0, [sp, #0x1c] - cmp r0, #0 - bne _023394C8 - ldrh r0, [r6, #2] - tst r0, #2 - beq _023394EC -_023394C8: - ldr r0, [sp, #0x28] - cmp r0, #0 - movne r5, #3 - b _023394EC -_023394D8: - cmp r1, #5 - bne _023394EC - ldr r0, [sp, #0x10] - cmp r0, #0 - movne r5, #0xd -_023394EC: - mov r7, #0 - b _0233963C -_023394F4: - cmp r7, #0 - beq _0233963C - cmp r1, #2 - bne _0233953C - ldr r2, [sp, #0x14] - cmp r2, #0 - beq _0233953C - ldrb r2, [r0, #0x20] - cmp r2, #0 - ldreq r2, [sp, #0x18] - cmpeq r2, #0 - beq _0233953C - bl GetTrapInfo - ldrb r1, [r0] - ldr r0, _023398D4 ; =ov29_02352FF4 - mov r7, #0 - ldrb r5, [r0, r1] - b _0233963C -_0233953C: - ldr r2, [sp, #0xc] - cmp r2, #0 - beq _0233957C - cmp r1, #3 - bne _0233957C - ldr r2, [sp, #0x1c] - cmp r2, #0 - bne _02339568 - ldrh r2, [r6, #2] - tst r2, #2 - beq _0233957C -_02339568: - ldr r2, [sp, #0x28] - cmp r2, #0 - movne r5, #3 - movne r7, #0 - bne _0233963C -_0233957C: - cmp r1, #5 - bne _023395BC - ldr r1, [sp, #0x10] - cmp r1, #0 - bne _023395B0 - ldr r1, [sp, #0x14] - cmp r1, #0 - beq _0233963C - ldr r1, [sp, #0x18] - cmp r1, #0 - ldreqb r0, [r0, #0x20] - cmpeq r0, #0 - beq _0233963C -_023395B0: - mov r5, #0xd - mov r7, #0 - b _0233963C -_023395BC: - ldr r0, [sp, #0x28] - cmp r0, #1 - movne r5, #0 - movne r7, r5 - b _0233963C -_023395D0: - cmp r8, #0 - bne _02339608 - ldr r0, [sp, #0x10] - cmp r0, #0 - beq _0233963C - ldrh r0, [r6] - tst r0, #0x200 - beq _0233963C - bl GetFloorType - cmp r0, #0 - moveq r5, #6 - movne r5, #5 - mov r7, #0 - b _0233963C -_02339608: - ldrh r0, [r6] - tst r0, #0x200 - beq _0233963C - ldr r0, [sp, #0x10] - cmp r0, #0 - ldreq r0, [sp, #0x14] - cmpeq r0, #0 - beq _0233963C - bl GetFloorType - cmp r0, #0 - moveq r5, #6 - movne r5, #5 - mov r7, #0 -_0233963C: - cmp r7, #0 - bne _02339654 - ldr r0, [sp, #0x24] - cmp r0, #0 - cmpne r5, #0 - movne r5, #0xb -_02339654: - cmp r5, #0 - bne _02339734 - cmp r8, #0 - moveq r5, #1 - beq _02339734 - ldr r0, [sp, #0x28] - cmp r0, #1 - movne r5, #1 - bne _02339734 - cmp sb, #0x1f - mov r4, #0xf - bge _023396A0 - mov r0, sl - add r1, sb, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - biceq r4, r4, #1 -_023396A0: - cmp sb, #1 - blt _023396C4 - mov r0, sl - sub r1, sb, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - biceq r4, r4, #4 -_023396C4: - cmp sl, #0x37 - bge _023396E8 - mov r1, sb - add r0, sl, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - biceq r4, r4, #2 -_023396E8: - cmp sl, #1 - blt _0233970C - mov r1, sb - sub r0, sl, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - biceq r4, r4, #8 -_0233970C: - ldrh r1, [r6, #2] - mov r0, r4, lsl #0x10 - mov r0, r0, asr #0x10 - tst r1, #2 - addne r0, r0, #0x10 - movne r0, r0, lsl #0x10 - movne r5, r0, asr #0x10 - addeq r0, r0, #0x20 - moveq r0, r0, lsl #0x10 - moveq r5, r0, asr #0x10 -_02339734: - bl GetTopScreenOption - cmp r0, #3 - addeq r0, r5, #0x80 - streqh r0, [sp, #0x2e] - bl GetBottomScreenOption - cmp r0, #0 - bne _02339770 - ldr r0, _023398CC ; =ov29_0235376C - ldrb r0, [r0, #1] - cmp r0, #0 - addne r0, r5, #0x40 - strneh r0, [sp, #0x2c] - moveq r0, #1 - streqh r0, [sp, #0x2c] - b _0233979C -_02339770: - bl GetBottomScreenOption - cmp r0, #1 - addeq r0, r5, #0x40 - streqh r0, [sp, #0x2c] - strneh r5, [sp, #0x2c] - b _0233979C -_02339788: - mov r2, #1 - mov r1, #0x64 - strh r2, [sp, #0x2c] - strh r2, [sp, #0x2e] - strh r1, [r0, #2] -_0233979C: - sub r3, sb, #2 - add r0, r3, r3, lsr #31 - mov r5, r0, asr #1 - mov r0, #0x700 - mul r7, r5, r0 - ldr r0, _023398CC ; =ov29_0235376C - mov r2, sl, lsr #0x1f - mov r4, r3, lsr #0x1f - rsb r1, r2, sl, lsl #31 - rsb r3, r4, r3, lsl #31 - ldr sb, [r0, #8] - add r0, sl, sl, lsr #31 - ldrsh r6, [sp, #0x2c] - add r2, r2, r1, ror #31 - add r1, r4, r3, ror #31 - add r8, r2, r1, lsl #1 - ldr r2, [sb] - add r1, r8, r6, lsl #2 - mov r4, r0, asr #1 - add r0, fp, r7 - add r6, r0, r4, lsl #6 - ldr r1, [r2, r1, lsl #2] - mov r0, r6 - bl InitMinimapDisplayTile - ldr r0, _023398CC ; =ov29_0235376C - ldrsh r1, [sp, #0x2e] - ldr r0, [r0, #8] - add r2, fp, #0x7000 - add r2, r2, r7 - add r7, r2, r4, lsl #6 - ldr r2, [r0] - add r0, r8, r1, lsl #2 - ldr r1, [r2, r0, lsl #2] - mov r0, r7 - bl InitMinimapDisplayTile - add r0, fp, #0xe000 - ldrb r1, [r0, #0x445] - cmp r1, #0 - bne _023398BC - mov r1, #0x1c - mul r8, r5, r1 - add r1, r0, r8 - ldrb r2, [r1, r4] - add r1, r1, r4 - cmp r2, #0 - bne _023398BC - mov r3, #1 - strb r3, [r1] - ldr r2, [r0, #0x440] - cmp r2, #0x28 - strgeb r3, [r0, #0x445] - bge _023398BC - add r3, r4, r8 - add r2, fp, r2, lsl #4 - mov r3, r3, lsl #6 - add r2, r2, #0xe000 - str r3, [r2, #0x1c0] - ldr r2, [r0, #0x440] - add r2, fp, r2, lsl #4 - add r2, r2, #0xe000 - str r6, [r2, #0x1c4] - ldr r2, [r0, #0x440] - add r2, fp, r2, lsl #4 - add r2, r2, #0xe000 - str r7, [r2, #0x1c8] - ldr r2, [r0, #0x440] - add r2, fp, r2, lsl #4 - add r2, r2, #0xe000 - str r1, [r2, #0x1cc] - ldr r1, [r0, #0x440] - add r1, r1, #1 - str r1, [r0, #0x440] -_023398BC: - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_023398C4: .word ov29_02352FCC -_023398C8: .word DUNGEON_PTR -_023398CC: .word ov29_0235376C -_023398D0: .word ov29_0237CFB8 -_023398D4: .word ov29_02352FF4 - arm_func_end DrawMinimapTile - - arm_func_start ov29_023398D8 -ov29_023398D8: ; 0x023398D8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r2, #0x7000 - mla r6, r1, r2, r0 - add r0, r0, #0xe000 - mov r5, #0 - ldr r2, _02339928 ; =ov29_0235377C - strb r5, [r0, #0x445] - ldr r7, [r2, r1, lsl #2] - mov r4, #0x200 - b _0233991C -_02339900: - mov r0, r7 - mov r1, r6 - mov r2, r4 - bl Memcpy32 - add r7, r7, #0x200 - add r6, r6, #0x200 - add r5, r5, #8 -_0233991C: - cmp r5, #0x1c0 - blo _02339900 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02339928: .word ov29_0235377C - arm_func_end ov29_023398D8 - - arm_func_start ov29_0233992C -ov29_0233992C: ; 0x0233992C - stmdb sp!, {r4, r5, r6, lr} - ldr r0, _02339A1C ; =DUNGEON_PTR - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r4, #0 - mov r5, r4 - bl ov29_022EA408 - ldr r1, _02339A20 ; =ov29_0237CFB8 - ldrb r1, [r1] - cmp r1, #0 - beq _0233996C - cmp r0, #0 - cmpne r0, #3 - cmpne r0, #0xc - moveq r4, #1 -_0233996C: - bl GetTopScreenOption - cmp r0, #3 - moveq r5, #1 - bl GetMinimapData - mov r6, r0 - add r0, r6, #0xe000 - ldrb r0, [r0, #0x444] - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - bl ov10_022BFD20 - cmp r0, #0 - ldmneia sp!, {r4, r5, r6, pc} - add r0, r6, #0xe000 - ldrb r0, [r0, #0x445] - cmp r0, #0 - bne _023399D8 - cmp r4, #0 - beq _023399C0 - mov r0, r6 - mov r1, #0 - bl ov29_0233A470 -_023399C0: - cmp r5, #0 - beq _02339A0C - mov r0, r6 - mov r1, #1 - bl ov29_0233A470 - b _02339A0C -_023399D8: - cmp r4, #0 - beq _023399EC - mov r0, r6 - mov r1, #0 - bl ov29_023398D8 -_023399EC: - cmp r5, #0 - beq _02339A00 - mov r0, r6 - mov r1, #1 - bl ov29_023398D8 -_02339A00: - add r0, r6, #0xe000 - mov r1, #1 - strb r1, [r0, #0x446] -_02339A0C: - add r0, r6, #0xe000 - mov r1, #0 - str r1, [r0, #0x440] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02339A1C: .word DUNGEON_PTR -_02339A20: .word ov29_0237CFB8 - arm_func_end ov29_0233992C - - arm_func_start FlashLeaderIcon -FlashLeaderIcon: ; 0x02339A24 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #8 - ldr r1, _02339CB8 ; =DUNGEON_PTR - mov r4, r0 - ldr r0, [r1] - add r0, r0, #0x1a000 -#ifdef JAPAN - ldrb r0, [r0, #0x1a5] -#else - ldrb r0, [r0, #0x249] -#endif - cmp r0, #0 - bne _02339CB0 - ldr r0, _02339CBC ; =ov29_0235376C - ldrsh r0, [r0, #2] - cmp r0, #0x64 - bge _02339CB0 - ldr r0, _02339CC0 ; =ov29_0237CFB8 - ldrb r1, [r0, #1] - add r2, r1, #1 - and r1, r2, #0xff - strb r2, [r0, #1] - tst r1, #8 - bne _02339CB0 - add r0, sp, #0 - mov r1, #8 - bl MemZero - ldrh r2, [sp] - ldrh r0, [sp, #6] - ldrh r1, [sp, #2] - bic r2, r2, #0x100 - strh r2, [sp] - ldrh r2, [sp] - bic r0, r0, #1 - strh r0, [sp, #6] - bic r2, r2, #0x200 - strh r2, [sp] - ldrh r2, [sp] - bic r1, r1, #0x3e00 - strh r1, [sp, #2] - bic r0, r2, #0xc00 - strh r0, [sp] - ldrh r0, [sp] - ldrh r2, [sp, #2] - ldrh r1, [sp, #4] - bic r0, r0, #0x1000 - strh r0, [sp] - ldrh r3, [sp] - ldrh r0, [sp, #6] - bic r2, r2, #0xc000 - bic r3, r3, #0xc000 - bic r1, r1, #0xc00 - bic r0, r0, #2 - strh r3, [sp] - strh r2, [sp, #2] - strh r1, [sp, #4] - strh r0, [sp, #6] - bl GetMinimapData - add r0, r0, #0xe000 - ldrb r0, [r0, #0x448] - cmp r0, #0 - beq _02339BC0 - bl GetTopScreenOption - cmp r0, #3 - bne _02339BC0 - ldrh r0, [sp, #4] - mov r2, #0x400 - rsb r2, r2, #0 - and r0, r0, r2 - strh r0, [sp, #4] - ldrh r0, [sp, #4] - ldr ip, _02339CBC ; =ov29_0235376C - ldrh r3, [sp, #2] - orr r5, r0, #0x70 - add r0, r2, #0x200 - and r0, r3, r0 - strh r0, [sp, #2] - ldrsh r1, [ip, #2] - bic r5, r5, #0xf000 - strh r5, [sp, #4] - mov r0, r1, lsl #2 - ldrh r1, [sp] - add r5, r0, #0x10 - and r2, r5, r2, lsr #23 - ldrh r6, [sp, #2] - ldrh r3, [sp, #4] - bic r1, r1, #0x2000 - orr r6, r6, r2 - orr r0, r3, #0xc000 - ldr r3, _02339CC4 ; =OBJ_GRAPHICS_CONTROLS_PTR - ldrh r5, [sp, #6] - ldr r2, _02339CC8 ; =0xFFFF000F - strh r1, [sp] - and r1, r5, r2 - strh r1, [sp, #6] - strh r6, [sp, #2] - strh r0, [sp, #4] - ldrsh r0, [ip, #4] - ldrh r2, [sp, #6] - ldr r3, [r3] - mov r0, r0, lsl #0x16 - orr r5, r2, r0, lsr #16 - ldr r2, _02339CCC ; =0x0000013F - add r1, sp, #0 - add r0, r3, #0x70 - strh r5, [sp, #6] - bl AddSimpleObjToOam -_02339BC0: - cmp r4, #0 - bne _02339CB0 - ldr r0, _02339CC0 ; =ov29_0237CFB8 - ldrb r0, [r0] - cmp r0, #0 - beq _02339CB0 - bl GetMinimapData - add r0, r0, #0xe000 - ldrb r0, [r0, #0x447] - cmp r0, #0 - beq _02339CB0 - bl GetBottomScreenOption - cmp r0, #0 - beq _02339CB0 - ldrh r0, [sp, #4] - mov r2, #0x400 - rsb r2, r2, #0 - and r0, r0, r2 - strh r0, [sp, #4] - ldrh r0, [sp, #4] - ldrh r4, [sp] - ldrh r6, [sp, #2] - add r2, r2, #0x200 - orr r1, r0, #0xdd - ldr ip, _02339CBC ; =ov29_0235376C - and r2, r6, r2 - strh r2, [sp, #2] - ldrsh r0, [ip, #2] - orr r1, r1, #0x100 - bic r4, r4, #0x2000 - strh r4, [sp] - strh r1, [sp, #4] - mov r5, r0, lsl #2 - ldrh r0, [sp, #4] - ldrh r1, [sp] - ldrh lr, [sp, #6] - ldr r2, _02339CC8 ; =0xFFFF000F - bic r0, r0, #0xf000 - and r2, lr, r2 - orr r1, r1, #0x2000 - ldr r3, _02339CD0 ; =0x000001DD - strh r2, [sp, #6] - ldrh r6, [sp, #2] - add r5, r5, #8 - add r2, r3, #0x22 - and r2, r5, r2 - orr r2, r6, r2 - strh r2, [sp, #2] - strh r0, [sp, #4] - strh r1, [sp] - ldrsh r1, [ip, #4] - ldr r4, _02339CC4 ; =OBJ_GRAPHICS_CONTROLS_PTR - ldrh r2, [sp, #6] - ldr r0, [r4] - mov r1, r1, lsl #0x16 - orr r4, r2, r1, lsr #16 - add r1, sp, #0 - sub r2, r3, #0x9e - strh r4, [sp, #6] - bl AddSimpleObjToOam -_02339CB0: - add sp, sp, #8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02339CB8: .word DUNGEON_PTR -_02339CBC: .word ov29_0235376C -_02339CC0: .word ov29_0237CFB8 -_02339CC4: .word OBJ_GRAPHICS_CONTROLS_PTR -_02339CC8: .word 0xFFFF000F -_02339CCC: .word 0x0000013F -_02339CD0: .word 0x000001DD - arm_func_end FlashLeaderIcon - - arm_func_start ov29_02339CD4 -ov29_02339CD4: ; 0x02339CD4 - ldr r0, _02339CE4 ; =ov29_0237CFB8 - mov r1, #0 - strb r1, [r0, #1] - bx lr - .align 2, 0 -_02339CE4: .word ov29_0237CFB8 - arm_func_end ov29_02339CD4 - - arm_func_start UpdateMinimap -UpdateMinimap: ; 0x02339CE8 - stmdb sp!, {r4, r5, r6, lr} - bl GetMinimapData - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - mov r6, #0 - add r0, r0, #0xe000 - mov r1, #1 - strb r1, [r0, #0x445] - mov r4, r6 -_02339D0C: - mov r5, r4 -_02339D10: - mov r0, r5 - mov r1, r6 - bl DrawMinimapTile - add r5, r5, #1 - cmp r5, #0x38 - blt _02339D10 - add r6, r6, #1 - cmp r6, #0x20 - blt _02339D0C - bl GetBottomScreenOption - cmp r0, #0 - beq _02339D54 - bl GetMinimapData - add r0, r0, #0xe000 - mov r1, #1 - strb r1, [r0, #0x447] - ldmia sp!, {r4, r5, r6, pc} -_02339D54: - ldr r0, _02339D78 ; =ov29_0235376C - ldrb r0, [r0, #1] - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - bl GetMinimapData - add r0, r0, #0xe000 - mov r1, #1 - strb r1, [r0, #0x447] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02339D78: .word ov29_0235376C - arm_func_end UpdateMinimap - - arm_func_start ov29_02339D7C -ov29_02339D7C: ; 0x02339D7C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - cmp r0, #1 - mov r5, #0x10 - moveq r6, #0 - beq _02339D9C - cmp r1, #0 - movne r6, #0 - moveq r6, #5 -_02339D9C: - cmp r0, #1 - mov sl, #0x1140 - mov r8, #1 - bne _02339E6C - mov sb, #0 - mov fp, sb - b _02339E00 -_02339DB8: - mov r0, r8, lsl #0x10 - mov r7, fp - mov r4, r0, asr #0x10 -_02339DC4: - add r0, r7, #2 - add r1, sl, #1 - mov ip, r0, lsl #0x10 - mov r0, r1, lsl #0x10 - mov r2, sl - mov sl, r0, lsr #0x10 - mov r1, r4 - mov r3, #1 - mov r0, ip, asr #0x10 - bl ov29_02339F2C - add r7, r7, #1 - cmp r7, #0x1c - blt _02339DC4 - add r8, r8, #1 - add sb, sb, #1 -_02339E00: - cmp sb, r5 - blt _02339DB8 - mov sb, #0 - mov r4, #0x1000 - mov fp, #1 - mov r7, sb - b _02339E58 -_02339E1C: - mov r0, r8, lsl #0x10 - mov sl, r7 - mov r5, r0, asr #0x10 -_02339E28: - add r0, sl, #2 - mov r0, r0, lsl #0x10 - mov r1, r5 - mov r2, r4 - mov r3, fp - mov r0, r0, asr #0x10 - bl ov29_02339F2C - add sl, sl, #1 - cmp sl, #0x1c - blt _02339E28 - add r8, r8, #1 - add sb, sb, #1 -_02339E58: - cmp sb, r6 - blt _02339E1C - mov r0, #1 - bl ov29_02339F64 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_02339E6C: - mov r7, #0 - mov fp, r7 - b _02339EC0 -_02339E78: - mov r0, r8, lsl #0x10 - mov sb, fp - mov r4, r0, asr #0x10 -_02339E84: - add r0, sb, #1 - add r1, sl, #1 - mov ip, r0, lsl #0x10 - mov r0, r1, lsl #0x10 - mov r2, sl - mov sl, r0, lsr #0x10 - mov r1, r4 - mov r3, #0 - mov r0, ip, asr #0x10 - bl ov29_02339F2C - add sb, sb, #1 - cmp sb, #0x1c - blt _02339E84 - add r8, r8, #1 - add r7, r7, #1 -_02339EC0: - cmp r7, r5 - blt _02339E78 - mov sb, #0 - mov r4, #0x1000 - mov fp, sb - mov r7, sb - b _02339F18 -_02339EDC: - mov r0, r8, lsl #0x10 - mov sl, r7 - mov r5, r0, asr #0x10 -_02339EE8: - add r0, sl, #1 - mov r0, r0, lsl #0x10 - mov r1, r5 - mov r2, r4 - mov r3, fp - mov r0, r0, asr #0x10 - bl ov29_02339F2C - add sl, sl, #1 - cmp sl, #0x1c - blt _02339EE8 - add r8, r8, #1 - add sb, sb, #1 -_02339F18: - cmp sb, r6 - blt _02339EDC - mov r0, #0 - bl ov29_02339F64 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end ov29_02339D7C - - arm_func_start ov29_02339F2C -ov29_02339F2C: ; 0x02339F2C - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr ip, _02339F60 ; =ov29_0235352C - str r1, [sp, #4] - ldr ip, [ip] - mov r1, #0xc - mla r1, r3, r1, ip - str r0, [sp] - ldr r0, [r1, #0x24] - add r1, sp, #0 - bl sub_0200B3FC - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02339F60: .word ov29_0235352C - arm_func_end ov29_02339F2C - - arm_func_start ov29_02339F64 -ov29_02339F64: ; 0x02339F64 - ldr r2, _02339F80 ; =ov29_0235352C - mov r1, #0xc - ldr r2, [r2] - ldr ip, _02339F84 ; =sub_0200B330 - mla r1, r0, r1, r2 - ldr r0, [r1, #0x24] - bx ip - .align 2, 0 -_02339F80: .word ov29_0235352C -_02339F84: .word sub_0200B330 - arm_func_end ov29_02339F64 - - arm_func_start ov29_02339F88 -ov29_02339F88: ; 0x02339F88 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetBottomScreenOption - cmp r0, #0 - beq _02339FAC - mov r1, r4 - mov r0, #0 - bl ov29_02339D7C - ldmia sp!, {r4, pc} -_02339FAC: - ldr r0, _02339FCC ; =ov29_0235376C - ldrb r0, [r0, #1] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - mov r1, r4 - mov r0, #0 - bl ov29_02339D7C - ldmia sp!, {r4, pc} - .align 2, 0 -_02339FCC: .word ov29_0235376C - arm_func_end ov29_02339F88 - - arm_func_start ov29_02339FD0 -ov29_02339FD0: ; 0x02339FD0 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetTopScreenOption - cmp r0, #3 - ldmneia sp!, {r4, pc} - mov r1, r4 - mov r0, #1 - bl ov29_02339D7C - ldmia sp!, {r4, pc} - arm_func_end ov29_02339FD0 - - arm_func_start ov29_02339FF4 -ov29_02339FF4: ; 0x02339FF4 - stmdb sp!, {r4, lr} - mov r4, r0 - bl ov29_02339F88 - bl GetTopScreenOption - cmp r0, #3 - ldmneia sp!, {r4, pc} - mov r1, r4 - mov r0, #1 - bl ov29_02339D7C - ldmia sp!, {r4, pc} - arm_func_end ov29_02339FF4 - - arm_func_start ov29_0233A01C -ov29_0233A01C: ; 0x0233A01C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - cmp r0, #0 - movne r6, #0 - mov sb, #0 - mov sl, r1 - mov r5, #0x10 - moveq r6, #5 - mov r8, #1 - mov fp, sb - b _0233A080 -_0233A044: - mov r0, r8, lsl #0x10 - mov r7, fp - mov r4, r0, asr #0x10 -_0233A050: - add r0, r7, #1 - mov r0, r0, lsl #0x10 - mov r1, r4 - mov r2, #0x1000 - mov r3, sl - mov r0, r0, asr #0x10 - bl ov29_02339F2C - add r7, r7, #1 - cmp r7, #0x1c - blt _0233A050 - add r8, r8, #1 - add sb, sb, #1 -_0233A080: - cmp sb, r5 - blt _0233A044 - mov r7, #0 - mov fp, #0x1000 - mov r5, r7 - b _0233A0D4 -_0233A098: - mov r0, r8, lsl #0x10 - mov sb, r5 - mov r4, r0, asr #0x10 -_0233A0A4: - add r0, sb, #1 - mov r0, r0, lsl #0x10 - mov r1, r4 - mov r2, fp - mov r3, sl - mov r0, r0, asr #0x10 - bl ov29_02339F2C - add sb, sb, #1 - cmp sb, #0x1c - blt _0233A0A4 - add r8, r8, #1 - add r7, r7, #1 -_0233A0D4: - cmp r7, r6 - blt _0233A098 - mov r0, sl - bl ov29_02339F64 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end ov29_0233A01C - - arm_func_start ov29_0233A0E8 -ov29_0233A0E8: ; 0x0233A0E8 - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r1, #1 - bne _0233A114 - bl GetTopScreenOption - cmp r0, #3 - ldmneia sp!, {r4, pc} - mov r0, r4 - mov r1, #1 - bl ov29_0233A01C - ldmia sp!, {r4, pc} -_0233A114: - cmp r1, #0 - ldmneia sp!, {r4, pc} - bl GetBottomScreenOption - cmp r0, #0 - beq _0233A138 - mov r0, r4 - mov r1, #0 - bl ov29_0233A01C - ldmia sp!, {r4, pc} -_0233A138: - ldr r0, _0233A158 ; =ov29_0235376C - ldrb r0, [r0, #1] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - mov r1, #0 - bl ov29_0233A01C - ldmia sp!, {r4, pc} - .align 2, 0 -_0233A158: .word ov29_0235376C - arm_func_end ov29_0233A0E8 - - arm_func_start ov29_0233A15C -ov29_0233A15C: ; 0x0233A15C - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetTopScreenOption - cmp r0, #3 - bne _0233A17C - mov r0, r4 - mov r1, #1 - bl ov29_0233A01C -_0233A17C: - bl GetBottomScreenOption - cmp r0, #0 - beq _0233A198 - mov r0, r4 - mov r1, #0 - bl ov29_0233A01C - ldmia sp!, {r4, pc} -_0233A198: - ldr r0, _0233A1B8 ; =ov29_0235376C - ldrb r0, [r0, #1] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - mov r0, r4 - mov r1, #0 - bl ov29_0233A01C - ldmia sp!, {r4, pc} - .align 2, 0 -_0233A1B8: .word ov29_0235376C - arm_func_end ov29_0233A15C - - arm_func_start ov29_0233A1BC -ov29_0233A1BC: ; 0x0233A1BC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r6, #0 - mov r7, r0 - mov r8, #0x1000 - mov r4, r6 -_0233A1D0: - mov r0, r6, lsl #0x10 - mov r5, r4 - mov sb, r0, asr #0x10 -_0233A1DC: - mov r0, r5, lsl #0x10 - mov r1, sb - mov r2, r8 - mov r3, r7 - mov r0, r0, asr #0x10 - bl ov29_02339F2C - add r5, r5, #1 - cmp r5, #0x1c - blt _0233A1DC - add r6, r6, #1 - cmp r6, #0x20 - blt _0233A1D0 - mov r0, r7 - bl ov29_02339F64 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end ov29_0233A1BC - - arm_func_start SetMinimapDataE447 -SetMinimapDataE447: ; 0x0233A218 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetMinimapData - add r0, r0, #0xe000 - strb r4, [r0, #0x447] - ldmia sp!, {r4, pc} - arm_func_end SetMinimapDataE447 - -#ifdef EUROPE - arm_func_start GetMinimapDataE447 -GetMinimapDataE447: ; 0x0233AE00 - stmdb sp!, {r3, lr} - bl GetMinimapData - add r0, r0, #0xe000 - ldrb r0, [r0, #0x447] - ldmia sp!, {r3, pc} - arm_func_end GetMinimapDataE447 -#endif - - arm_func_start SetMinimapDataE448 -SetMinimapDataE448: ; 0x0233A230 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetMinimapData - add r0, r0, #0xe000 - strb r4, [r0, #0x448] - ldmia sp!, {r4, pc} - arm_func_end SetMinimapDataE448 - - arm_func_start ov29_0233A248 -ov29_0233A248: ; 0x0233A248 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r1, r4 - mov r0, #0 - bl ov29_0233A0E8 - cmp r4, #0 - bne _0233A274 - bl GetMinimapData - add r0, r0, #0xe000 - mov r1, #0 - strb r1, [r0, #0x447] -_0233A274: - cmp r4, #1 - ldmneia sp!, {r4, pc} - bl GetMinimapData - add r0, r0, #0xe000 - mov r1, #0 - strb r1, [r0, #0x448] - ldmia sp!, {r4, pc} - arm_func_end ov29_0233A248 - - arm_func_start InitWeirdMinimapMatrix -InitWeirdMinimapMatrix: ; 0x0233A290 - stmdb sp!, {r3, r4, r5, lr} - bl GetMinimapData - add r1, r0, #0xe000 - ldrb r1, [r1, #0x446] - cmp r1, #0 - ldmeqia sp!, {r3, r4, r5, pc} - mov r4, #0 - mov r3, r4 - mov ip, r4 - mov r2, #0x1c -_0233A2B8: - mla r5, r4, r2, r0 - mov lr, ip -_0233A2C0: - add r1, r5, lr - add r1, r1, #0xe000 - add lr, lr, #1 - strb r3, [r1] - cmp lr, #0x38 - blt _0233A2C0 - add r4, r4, #1 - cmp r4, #0x20 - blt _0233A2B8 - add r0, r0, #0xe000 - strb r3, [r0, #0x446] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end InitWeirdMinimapMatrix - - arm_func_start InitMinimapDisplayTile -InitMinimapDisplayTile: ; 0x0233A2F0 - ldr r3, [r0] - ldmia r1, {r2, ip} - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0] - ldr r3, [r0, #4] - ldr r2, [r1, #8] - ldr ip, [r1, #0xc] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #4] - ldr r3, [r0, #8] - ldr r2, [r1, #0x10] - ldr ip, [r1, #0x14] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #8] - ldr r3, [r0, #0xc] - ldr r2, [r1, #0x18] - ldr ip, [r1, #0x1c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0xc] - ldr r3, [r0, #0x10] - ldr r2, [r1, #0x20] - ldr ip, [r1, #0x24] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x10] - ldr r3, [r0, #0x14] - ldr r2, [r1, #0x28] - ldr ip, [r1, #0x2c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x14] - ldr r3, [r0, #0x18] - ldr r2, [r1, #0x30] - ldr ip, [r1, #0x34] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x18] - ldr r3, [r0, #0x1c] - ldr r2, [r1, #0x38] - ldr ip, [r1, #0x3c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x1c] - ldr r3, [r0, #0x20] - ldr r2, [r1, #0x40] - ldr ip, [r1, #0x44] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x20] - ldr r3, [r0, #0x24] - ldr r2, [r1, #0x48] - ldr ip, [r1, #0x4c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x24] - ldr r3, [r0, #0x28] - ldr r2, [r1, #0x50] - ldr ip, [r1, #0x54] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x28] - ldr r3, [r0, #0x2c] - ldr r2, [r1, #0x58] - ldr ip, [r1, #0x5c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x2c] - ldr r3, [r0, #0x30] - ldr r2, [r1, #0x60] - ldr ip, [r1, #0x64] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x30] - ldr r3, [r0, #0x34] - ldr r2, [r1, #0x68] - ldr ip, [r1, #0x6c] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x34] - ldr r3, [r0, #0x38] - ldr r2, [r1, #0x70] - ldr ip, [r1, #0x74] - and r2, r3, r2 - orr r2, ip, r2 - str r2, [r0, #0x38] - ldr r3, [r0, #0x3c] - ldr r2, [r1, #0x78] - ldr ip, [r1, #0x7c] - and r1, r3, r2 - orr r1, ip, r1 - str r1, [r0, #0x3c] - bx lr - arm_func_end InitMinimapDisplayTile - - arm_func_start ov29_0233A470 -ov29_0233A470: ; 0x0233A470 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r4, #0 - add r2, r0, #0x21c0 - add r5, r0, #0xe000 - add ip, r2, #0xc000 - ldr r0, _0233A544 ; =ov29_0235377C - mov r6, r4 - b _0233A534 -_0233A490: - add lr, ip, r4, lsl #4 - add r2, lr, r1, lsl #2 - ldr r3, [r2, #4] - ldr sb, [ip, r4, lsl #4] - ldr r8, [r0, r1, lsl #2] - ldr r7, [r3] - add r2, sb, r8 - str r7, [sb, r8] - ldr r7, [r3, #4] - add r4, r4, #1 - str r7, [r2, #4] - ldr r7, [r3, #8] - str r7, [r2, #8] - ldr r7, [r3, #0xc] - str r7, [r2, #0xc] - ldr r7, [r3, #0x10] - str r7, [r2, #0x10] - ldr r7, [r3, #0x14] - str r7, [r2, #0x14] - ldr r7, [r3, #0x18] - str r7, [r2, #0x18] - ldr r7, [r3, #0x1c] - str r7, [r2, #0x1c] - ldr r7, [r3, #0x20] - str r7, [r2, #0x20] - ldr r7, [r3, #0x24] - str r7, [r2, #0x24] - ldr r7, [r3, #0x28] - str r7, [r2, #0x28] - ldr r7, [r3, #0x2c] - str r7, [r2, #0x2c] - ldr r7, [r3, #0x30] - str r7, [r2, #0x30] - ldr r7, [r3, #0x34] - str r7, [r2, #0x34] - ldr r7, [r3, #0x38] - str r7, [r2, #0x38] - ldr r3, [r3, #0x3c] - str r3, [r2, #0x3c] - ldr r2, [lr, #0xc] - strb r6, [r2] -_0233A534: - ldr r2, [r5, #0x440] - cmp r4, r2 - blt _0233A490 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0233A544: .word ov29_0235377C - arm_func_end ov29_0233A470 - - arm_func_start ov29_0233A548 -ov29_0233A548: ; 0x0233A548 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _0233A5E0 ; =MAP_COLOR_TABLE - ldr r7, _0233A5E4 ; =ov29_0235376C - mov r6, r1 - add r5, r2, r0, lsl #2 - mov r4, #0 -_0233A560: - cmp r4, #7 - bne _0233A5B0 - cmp r6, #0 - bne _0233A58C - add r0, r4, #0x100 - mov r1, r0, lsl #0x10 - mov r0, r5 - mov r2, r6 - mov r1, r1, asr #0x10 - bl ov29_0233A5E8 - b _0233A5D0 -_0233A58C: - ldr r1, [r7, #8] - add r0, r4, #0x100 - ldr r3, [r1, #4] - mov r1, r0, lsl #0x10 - mov r2, r6 - add r0, r3, r4, lsl #2 - mov r1, r1, asr #0x10 - bl ov29_0233A5E8 - b _0233A5D0 -_0233A5B0: - ldr r1, [r7, #8] - add r0, r4, #0x100 - ldr r3, [r1, #4] - mov r1, r0, lsl #0x10 - mov r2, r6 - add r0, r3, r4, lsl #2 - mov r1, r1, asr #0x10 - bl ov29_0233A5E8 -_0233A5D0: - add r4, r4, #1 - cmp r4, #0x10 - blt _0233A560 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0233A5E0: .word MAP_COLOR_TABLE -_0233A5E4: .word ov29_0235376C - arm_func_end ov29_0233A548 - - arm_func_start ov29_0233A5E8 -ov29_0233A5E8: ; 0x0233A5E8 - stmdb sp!, {r4, lr} - ldr ip, _0233A620 ; =ov29_0235352C - mov r3, #0xc - ldr ip, [ip] - mov lr, r0 - add r0, ip, #0x20 - mla r4, r2, r3, r0 - ldr r0, [r4, #8] - mov r2, r1 - mov r1, lr - bl sub_0200C008 - ldr r0, [r4, #8] - bl sub_0200A174 - ldmia sp!, {r4, pc} - .align 2, 0 -_0233A620: .word ov29_0235352C - arm_func_end ov29_0233A5E8 - - arm_func_start LoadFixedRoomDataVeneer -LoadFixedRoomDataVeneer: ; 0x0233A624 - ldr ip, _0233A62C ; =LoadFixedRoomData - bx ip - .align 2, 0 -_0233A62C: .word LoadFixedRoomData - arm_func_end LoadFixedRoomDataVeneer - - arm_func_start UnloadFixedRoomData -UnloadFixedRoomData: ; 0x0233A630 - stmdb sp!, {r3, lr} - bl ov29_02343DD8 - ldr r0, _0233A650 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x12000 -#ifdef JAPAN - str r1, [r0, #0xa00] -#else - str r1, [r0, #0xaa4] -#endif - ldmia sp!, {r3, pc} - .align 2, 0 -_0233A650: .word DUNGEON_PTR - arm_func_end UnloadFixedRoomData - - arm_func_start IsNormalFloor -IsNormalFloor: ; 0x0233A654 - stmdb sp!, {r3, lr} - bl IsHiddenStairsFloor - cmp r0, #0 - bne _0233A6C4 - bl IsGoldenChamber - cmp r0, #0 - bne _0233A6C4 - mov r0, #0xb - bl IsCurrentMissionType - cmp r0, #0 - bne _0233A6C4 - mov r0, #0xa - mov r1, #6 - bl IsCurrentMissionTypeExact - cmp r0, #0 - bne _0233A6C4 - mov r0, #0xc - bl IsCurrentMissionType - cmp r0, #0 - bne _0233A6C4 - ldr r0, _0233A6D4 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 -#ifdef JAPAN - ldrb r0, [r0, #0x36] -#else - ldrb r0, [r0, #0xda] -#endif - cmp r0, #0 - beq _0233A6CC - cmp r0, #0xa5 - bhs _0233A6CC -_0233A6C4: - mov r0, #0 - ldmia sp!, {r3, pc} -_0233A6CC: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0233A6D4: .word DUNGEON_PTR - arm_func_end IsNormalFloor - - arm_func_start GenerateFloor -GenerateFloor: ; 0x0233A6D8 -#ifdef JAPAN -#define GENERATE_FLOOR_OFFSET -0xA4 -#else -#define GENERATE_FLOOR_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x54 - ldr r2, _0233AE64 ; =DUNGEON_PTR - mov r8, #0 - ldr r3, [r2] - ldr r0, _0233AE68 ; =0x000286B2 - add r1, r3, #0x12000 - str r8, [r1, #0xaa4 + GENERATE_FLOOR_OFFSET] - ldr r1, [r2] - add sb, r3, r0 - add r0, r1, #0x3f00 - strh r8, [r0, #0xc2 + GENERATE_FLOOR_OFFSET] - bl LoadFixedRoomDataVeneer - bl ov29_02343DC4 - ldr r1, _0233AE64 ; =DUNGEON_PTR - ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldr r1, [r1] - mov r3, r8 - add r1, r1, #0x12000 - str r0, [r1, #0xaa4 + GENERATE_FLOOR_OFFSET] - strb r3, [r2, #3] - strb r3, [r2, #1] - strb r3, [r2, #7] - bl ResetHiddenStairsSpawn - bl IsOutlawMonsterHouseFloor - ldr r1, _0233AE64 ; =DUNGEON_PTR - ldr r3, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldr r2, [r1] - mov r1, sb - add r2, r2, #0xc4 + GENERATE_FLOOR_OFFSET - strb r0, [r3, #8] - add r0, r2, #0x4000 - bl GetHiddenStairsType - ldr r1, _0233AE64 ; =DUNGEON_PTR - ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldr r1, [r1] - str r0, [r2, #0x2c] - add r0, r1, #0x4000 - ldrsh r1, [r0, #0xd4 + GENERATE_FLOOR_OFFSET] - ldr r0, _0233AE70 ; =SECONDARY_TERRAIN_TYPES - ldrb r0, [r0, r1] - mov r1, #0xff - cmp r0, #2 - moveq r2, #1 - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - movne r2, r8 - strb r2, [r0, #4] - strb r1, [r0, #2] - mov r1, #0 - strb r1, [r0, #6] - ldrb r0, [sb, #7] - bl GetFinalKecleonShopSpawnChance - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - strh r0, [r1, #0xc] - ldrb r0, [sb, #8] - strh r0, [r1, #0x10] - ldrb r0, [r1, #8] - cmp r0, #0 - movne r0, #0x64 - strneh r0, [r1, #0x10] - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r1, #1 - strb r1, [r0] - sub r1, r1, #2 - str r1, [r0, #0x30] - str r1, [r0, #0x38] - str r1, [r0, #0x34] - str r1, [r0, #0x3c] - bl ResetFloor - bl IsNormalFloor - cmp r0, #0 - bne _0233A810 - ldr r0, _0233AE64 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - add r0, r0, #0x700 - strh r1, [r0, #0x86] - b _0233A828 -_0233A810: - ldrb r0, [sb, #6] - bl abs - ldr r1, _0233AE64 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x700 - strh r0, [r1, #0x86] -_0233A828: - ldr r3, _0233AE64 ; =DUNGEON_PTR - mov r7, #0 - ldr r0, [r3] - ldr r1, _0233AE74 ; =0x00012AFA - add r0, r0, #0x4000 - strb r7, [r0, #0xc5 + GENERATE_FLOOR_OFFSET] - ldr r0, [r3] - ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS - add r0, r0, #0x4000 - strb r7, [r0, #0xc6 + GENERATE_FLOOR_OFFSET] - ldr r0, [r3] - strh r7, [r0, r1] - ldr r0, [r3] - add r0, r0, #0x4000 - str r7, [r0, #0xcc + GENERATE_FLOOR_OFFSET] - ldrb r0, [sb, #0xc] - str r0, [r2, #0x18] - b _0233AD3C -_0233A870: - ldr r1, _0233AE64 ; =DUNGEON_PTR - mov r0, #0 - str r0, [sp] - ldr r0, [r1] - add r0, r0, #0xc4 + GENERATE_FLOOR_OFFSET - add r0, r0, #0x4000 - bl ResetImportantSpawnPositions - mov r6, #0 - mvn r5, #0 - ldr r4, _0233AE64 ; =DUNGEON_PTR - b _0233AC50 -_0233A89C: - ldr r0, [sp] - cmp r0, #0 - beq _0233A8C8 - ldr r0, [r4] - add r0, r0, #0x4000 - ldrb r0, [r0, #0xda + GENERATE_FLOOR_OFFSET] - bl IsNotFullFloorFixedRoom - cmp r0, #0 - beq _0233AC58 - mov r0, #0 - str r0, [sp] -_0233A8C8: - ldr r0, [r4] - cmp r6, #1 - add r0, r0, #0x4000 - strh r6, [r0, #0xde + GENERATE_FLOOR_OFFSET] - ldrge r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - movge r1, #0 - strge r1, [r0, #0x18] - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r1, #0 - strb r1, [r0, #5] - strh r5, [r0, #0x20] - strh r5, [r0, #0x22] - bl ResetFloor - ldr r0, [r4] - add r0, r0, #0xcc00 - strh r5, [r0, #0xe0 + GENERATE_FLOOR_OFFSET] - ldr r0, [r4] - add r0, r0, #0xcc00 - strh r5, [r0, #0xe2 + GENERATE_FLOOR_OFFSET] - ldr r0, [r4] - add r1, r0, #0x4000 - mov r0, #0 - strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] - ldr r0, [r4] - add r0, r0, #0x4000 - ldrb r0, [r0, #0xda + GENERATE_FLOOR_OFFSET] - cmp r0, #0 - beq _0233A954 - mov r1, sb - bl GenerateFixedRoom - cmp r0, #0 - bne _0233AC58 - mov r0, #1 - str r0, [sp] - b _0233AB78 -_0233A954: - mov r0, #2 - ldrb sl, [sb] - mov fp, #0x20 - str r0, [sp, #4] - str r0, [sp, #8] - b _0233A9DC -_0233A96C: - cmp sl, #8 - mov r0, #2 - beq _0233A998 - mov r1, #9 - bl DungeonRandRange - str r0, [sp, #8] - mov r0, #2 - mov r1, #8 - bl DungeonRandRange - str r0, [sp, #4] - b _0233A9B4 -_0233A998: - mov r1, #5 - bl DungeonRandRange - str r0, [sp, #8] - mov r0, #2 - mov r1, #4 - bl DungeonRandRange - str r0, [sp, #4] -_0233A9B4: - ldr r0, [sp, #8] - cmp r0, #6 - ldrle r0, [sp, #4] - cmple r0, #4 - ble _0233A9E4 - subs fp, fp, #1 - moveq r0, #4 - streq r0, [sp, #8] - streq r0, [sp, #4] - beq _0233A9E4 -_0233A9DC: - cmp fp, #0 - bne _0233A96C -_0233A9E4: - ldr r1, [sp, #8] - mov r0, #0x38 - bl _s32_div_f - cmp r0, #7 - movle r0, #1 - strle r0, [sp, #8] - ldr r1, [sp, #4] - mov r0, #0x20 - bl _s32_div_f - ldr r1, [r4] - cmp r0, #7 - add r2, r1, #0x4000 - mov r1, #0 - strb r1, [r2, #0xc4 + GENERATE_FLOOR_OFFSET] - ldr r1, [r4] - movle r0, #1 - add r2, r1, #0x4000 - mov r1, #0xff - strb r1, [r2, #0xc9 + GENERATE_FLOOR_OFFSET] - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - strle r0, [sp, #4] - and r0, sl, #0xf - cmp r0, #0xb - str sl, [r1, #0x28] - addls pc, pc, r0, lsl #2 - b _0233AAD4 -_0233AA4C: ; jump table - b _0233AAD4 ; case 0 - b _0233AA7C ; case 1 - b _0233AAEC ; case 2 - b _0233AB04 ; case 3 - b _0233AB14 ; case 4 - b _0233AB24 ; case 5 - b _0233AB3C ; case 6 - b _0233AB4C ; case 7 - b _0233AAD4 ; case 8 - b _0233AB58 ; case 9 - b _0233AB64 ; case 10 - b _0233AAA8 ; case 11 -_0233AA7C: - mov r0, #2 - bl DungeonRandInt - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r2, #1 - strb r2, [r1, #6] - add r1, r0, #2 - mov r0, #4 - mov r2, sb - bl GenerateStandardFloor - mov r8, #1 - b _0233AB78 -_0233AAA8: - mov r0, #2 - bl DungeonRandInt - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r2, #2 - strb r2, [r1, #6] - add r1, r0, #2 - mov r0, #4 - mov r2, sb - bl GenerateStandardFloor - mov r8, #1 - b _0233AB78 -_0233AAD4: - ldr r0, [sp, #8] - ldr r1, [sp, #4] - mov r2, sb - bl GenerateStandardFloor - mov r8, #1 - b _0233AB78 -_0233AAEC: - bl GenerateOneRoomMonsterHouseFloor - ldr r0, [r4] - add r1, r0, #0x4000 - mov r0, #1 - strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] - b _0233AB78 -_0233AB04: - mov r0, sb - bl GenerateOuterRingFloor - mov r8, #1 - b _0233AB78 -_0233AB14: - mov r0, sb - bl GenerateCrossroadsFloor - mov r8, #1 - b _0233AB78 -_0233AB24: - bl GenerateTwoRoomsWithMonsterHouseFloor - ldr r0, [r4] - add r1, r0, #0x4000 - mov r0, #1 - strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] - b _0233AB78 -_0233AB3C: - mov r0, sb - bl GenerateLineFloor - mov r8, #1 - b _0233AB78 -_0233AB4C: - mov r0, sb - bl GenerateCrossFloor - b _0233AB78 -_0233AB58: - mov r0, sb - bl GenerateBeetleFloor - b _0233AB78 -_0233AB64: - ldr r0, [sp, #8] - ldr r1, [sp, #4] - mov r2, sb - bl GenerateOuterRoomsFloor - mov r8, #1 -_0233AB78: - bl ResetInnerBoundaryTileRows - bl EnsureImpassableTilesAreWalls - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #5] - cmp r0, #0 - bne _0233AC4C - mov sl, #0 - mov r2, sl -_0233AB98: - mov r1, #0 - add r0, sp, #0x14 - strb r1, [r0, r2] - add r2, r2, #1 - cmp r2, #0x40 - blt _0233AB98 - mov r0, r1 - str r0, [sp, #0xc] -_0233ABB8: - mov fp, #0 -_0233ABBC: - ldr r0, [sp, #0xc] - mov r1, fp - bl GetTile - str r0, [sp, #0x10] - bl GetTileTerrain - cmp r0, #1 - bne _0233ABFC - ldr r0, [sp, #0x10] - ldrb r2, [r0, #7] - cmp r2, #0xf0 - bhi _0233ABFC - cmp r2, #0x40 - movlo r1, #1 - addlo r0, sp, #0x14 - add sl, sl, #1 - strlob r1, [r0, r2] -_0233ABFC: - add fp, fp, #1 - cmp fp, #0x20 - blt _0233ABBC - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - cmp r0, #0x38 - blt _0233ABB8 - mov r1, #0 - mov r2, r1 -_0233AC24: - add r0, sp, #0x14 - ldrb r0, [r0, r2] - add r2, r2, #1 - cmp r0, #0 - addne r1, r1, #1 - cmp r2, #0x40 - blt _0233AC24 - cmp sl, #0x1e - cmpge r1, #2 - bge _0233AC58 -_0233AC4C: - add r6, r6, #1 -_0233AC50: - cmp r6, #0xa - blt _0233A89C -_0233AC58: - cmp r6, #0xa - bne _0233AC88 - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - mvn r1, #0 - strh r1, [r0, #0x20] - strh r1, [r0, #0x22] - bl GenerateOneRoomMonsterHouseFloor - ldr r0, _0233AE64 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - add r0, r0, #0x4000 - strb r1, [r0, #0xc4 + GENERATE_FLOOR_OFFSET] -_0233AC88: - bl FinalizeJunctions - cmp r8, #0 - beq _0233ACA0 - mov r1, sb - mov r0, #1 - bl GenerateSecondaryTerrainFormations -_0233ACA0: - bl DungeonRand100 - ldrb r1, [sb, #0x19] - cmp r0, r1 - movlt r0, #1 - movge r0, #0 - and r4, r0, #0xff - mov r0, sb - mov r1, r4 - bl MarkNonEnemySpawns - mov r0, sb - mov r1, r4 - bl MarkEnemySpawns - bl ResolveInvalidSpawns - ldr r0, _0233AE64 ; =DUNGEON_PTR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0xcc00 - ldrsh r2, [r0, #0xe0 + GENERATE_FLOOR_OFFSET] - cmp r2, r1 - ldrnesh r0, [r0, #0xe2 + GENERATE_FLOOR_OFFSET] - cmpne r0, r1 - beq _0233AD38 - bl GetFloorType - cmp r0, #1 - beq _0233AD44 - ldr r0, _0233AE64 ; =DUNGEON_PTR - mvn r2, #0 - ldr r0, [r0] - add r1, r0, #0xcc00 - ldrsh r0, [r1, #0xe4 + GENERATE_FLOOR_OFFSET] - cmp r0, r2 - ldrnesh r1, [r1, #0xe6 + GENERATE_FLOOR_OFFSET] - cmpne r1, r2 - beq _0233AD38 - mov r2, #0 - bl StairsAlwaysReachable - cmp r0, #0 - bne _0233AD44 -_0233AD38: - add r7, r7, #1 -_0233AD3C: - cmp r7, #0xa - blt _0233A870 -_0233AD44: - cmp r7, #0xa - bne _0233AD98 - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - mvn r1, #0 - strh r1, [r0, #0x20] - strh r1, [r0, #0x22] - bl ResetFloor - bl GenerateOneRoomMonsterHouseFloor - ldr r0, _0233AE64 ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r0] - add r0, r0, #0x4000 - strb r1, [r0, #0xc4 + GENERATE_FLOOR_OFFSET] - bl FinalizeJunctions - mov r0, sb - mov r1, #0 - bl MarkNonEnemySpawns - mov r0, sb - mov r1, #0 - bl MarkEnemySpawns - bl ResolveInvalidSpawns -_0233AD98: - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldrsh r1, [r0, #0x20] - cmp r1, #0 - ldrgesh r0, [r0, #0x22] - cmpge r0, #0 - blt _0233ADCC - bl GetKecleonIdToSpawnByFloor - ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS - mov r2, r0 - ldrsh r0, [r1, #0x20] - ldrsh r1, [r1, #0x22] - mov r3, #0 - bl MarkShopkeeperSpawn -_0233ADCC: - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x30] - cmp r0, #0 - ldrlt r0, _0233AE64 ; =DUNGEON_PTR - movlt r1, #0 - blt _0233ADF4 - mov r0, sb - bl ov29_023427E4 - ldr r0, _0233AE64 ; =DUNGEON_PTR - mov r1, #1 -_0233ADF4: - ldr r0, [r0] - mov r2, #0x38 - add r0, r0, #0x4000 - strb r1, [r0, #0xc6 + GENERATE_FLOOR_OFFSET] - mov r0, #0 - mov r1, r0 - mov r3, #0x20 - bl FlagHallwayJunctions - ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #4] - cmp r0, #0 - beq _0233AE28 - bl ConvertSecondaryTerrainToChasms -_0233AE28: - ldr r0, _0233AE64 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x4000 - ldrsh r0, [r0, #0xd4 + GENERATE_FLOOR_OFFSET] - sub r0, r0, #0x1a - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - bhi _0233AE58 - bl ConvertWallsToChasms -_0233AE58: - bl UnloadFixedRoomData - add sp, sp, #0x54 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233AE64: .word DUNGEON_PTR -_0233AE68: .word 0x000286B2 + GENERATE_FLOOR_OFFSET -_0233AE6C: .word FLOOR_GENERATION_STATUS -_0233AE70: .word SECONDARY_TERRAIN_TYPES -_0233AE74: .word 0x00012AFA + GENERATE_FLOOR_OFFSET - arm_func_end GenerateFloor - - arm_func_start GetTileTerrain -GetTileTerrain: ; 0x0233AE78 - ldrh r0, [r0] - and r0, r0, #3 - bx lr - arm_func_end GetTileTerrain - - arm_func_start DungeonRand100 -DungeonRand100: ; 0x0233AE84 - ldr ip, _0233AE90 ; =DungeonRandInt - mov r0, #0x64 - bx ip - .align 2, 0 -_0233AE90: .word DungeonRandInt - arm_func_end DungeonRand100 - - arm_func_start ClearHiddenStairs -ClearHiddenStairs: ; 0x0233AE94 - stmdb sp!, {r3, lr} - ldr r0, _0233AF04 ; =HIDDEN_STAIRS_SPAWN_BLOCKED - ldrb r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldr r1, _0233AF08 ; =FLOOR_GENERATION_STATUS - mvn r2, #0 - ldrsh r0, [r1, #0x1c] - cmp r0, r2 - ldrnesh r1, [r1, #0x1e] - cmpne r1, r2 - beq _0233AEFC - bl GetTileSafe - mov r2, #0 - strh r2, [r0] - ldr r1, _0233AF08 ; =FLOOR_GENERATION_STATUS - strh r2, [r0, #2] - ldrsh r0, [r1, #0x1c] - ldrsh r1, [r1, #0x1e] - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233AEFC: - bl ResetHiddenStairsSpawn - ldmia sp!, {r3, pc} - .align 2, 0 -_0233AF04: .word HIDDEN_STAIRS_SPAWN_BLOCKED -_0233AF08: .word FLOOR_GENERATION_STATUS - arm_func_end ClearHiddenStairs - - arm_func_start FlagHallwayJunctions -FlagHallwayJunctions: ; 0x0233AF0C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sl, r0 - mov fp, r1 - mov sb, r2 - mov r8, r3 - b _0233B01C -_0233AF24: - mov r7, fp - sub r6, sl, #1 - b _0233B010 -_0233AF30: - mov r0, sl - mov r1, r7 - mov r4, #0 - bl GetTileSafe - mov r5, r0 - ldrh r0, [r5] - bic r0, r0, #4 - strh r0, [r5] - ldrb r0, [r5, #7] - cmp r0, #0xff - ldreqh r0, [r5] - andeq r0, r0, #3 - cmpeq r0, #1 - bne _0233B00C - cmp sl, #0 - ble _0233AF90 - mov r0, r6 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, r4 - addeq r4, r0, #1 -_0233AF90: - cmp r7, #0 - ble _0233AFB4 - mov r0, sl - sub r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - addeq r4, r4, #1 -_0233AFB4: - cmp sl, #0x36 - bge _0233AFD8 - mov r1, r7 - add r0, sl, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - addeq r4, r4, #1 -_0233AFD8: - cmp sl, #0x1e - bge _0233AFFC - mov r0, sl - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - addeq r4, r4, #1 -_0233AFFC: - cmp r4, #3 - ldrgeh r0, [r5] - orrge r0, r0, #8 - strgeh r0, [r5] -_0233B00C: - add r7, r7, #1 -_0233B010: - cmp r7, r8 - blt _0233AF30 - add sl, sl, #1 -_0233B01C: - cmp sl, sb - blt _0233AF24 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end FlagHallwayJunctions - - arm_func_start GenerateStandardFloor -GenerateStandardFloor: ; 0x0233B028 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r5, r1 - mov r6, r0 - mov r4, r2 - add r0, sp, #0x44 - add r1, sp, #8 - mov r2, r6 - mov r3, r5 - bl GetGridPositions - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl InitDungeonGrid - ldrsb r3, [r4, #1] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl AssignRooms - add r1, sp, #8 - str r1, [sp] - ldrb r3, [r4, #0xd] - add r0, sp, #0x80 - mov r1, r6 - str r3, [sp, #4] - mov r2, r5 - add r3, sp, #0x44 - bl CreateRoomsAndAnchors - mov r0, r6 - bl DungeonRandInt - mov r7, r0 - mov r0, r5 - bl DungeonRandInt - stmia sp, {r0, r4} - mov r3, r7 - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl AssignGridCellConnections - add r1, sp, #8 - str r1, [sp] - mov r0, #0 - str r0, [sp, #4] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - add r3, sp, #0x44 - bl CreateGridCellConnections - add r1, sp, #8 - str r1, [sp] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - add r3, sp, #0x44 - bl EnsureConnectedGrid - ldrb r3, [r4, #9] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateMazeRoom - ldr r3, _0233B18C ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0xc] - mov r1, r6 - mov r2, r5 - bl GenerateKecleonShop - ldr r3, _0233B18C ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0x10] - mov r1, r6 - mov r2, r5 - bl GenerateMonsterHouse - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateExtraHallways - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateRoomImperfections - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateSecondaryStructures - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0233B18C: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateStandardFloor - - arm_func_start GenerateOuterRingFloor -GenerateOuterRingFloor: ; 0x0233B190 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2f4 - sub sp, sp, #0x1800 - mov r1, #5 - mov r2, #0x1c - add r3, r2, #0x33 - add r3, r3, r3, lsr #31 - mov r8, r3, asr #1 - mov fp, #0x33 - mov sl, #0x38 - mov r7, #2 - mov r6, #7 - mov r5, #0x10 - mov r3, #0x1e - str r2, [sp, #0x64] - add r4, r1, #0x1c - str r0, [sp, #8] - add r0, r4, r4, lsr #31 - mov sb, r0, asr #1 - mov r0, #0 - mov r4, #0x19 - str r0, [sp, #0x58] - str r1, [sp, #0x5c] - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - str fp, [sp, #0x6c] - str sl, [sp, #0x70] - str sb, [sp, #0x60] - str r8, [sp, #0x68] - str r7, [sp, #0x1c] - str r6, [sp, #0x20] - str r5, [sp, #0x24] - str r4, [sp, #0x28] - str r3, [sp, #0x2c] - bl InitDungeonGrid - mov r3, #0 - ldr r0, _0233B614 ; =0x000001C2 - add r1, sp, #0x94 - mov r4, r3 -_0233B230: - mla r2, r3, r0, r1 - strb r4, [r2, #0xa] - add r3, r3, #1 - strb r4, [r2, #0x64] - cmp r3, #6 - blt _0233B230 - add r2, sp, #0x94 - mov r1, #0 - mov r0, #0x1e -_0233B254: - mla r3, r4, r0, r2 - strb r1, [r3, #0xa] - add r4, r4, #1 - strb r1, [r3, #0x8d4] - cmp r4, #4 - blt _0233B254 - mov r7, #1 - ldr r1, _0233B614 ; =0x000001C2 - mov r3, r7 - mov r5, r7 - add r4, sp, #0x94 - mov r0, #0x1e -_0233B284: - mla r6, r7, r1, r4 - mov r8, r5 -_0233B28C: - mla r2, r8, r0, r6 - add r8, r8, #1 - strb r3, [r2, #0xa] - cmp r8, #3 - blt _0233B28C - add r7, r7, #1 - cmp r7, #5 - blt _0233B284 - mov sl, #0 - str sl, [sp, #0xc] -_0233B2B4: - add r1, sp, #0x94 - mov r0, #0x1e - mla r7, sl, r0, r1 - add r0, sp, #0x1c - add r0, r0, sl, lsl #2 - mov sb, #0 - str r0, [sp, #0x10] -_0233B2D0: - ldr r0, _0233B614 ; =0x000001C2 - mla r0, sb, r0, r7 - ldrb r0, [r0, #0xa] - cmp r0, #0 - add r0, sp, #0x58 - add r1, r0, sb, lsl #2 - beq _0233B3F8 - ldr r8, [r0, sb, lsl #2] - add r0, sp, #0x1c - ldr r1, [r1, #4] - ldr r4, [r0, sl, lsl #2] - sub r0, r1, r8 - sub r5, r0, #3 - ldr r0, [sp, #0x10] - ldr r1, [r0, #4] - mov r0, #5 - sub r1, r1, r4 - sub r6, r1, #3 - mov r1, r5 - bl DungeonRandRange - mov fp, r0 - mov r0, #4 - mov r1, r6 - bl DungeonRandRange - str r0, [sp, #0x14] - sub r0, r5, fp - bl DungeonRandInt - add r1, r8, #2 - add r8, r1, r0 - ldr r0, [sp, #0x14] - sub r0, r6, r0 - bl DungeonRandInt - add r1, r4, #2 - add r4, r1, r0 - ldr r0, [sp, #0x14] - add fp, r8, fp - add r5, r4, r0 - ldr r0, _0233B614 ; =0x000001C2 - mul r0, sb, r0 - strh r8, [r7, r0] - add r0, r7, r0 - strh fp, [r0, #4] - strh r4, [r0, #2] - strh r5, [r0, #6] - ldr r0, [sp, #0xc] - and r0, r0, #0xff - str r0, [sp, #0x18] - b _0233B3E0 -_0233B390: - mov r6, r4 - b _0233B3D4 -_0233B398: - mov r0, r8 - mov r1, r6 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r6 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r8 - bl GetTileSafe - ldr r1, [sp, #0x18] - add r6, r6, #1 - strb r1, [r0, #7] -_0233B3D4: - cmp r6, r5 - blt _0233B398 - add r8, r8, #1 -_0233B3E0: - cmp r8, fp - blt _0233B390 - ldr r0, [sp, #0xc] - add r0, r0, #1 - str r0, [sp, #0xc] - b _0233B4A0 -_0233B3F8: - ldr r2, [r0, sb, lsl #2] - ldr r1, [r1, #4] - add r0, r2, #1 - sub r1, r1, r2 - add r2, sp, #0x1c - ldr r3, [r2, sl, lsl #2] - ldr r2, [sp, #0x10] - sub r1, r1, #3 - ldr r2, [r2, #4] - add r1, r0, r1 - sub r2, r2, r3 - add r4, r3, #1 - sub r5, r2, #3 - bl DungeonRandRange - add r1, r4, r5 - mov r5, r0 - mov r0, r4 - bl DungeonRandRange - mov r4, r0 - ldr r0, _0233B614 ; =0x000001C2 - mul r0, sb, r0 - strh r5, [r7, r0] - add r1, r7, r0 - add r0, r5, #1 - strh r0, [r1, #4] - strh r4, [r1, #2] - add r0, r4, #1 - strh r0, [r1, #6] - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - mov r1, #0xff - strb r1, [r0, #7] -_0233B4A0: - add sb, sb, #1 - cmp sb, #6 - blt _0233B2D0 - add sl, sl, #1 - cmp sl, #4 - blt _0233B2B4 - mov r1, #1 - mov r0, #6 - strb r1, [sp, #0xaa] - strb r1, [sp, #0x26b] - strb r1, [sp, #0x26c] - strb r1, [sp, #0x42d] - strb r1, [sp, #0x42e] - strb r1, [sp, #0x5ef] - strb r1, [sp, #0x5f0] - strb r1, [sp, #0x7b1] - strb r1, [sp, #0x7b2] - strb r1, [sp, #0x973] - strb r1, [sp, #0xa8] - strb r1, [sp, #0xc5] - strb r1, [sp, #0xc6] - strb r1, [sp, #0xe3] - strb r1, [sp, #0xe4] - strb r1, [sp, #0x101] - strb r1, [sp, #0x104] - strb r1, [sp, #0x2c5] - strb r1, [sp, #0x2c6] - strb r1, [sp, #0x487] - strb r1, [sp, #0x488] - strb r1, [sp, #0x649] - strb r1, [sp, #0x64a] - strb r1, [sp, #0x80b] - strb r1, [sp, #0x80c] - strb r1, [sp, #0x9cd] - strb r1, [sp, #0x972] - strb r1, [sp, #0x98f] - strb r1, [sp, #0x990] - strb r1, [sp, #0x9ad] - strb r1, [sp, #0x9ae] - strb r1, [sp, #0x9cb] - bl DungeonRandInt - mov r4, r0 - mov r0, #4 - bl DungeonRandInt - mov r3, r4 - str r0, [sp] - ldr r4, [sp, #8] - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - str r4, [sp, #4] - bl AssignGridCellConnections - add r1, sp, #0x1c - str r1, [sp] - mov r0, #0 - str r0, [sp, #4] - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - add r3, sp, #0x58 - bl CreateGridCellConnections - add r1, sp, #0x1c - str r1, [sp] - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - add r3, sp, #0x58 - bl EnsureConnectedGrid - ldr r1, _0233B618 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x94 - ldrsh r3, [r1, #0xc] - mov r1, #6 - mov r2, #4 - bl GenerateKecleonShop - ldr r1, _0233B618 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x94 - ldrsh r3, [r1, #0x10] - mov r1, #6 - mov r2, #4 - bl GenerateMonsterHouse - ldr r0, [sp, #8] - mov r1, #6 - ldrb r3, [r0, #0x13] - add r0, sp, #0x94 - mov r2, #4 - bl GenerateExtraHallways - add r0, sp, #0x94 - mov r1, #6 - mov r2, #4 - bl GenerateRoomImperfections - add sp, sp, #0x2f4 - add sp, sp, #0x1800 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233B614: .word 0x000001C2 -_0233B618: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateOuterRingFloor - - arm_func_start GenerateCrossroadsFloor -GenerateCrossroadsFloor: ; 0x0233B61C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2f8 - sub sp, sp, #0x1800 - mov r1, #0 - mov r2, #0xb - str r0, [sp, #8] - mov fp, #0x16 - mov sl, #0x21 - mov sb, #0x2c - mov r8, #0x38 - mov r7, #1 - mov r6, #9 - mov r5, #0x10 - mov r4, #0x17 - mov r3, #0x1f - str r1, [sp, #0x5c] - str r2, [sp, #0x60] - add r0, sp, #0x98 - mov r1, #5 - mov r2, #4 - str fp, [sp, #0x64] - str sl, [sp, #0x68] - str sb, [sp, #0x6c] - str r8, [sp, #0x70] - str r7, [sp, #0x20] - str r6, [sp, #0x24] - str r5, [sp, #0x28] - str r4, [sp, #0x2c] - str r3, [sp, #0x30] - bl InitDungeonGrid - ldr r0, _0233BA74 ; =0x000001C2 - mov r4, #0 - add r2, sp, #0x98 - mov r1, r7 -_0233B6A4: - mla r3, r4, r0, r2 - strb r1, [r3, #0xa] - add r4, r4, #1 - strb r1, [r3, #0x64] - cmp r4, #5 - blt _0233B6A4 - mov r3, #0 - add r1, sp, #0x98 - mov r7, #1 - mov r0, #0x1e -_0233B6CC: - mla r2, r3, r0, r1 - strb r7, [r2, #0xa] - add r3, r3, #1 - strb r7, [r2, #0x712] - cmp r3, #4 - blt _0233B6CC - ldr r1, _0233BA74 ; =0x000001C2 - mov r4, #0 - mov r5, #1 - add r3, sp, #0x98 - mov r0, #0x1e -_0233B6F8: - mla r6, r7, r1, r3 - mov r8, r5 -_0233B700: - mla r2, r8, r0, r6 - add r8, r8, #1 - strb r4, [r2, #0xa] - cmp r8, #3 - blt _0233B700 - add r7, r7, #1 - cmp r7, #4 - blt _0233B6F8 - mov r0, #1 - mov sl, r4 - strb r0, [sp, #0xa0] - strb r0, [sp, #0x7a8] - strb r0, [sp, #0xfa] - strb r0, [sp, #0x802] -_0233B738: - add r1, sp, #0x98 - mov r0, #0x1e - mla r7, sl, r0, r1 - add r0, sp, #0x20 - add r0, r0, sl, lsl #2 - mov sb, #0 - str r0, [sp, #0x10] -_0233B754: - ldr r0, _0233BA74 ; =0x000001C2 - mla r1, sb, r0, r7 - ldrb r0, [r1, #8] - cmp r0, #0 - bne _0233B938 - ldrb r0, [r1, #0xa] - cmp r0, #0 - add r0, sp, #0x5c - add r1, r0, sb, lsl #2 - beq _0233B890 - ldr r8, [r0, sb, lsl #2] - add r0, sp, #0x20 - ldr r1, [r1, #4] - ldr r5, [r0, sl, lsl #2] - sub r0, r1, r8 - sub r6, r0, #3 - ldr r0, [sp, #0x10] - ldr r1, [r0, #4] - mov r0, #5 - sub r1, r1, r5 - sub fp, r1, #3 - mov r1, r6 - bl DungeonRandRange - str r0, [sp, #0x14] - mov r0, #4 - mov r1, fp - bl DungeonRandRange - str r0, [sp, #0x18] - ldr r0, [sp, #0x14] - sub r0, r6, r0 - bl DungeonRandInt - add r1, r8, #2 - add r8, r1, r0 - ldr r0, [sp, #0x18] - sub r0, fp, r0 - bl DungeonRandInt - add r1, r5, #2 - add r5, r1, r0 - ldr r0, [sp, #0x14] - add r0, r8, r0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x18] - add fp, r5, r0 - ldr r0, _0233BA74 ; =0x000001C2 - mul r0, sb, r0 - strh r8, [r7, r0] - add r1, r7, r0 - ldr r0, [sp, #0xc] - strh r0, [r1, #4] - strh r5, [r1, #2] - and r0, r4, #0xff - strh fp, [r1, #6] - str r0, [sp, #0x1c] - b _0233B87C -_0233B82C: - mov r6, r5 - b _0233B870 -_0233B834: - mov r0, r8 - mov r1, r6 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r6 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r8 - bl GetTileSafe - ldr r1, [sp, #0x1c] - add r6, r6, #1 - strb r1, [r0, #7] -_0233B870: - cmp r6, fp - blt _0233B834 - add r8, r8, #1 -_0233B87C: - ldr r0, [sp, #0xc] - cmp r8, r0 - blt _0233B82C - add r4, r4, #1 - b _0233B938 -_0233B890: - ldr r2, [r0, sb, lsl #2] - ldr r1, [r1, #4] - add r0, r2, #1 - sub r1, r1, r2 - add r2, sp, #0x20 - ldr r3, [r2, sl, lsl #2] - ldr r2, [sp, #0x10] - sub r1, r1, #3 - ldr r2, [r2, #4] - add r1, r0, r1 - sub r2, r2, r3 - add r5, r3, #1 - sub r6, r2, #3 - bl DungeonRandRange - add r1, r5, r6 - mov r6, r0 - mov r0, r5 - bl DungeonRandRange - mov r5, r0 - ldr r0, _0233BA74 ; =0x000001C2 - mul r0, sb, r0 - strh r6, [r7, r0] - add r1, r7, r0 - add r0, r6, #1 - strh r0, [r1, #4] - strh r5, [r1, #2] - add r0, r5, #1 - strh r0, [r1, #6] - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r5 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r6 - bl GetTileSafe - mov r1, #0xff - strb r1, [r0, #7] -_0233B938: - add sb, sb, #1 - cmp sb, #5 - blt _0233B754 - add sl, sl, #1 - cmp sl, #4 - blt _0233B738 - mov r7, #1 - ldr r2, _0233BA74 ; =0x000001C2 - mov r0, r7 - mov r5, #0 - add r4, sp, #0x98 - mov r1, #0x1e -_0233B968: - mla r6, r7, r2, r4 - mov r8, r5 -_0233B970: - mla r3, r8, r1, r6 - strb r0, [r3, #0x14] - add r8, r8, #1 - strb r0, [r3, #0x31] - cmp r8, #3 - blt _0233B970 - add r7, r7, #1 - cmp r7, #4 - blt _0233B968 - ldr r1, _0233BA74 ; =0x000001C2 - mov r4, #1 - mov r6, #0 - add r5, sp, #0x98 - mov r2, #0x1e -_0233B9A8: - mla r7, r0, r2, r5 - mov r8, r6 -_0233B9B0: - mla r3, r8, r1, r7 - strb r4, [r3, #0x16] - add r8, r8, #1 - strb r4, [r3, #0x1d7] - cmp r8, #4 - blt _0233B9B0 - add r0, r0, #1 - cmp r0, #3 - blt _0233B9A8 - add r1, sp, #0x20 - str r1, [sp] - add r0, sp, #0x98 - add r3, sp, #0x5c - mov r1, #5 - mov r2, #4 - str r4, [sp, #4] - bl CreateGridCellConnections - add r4, sp, #0x20 - add r0, sp, #0x98 - add r3, sp, #0x5c - mov r1, #5 - mov r2, #4 - str r4, [sp] - bl EnsureConnectedGrid - ldr r1, _0233BA78 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x98 - ldrsh r3, [r1, #0xc] - mov r1, #5 - mov r2, #4 - bl GenerateKecleonShop - ldr r1, _0233BA78 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x98 - ldrsh r3, [r1, #0x10] - mov r1, #5 - mov r2, #4 - bl GenerateMonsterHouse - ldr r0, [sp, #8] - mov r1, #5 - ldrb r3, [r0, #0x13] - add r0, sp, #0x98 - mov r2, #4 - bl GenerateExtraHallways - add r0, sp, #0x98 - mov r1, #5 - mov r2, #4 - bl GenerateRoomImperfections - add sp, sp, #0x2f8 - add sp, sp, #0x1800 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233BA74: .word 0x000001C2 -_0233BA78: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateCrossroadsFloor - - arm_func_start GenerateLineFloor -GenerateLineFloor: ; 0x0233BA7C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r7, #0 - mov r6, #0xb - mov lr, #0x16 - mov ip, #0x21 - mov r5, #0x2c - mov r3, #0x38 - mov r2, #4 - mov r1, #0xf - mov r4, r0 - str r2, [sp, #8] - str r1, [sp, #0xc] - add r0, sp, #0x80 - str r7, [sp, #0x44] - str r6, [sp, #0x48] - str lr, [sp, #0x4c] - str ip, [sp, #0x50] - str r5, [sp, #0x54] - str r3, [sp, #0x58] - mov r1, #5 - mov r2, #1 - bl InitDungeonGrid - ldrsb r3, [r4, #1] - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - bl AssignRooms - add r1, sp, #8 - str r1, [sp] - ldrb r2, [r4, #0xd] - add r0, sp, #0x80 - add r3, sp, #0x44 - str r2, [sp, #4] - mov r1, #5 - mov r2, #1 - bl CreateRoomsAndAnchors - mov r0, #5 - bl DungeonRandInt - mov r5, r0 - mov r0, #1 - bl DungeonRandInt - stmia sp, {r0, r4} - mov r3, r5 - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - bl AssignGridCellConnections - add r0, sp, #8 - mov r2, #1 - stmia sp, {r0, r2} - add r0, sp, #0x80 - mov r1, #5 - add r3, sp, #0x44 - bl CreateGridCellConnections - add r1, sp, #8 - str r1, [sp] - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - add r3, sp, #0x44 - bl EnsureConnectedGrid - ldr r3, _0233BBD8 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0xc] - mov r1, #5 - mov r2, #1 - bl GenerateKecleonShop - ldr r1, _0233BBD8 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r1, #0x10] - mov r1, #5 - mov r2, #1 - bl GenerateMonsterHouse - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - bl GenerateExtraHallways - add r0, sp, #0x80 - mov r1, #5 - mov r2, #1 - bl GenerateRoomImperfections - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0233BBD8: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateLineFloor - - arm_func_start GenerateCrossFloor -GenerateCrossFloor: ; 0x0233BBDC - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r1, #3 - mov r8, #0xb - mov r4, r0 - mov r7, #0x16 - mov r6, #0x21 - mov r5, #0x2c - mov lr, #2 - mov ip, #0x14 - mov r3, #0x1e - add r0, sp, #0x80 - mov r2, r1 - str r8, [sp, #0x44] - str r7, [sp, #0x48] - str r6, [sp, #0x4c] - str r5, [sp, #0x50] - str lr, [sp, #8] - str r8, [sp, #0xc] - str ip, [sp, #0x10] - str r3, [sp, #0x14] - bl InitDungeonGrid - mov r5, #0 - ldr r1, _0233BD6C ; =0x000001C2 - mov r3, #1 - mov lr, r5 - add ip, sp, #0x80 - mov r0, #0x1e -_0233BC50: - mla r7, r5, r1, ip - mov r6, lr -_0233BC58: - mla r2, r6, r0, r7 - add r6, r6, #1 - strb r3, [r2, #0xa] - cmp r6, #3 - blt _0233BC58 - add r5, r5, #1 - cmp r5, #3 - blt _0233BC50 - add r0, sp, #8 - strb r3, [sp, #0x88] - strb r3, [sp, #0x40c] - mov r1, #3 - strb r3, [sp, #0xc4] - strb r3, [sp, #0x448] - str r0, [sp] - ldrb ip, [r4, #0xd] - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp, #4] - bl CreateRoomsAndAnchors - mov ip, #1 - mov r1, #3 - add r0, sp, #8 - strb ip, [sp, #0xb4] - strb ip, [sp, #0x275] - strb ip, [sp, #0x276] - strb ip, [sp, #0x437] - strb ip, [sp, #0x256] - strb ip, [sp, #0x273] - strb ip, [sp, #0x274] - strb ip, [sp, #0x291] - str r0, [sp] - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp, #4] - bl CreateGridCellConnections - mov r1, #3 - add ip, sp, #8 - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp] - bl EnsureConnectedGrid - ldr r1, _0233BD70 ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r1, #0xc] - mov r1, #3 - mov r2, r1 - bl GenerateKecleonShop - ldr r3, _0233BD70 ; =FLOOR_GENERATION_STATUS - mov r1, #3 - ldrsh r3, [r3, #0x10] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateMonsterHouse - mov r1, #3 - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateExtraHallways - mov r1, #3 - add r0, sp, #0x80 - mov r2, r1 - bl GenerateRoomImperfections - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0233BD6C: .word 0x000001C2 -_0233BD70: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateCrossFloor - - arm_func_start GenerateBeetleFloor -GenerateBeetleFloor: ; 0x0233BD74 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r1, #3 - mov r4, r0 - mov sb, #5 - mov r8, #0xf - mov r7, #0x23 - mov r6, #0x32 - mov r5, #2 - mov lr, #0xb - mov ip, #0x14 - mov r3, #0x1e - add r0, sp, #0x80 - mov r2, r1 - str sb, [sp, #0x44] - str r8, [sp, #0x48] - str r7, [sp, #0x4c] - str r6, [sp, #0x50] - str r5, [sp, #8] - str lr, [sp, #0xc] - str ip, [sp, #0x10] - str r3, [sp, #0x14] - bl InitDungeonGrid - mov r5, #0 - ldr r1, _0233BF28 ; =0x000001C2 - mov r3, #1 - mov lr, r5 - add ip, sp, #0x80 - mov r0, #0x1e -_0233BDEC: - mla r7, r5, r1, ip - mov r6, lr -_0233BDF4: - mla r2, r6, r0, r7 - add r6, r6, #1 - strb r3, [r2, #0xa] - cmp r6, #3 - blt _0233BDF4 - add r5, r5, #1 - cmp r5, #3 - blt _0233BDEC - add r0, sp, #8 - str r0, [sp] - ldrb ip, [r4, #0xd] - mov r1, #3 - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp, #4] - bl CreateRoomsAndAnchors - mov r3, #0 - add r0, sp, #0x80 - mov ip, #1 - mov r1, #0x1e -_0233BE48: - mla r2, r3, r1, r0 - strb ip, [r2, #0x16] - strb ip, [r2, #0x1d7] - strb ip, [r2, #0x1d8] - add r3, r3, #1 - strb ip, [r2, #0x399] - cmp r3, #3 - blt _0233BE48 - add r2, sp, #8 - str r2, [sp] - mov r1, #3 - add r3, sp, #0x44 - mov r2, r1 - str ip, [sp, #4] - bl CreateGridCellConnections - mov r0, #1 - add r3, sp, #0x80 - mov r2, r0 - mov r1, #0 - bl MergeRoomsVertically - add r3, sp, #0x80 - mov r0, #1 - mov r1, #0 - mov r2, #2 - bl MergeRoomsVertically - add r1, sp, #8 - str r1, [sp] - mov r1, #3 - add r0, sp, #0x80 - mov r2, r1 - add r3, sp, #0x44 - bl EnsureConnectedGrid - ldr r3, _0233BF2C ; =FLOOR_GENERATION_STATUS - mov r1, #3 - ldrsh r3, [r3, #0xc] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateKecleonShop - ldr r3, _0233BF2C ; =FLOOR_GENERATION_STATUS - mov r1, #3 - ldrsh r3, [r3, #0x10] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateMonsterHouse - mov r1, #3 - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r2, r1 - bl GenerateExtraHallways - mov r1, #3 - add r0, sp, #0x80 - mov r2, r1 - bl GenerateRoomImperfections - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0233BF28: .word 0x000001C2 -_0233BF2C: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateBeetleFloor - - arm_func_start MergeRoomsVertically -MergeRoomsVertically: ; 0x0233BF30 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - mov r5, #0x1e - add r4, r5, #0x1a4 - add r2, r1, r2 - mul r7, r0, r4 - mov sl, r3 - mul r8, r2, r5 - add fp, sl, r7 - ldrsh r0, [fp, r8] - mul r6, r1, r5 - str r0, [sp] - ldrsh r0, [fp, r6] - ldr r1, [sp] - cmp r0, r1 - add r1, sl, #4 - add r1, r1, r7 - strlt r0, [sp] - str r1, [sp, #0x14] - ldrsh r2, [r1, r8] - ldrsh sb, [r1, r6] - add r1, sl, #2 - add r1, r1, r7 - str r1, [sp, #0x10] - ldrsh r1, [r1, r6] - cmp sb, r2 - movle sb, r2 - str r1, [sp, #8] - add r1, sl, #6 - add r1, r1, r7 - str r1, [sp, #4] - ldr r2, [sp, #4] - ldr r1, [sp, #8] - ldrsh r2, [r2, r8] - str r2, [sp, #0xc] - bl GetTile - ldrb r0, [r0, #7] - ldr r5, [sp] - and r0, r0, #0xff - str r0, [sp, #0x18] - b _0233C01C -_0233BFD4: - ldr r4, [sp, #8] - b _0233C00C -_0233BFDC: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x18] - strb r1, [r0, #7] -_0233C00C: - ldr r0, [sp, #0xc] - cmp r4, r0 - blt _0233BFDC - add r5, r5, #1 -_0233C01C: - cmp r5, sb - blt _0233BFD4 - ldr r0, [sp] - add r3, sl, #0x12 - strh r0, [fp, r6] - ldr r0, [sp, #0x14] - add r2, sl, r7 - strh sb, [r0, r6] - ldr r1, [sp, #8] - ldr r0, [sp, #0x10] - strh r1, [r0, r6] - ldr r1, [sp, #0xc] - ldr r0, [sp, #4] - strh r1, [r0, r6] - add r0, r3, r7 - mov r3, #1 - strb r3, [r0, r8] - strb r3, [r0, r6] - add r0, r2, r8 - mov r1, #0 - strb r1, [r0, #0xb] - strb r3, [r0, #0x11] - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end MergeRoomsVertically - - arm_func_start GenerateOuterRoomsFloor -GenerateOuterRoomsFloor: ; 0x0233C07C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xae0 - sub sp, sp, #0x1000 - mov r5, r1 - mov r6, r0 - mov r4, r2 - add r0, sp, #0x44 - add r1, sp, #8 - mov r2, r6 - mov r3, r5 - bl GetGridPositions - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl InitDungeonGrid - mov sb, #0 - mov r3, #1 - mov r8, sb - add r7, sp, #0x80 - mov r0, #0x1e - ldr r1, _0233C308 ; =0x000001C2 - b _0233C0F8 -_0233C0D4: - mla fp, sb, r1, r7 - mov sl, r8 - b _0233C0EC -_0233C0E0: - mla r2, sl, r0, fp - strb r3, [r2, #0xa] - add sl, sl, #1 -_0233C0EC: - cmp sl, r5 - blt _0233C0E0 - add sb, sb, #1 -_0233C0F8: - cmp sb, r6 - blt _0233C0D4 - mov fp, #1 - sub r3, r5, #1 - sub r2, r6, #1 - mov r8, fp - mov lr, fp - add sb, sp, #0x80 - mov r0, #0x1e - ldr r1, _0233C308 ; =0x000001C2 - b _0233C148 -_0233C124: - mla sl, fp, r1, sb - mov ip, lr - b _0233C13C -_0233C130: - mla r7, ip, r0, sl - strb r8, [r7, #8] - add ip, ip, #1 -_0233C13C: - cmp ip, r3 - blt _0233C130 - add fp, fp, #1 -_0233C148: - cmp fp, r2 - blt _0233C124 - add r1, sp, #8 - str r1, [sp] - ldrb r7, [r4, #0xd] - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r1, r6 - mov r2, r5 - str r7, [sp, #4] - bl CreateRoomsAndAnchors - mov r2, #1 - add r3, sp, #0x80 - sub r1, r5, #1 - mov r0, #0x1e - mla r7, r1, r0, r3 - mov r8, #0 - sub r1, r6, #2 - sub r0, r6, #1 - mov fp, r2 - ldr sb, _0233C308 ; =0x000001C2 - b _0233C1D4 -_0233C1A0: - cmp r8, #0 - mulne ip, r8, sb - addne sl, r3, ip - strneb r2, [sl, #0x16] - addne sl, r7, ip - strneb r2, [sl, #0x16] - cmp r8, r1 - mullt ip, r8, sb - addlt sl, r3, ip - strltb fp, [sl, #0x1d7] - addlt sl, r7, ip - strltb fp, [sl, #0x1d7] - add r8, r8, #1 -_0233C1D4: - cmp r8, r0 - blt _0233C1A0 - ldr r2, _0233C308 ; =0x000001C2 - add r1, sp, #0x80 - mla r2, r0, r2, r1 - mov r0, #1 - mov ip, #0x1e - mov r3, #0 - sub sl, r5, #2 - sub lr, r5, #1 - mov r8, r0 - mov fp, ip - b _0233C23C -_0233C208: - cmp r3, #0 - mulne sb, r3, ip - addne r7, r1, sb - strneb r0, [r7, #0x13] - addne r7, r2, sb - strneb r0, [r7, #0x13] - cmp r3, sl - mullt sb, r3, fp - addlt r7, r1, sb - strltb r8, [r7, #0x14] - addlt r7, r2, sb - strltb r8, [r7, #0x14] - add r3, r3, #1 -_0233C23C: - cmp r3, lr - blt _0233C208 - add r7, sp, #8 - str r7, [sp] - mov r7, #0 - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r1, r6 - mov r2, r5 - str r7, [sp, #4] - bl CreateGridCellConnections - add r7, sp, #8 - add r0, sp, #0x80 - add r3, sp, #0x44 - mov r1, r6 - mov r2, r5 - str r7, [sp] - bl EnsureConnectedGrid - ldrb r3, [r4, #9] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateMazeRoom - ldr r3, _0233C30C ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0xc] - mov r1, r6 - mov r2, r5 - bl GenerateKecleonShop - ldr r3, _0233C30C ; =FLOOR_GENERATION_STATUS - add r0, sp, #0x80 - ldrsh r3, [r3, #0x10] - mov r1, r6 - mov r2, r5 - bl GenerateMonsterHouse - ldrb r3, [r4, #0x13] - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateExtraHallways - add r0, sp, #0x80 - mov r1, r6 - mov r2, r5 - bl GenerateRoomImperfections - mov r1, r6 - mov r2, r5 - add r0, sp, #0x80 - bl GenerateSecondaryStructures - add sp, sp, #0xae0 - add sp, sp, #0x1000 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233C308: .word 0x000001C2 -_0233C30C: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateOuterRoomsFloor - - arm_func_start IsNotFullFloorFixedRoom -IsNotFullFloorFixedRoom: ; 0x0233C310 - cmp r0, #0 - ble _0233C324 - cmp r0, #0xa5 - movlt r0, #0 - bxlt lr -_0233C324: - mov r0, #1 - bx lr - arm_func_end IsNotFullFloorFixedRoom - - arm_func_start GenerateFixedRoom -GenerateFixedRoom: ; 0x0233C32C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2f8 - sub sp, sp, #0x1800 - ldr r2, _0233C764 ; =DUNGEON_PTR - str r1, [sp, #0x10] - ldr r2, [r2] - mov sl, r0 - add r1, r2, #0x12000 -#ifdef JAPAN - ldr r1, [r1, #0xa00] -#else - ldr r1, [r1, #0xaa4] -#endif - ldr r1, [r1, sl, lsl #2] - ldrh r4, [r1] - ldrh r5, [r1, #2] - cmp r4, #0 - cmpne r5, #0 - bne _0233C374 - bl GenerateOneRoomMonsterHouseFloor - mov r0, #0 - b _0233C758 -_0233C374: - bl IsNotFullFloorFixedRoom - cmp r0, #0 - bne _0233C590 - ldr r0, _0233C764 ; =DUNGEON_PTR -#ifdef JAPAN - ldr r2, _0233C768 ; =HIDDEN_STAIRS_SPAWN_BLOCKED - ldr r4, [r0] - ldr r1, _0233C76C ; =FLOOR_GENERATION_STATUS - add r0, r4, #0x12000 - ldr r3, [r0, #0xa00] - add r4, r4, #0xcc00 - ldr r5, [r3, sl, lsl #2] - mov r3, #0 - ldrh r7, [r5] - ldrh r6, [r5, #2] - mov sb, #5 - add fp, r7, #5 - strh r7, [r4, #0x90] - strh r6, [r4, #0x92] - ldr r0, [r0, #0xa00] - ldr r0, [r0, sl, lsl #2] - add r0, r0, #6 - str r0, [r2, #4] - add r0, r6, #5 - strh r3, [r1, #0xa] - str r0, [sp, #0x1c] -#else - ldr r4, _0233C768 ; =HIDDEN_STAIRS_SPAWN_BLOCKED - ldr r0, [r0] - ldr r3, _0233C76C ; =FLOOR_GENERATION_STATUS - add r2, r0, #0x12000 - ldr r5, [r2, #0xaa4] - add r1, r0, #0xcd00 - ldr r6, [r5, sl, lsl #2] - add r0, r0, #0xcc00 - ldrh r7, [r6] - ldrh r6, [r6, #2] - mov r5, #0 - mov sb, #5 - strh r7, [r1, #0x34] - strh r6, [r1, #0x36] - ldr r1, [r2, #0xaa4] - add fp, r6, #5 - ldr r1, [r1, sl, lsl #2] - str r0, [sp, #0x1c] - add r1, r1, #6 - str r1, [r4, #4] - strh r5, [r3, #0xa] - add r4, r7, #5 -#endif - b _0233C450 -_0233C3E0: - mov r0, sb, lsl #0x10 - mov r8, #5 - mov r5, r0, asr #0x10 - b _0233C444 -_0233C3F0: - bl GetNextFixedRoomAction - str r0, [sp, #0x18] - mov r0, r8 - mov r1, sb - bl GetTileSafe - ldrh ip, [r0] - ldr r1, [sp, #0x18] - mov r2, r8 - orr ip, ip, #0x100 - strh ip, [r0] - mov ip, #0 - strb ip, [r0, #6] - mov ip, #1 - mov r3, sb - str ip, [sp] - bl PlaceFixedRoomTile - cmp r0, #0 -#ifdef JAPAN - strneh r8, [r4, #0x40] - strneh r5, [r4, #0x42] -#else - ldrne r0, [sp, #0x1c] - strneh r8, [r0, #0xe4] - strneh r5, [r0, #0xe6] -#endif - add r8, r8, #1 -_0233C444: -#ifdef JAPAN - cmp r8, fp -#else - cmp r8, r4 -#endif - blt _0233C3F0 - add sb, sb, #1 -_0233C450: -#ifdef JAPAN - ldr r0, [sp, #0x1c] - cmp sb, r0 -#else - cmp sb, fp -#endif - blt _0233C3E0 - mov r8, #0 - add r4, r6, #5 - ldr sb, _0233C76C ; =FLOOR_GENERATION_STATUS - add r5, r7, #5 - mov r6, r8 -_0233C46C: - mov r7, r6 -_0233C470: - cmp r7, #5 - blt _0233C490 - cmp r7, r5 - bge _0233C490 - cmp r8, #5 - blt _0233C490 - cmp r8, r4 - blt _0233C4D4 -_0233C490: - mov r0, r7 - mov r1, r8 - bl GetTileSafe - ldrh r1, [r0] - orr r1, r1, #0x10 - strh r1, [r0] - ldrb r1, [sb, #4] - cmp r1, #0 - ldrh r1, [r0] - biceq r1, r1, #3 - streqh r1, [r0] - beq _0233C4D4 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #3 - strh r1, [r0] -_0233C4D4: - add r7, r7, #1 - cmp r7, #0x38 - blt _0233C470 - add r8, r8, #1 - cmp r8, #0x20 - blt _0233C46C - cmp sl, #4 - bne _0233C534 - mov r5, #5 - mov r4, #2 -_0233C4FC: - mov r6, r4 -_0233C500: - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - add r6, r6, #1 - cmp r6, #5 - orr r1, r1, #0x10 - bic r1, r1, #3 - strh r1, [r0] - blt _0233C500 - add r5, r5, #1 - cmp r5, #0x10 - ble _0233C4FC -_0233C534: - bl IsCurrentTilesetBackground - cmp r0, #0 - beq _0233C584 - mov r6, #0 - mov r4, r6 -_0233C548: - mov r5, r4 -_0233C54C: - mov r0, r5 - mov r1, r6 - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - tst r1, #3 - ldreqh r1, [r0] - orreq r1, r1, #0x10 - streqh r1, [r0] - cmp r5, #0x38 - blt _0233C54C - add r6, r6, #1 - cmp r6, #0x20 - blt _0233C548 -_0233C584: - bl FinalizeJunctions - mov r0, #1 - b _0233C758 -_0233C590: - add r1, r4, #4 - mov r0, #0x38 - bl _s32_div_f - mov r6, r0 - cmp r6, #2 - add r1, r5, #4 - mov r0, #0x20 - movlt r6, #1 - bl _s32_div_f - mov r7, r0 - cmp r7, #2 - movlt r7, #1 - mov r1, #0 - str r1, [sp, #0x14] - add r0, sp, #0x20 - add r1, sp, #0x5c - mov r2, r6 - mov r3, r7 - ldr r8, [sp, #0x14] - bl GetGridPositions - add r0, sp, #0x98 - mov r1, r6 - mov r2, r7 - bl InitDungeonGrid - ldr r3, [sp, #0x10] - add r0, sp, #0x98 - ldrsb r3, [r3, #1] - mov r1, r6 - mov r2, r7 - bl AssignRooms - mov sb, #0 - mov r3, #1 - mov lr, sb - add fp, sp, #0x98 - mov r0, #0x1e - ldr r1, _0233C770 ; =0x000001C2 - b _0233C648 -_0233C624: - mla ip, sb, r1, fp - mov r8, lr - b _0233C63C -_0233C630: - mla r2, r8, r0, ip - strb r3, [r2, #0x1b] - add r8, r8, #1 -_0233C63C: - cmp r8, r7 - blt _0233C630 - add sb, sb, #1 -_0233C648: - cmp sb, r6 - blt _0233C624 - mov fp, #0 - b _0233C69C -_0233C658: - mov r0, r6 - bl DungeonRandInt - mov sb, r0 - mov r0, r7 - bl DungeonRandInt - mov r8, r0 - ldr r1, _0233C770 ; =0x000001C2 - add r0, sp, #0x98 - mla r1, sb, r1, r0 - mov r0, #0x1e - mla r0, r8, r0, r1 - ldrb r1, [r0, #0xa] - mla r0, r6, r8, sb - str r0, [sp, #0x14] - cmp r1, #0 - bne _0233C6A4 - add fp, fp, #1 -_0233C69C: - cmp fp, #0x40 - blt _0233C658 -_0233C6A4: - add r1, sp, #0x5c - str r1, [sp] - ldr r1, [sp, #0x14] - add r0, sp, #0x98 - stmib sp, {r1, r4} - add r3, sp, #0x20 - mov r1, r6 - mov r2, r7 - str r5, [sp, #0xc] - bl ov29_0234217C - cmp r6, #1 - cmpeq r7, #1 - beq _0233C738 - ldr r4, [sp, #0x10] - str r8, [sp] - add r0, sp, #0x98 - mov r1, r6 - mov r2, r7 - mov r3, sb - str r4, [sp, #4] - bl AssignGridCellConnections - add r4, sp, #0x5c - str r4, [sp] - mov r4, #1 - add r0, sp, #0x98 - add r3, sp, #0x20 - mov r1, r6 - mov r2, r7 - str r4, [sp, #4] - bl CreateGridCellConnections - add r0, sp, #0x5c - str r0, [sp] - mov r1, r6 - add r0, sp, #0x98 - mov r2, r7 - add r3, sp, #0x20 - bl EnsureConnectedGrid -_0233C738: - ldr r0, _0233C770 ; =0x000001C2 - add r2, sp, #0x98 - mla r0, sb, r0, r2 - mov r1, #0x1e - mla r0, r8, r1, r0 - mov r1, sl - bl ov29_02342594 - mov r0, #0 -_0233C758: - add sp, sp, #0x2f8 - add sp, sp, #0x1800 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233C764: .word DUNGEON_PTR -_0233C768: .word HIDDEN_STAIRS_SPAWN_BLOCKED -_0233C76C: .word FLOOR_GENERATION_STATUS -_0233C770: .word 0x000001C2 - arm_func_end GenerateFixedRoom - - arm_func_start GenerateOneRoomMonsterHouseFloor -GenerateOneRoomMonsterHouseFloor: ; 0x0233C774 - stmdb sp!, {r4, r5, r6, lr} - sub sp, sp, #0xa60 - sub sp, sp, #0x1000 - mov r1, #1 - add r0, sp, #0 - mov r2, r1 - bl InitDungeonGrid - mov r5, #2 - mov r1, #1 - mov r0, #0 - mov r3, #0x36 - mov r2, #0x1e - strh r5, [sp] - strh r3, [sp, #4] - strh r5, [sp, #2] - strh r2, [sp, #6] - strb r1, [sp, #0xa] - strb r1, [sp, #0xb] - strb r0, [sp, #8] - mov r6, r0 - b _0233C818 -_0233C7C8: - ldrsh r4, [sp, #2] - b _0233C808 -_0233C7D0: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - strb r6, [r0, #7] - add r4, r4, #1 -_0233C808: - ldrsh r0, [sp, #6] - cmp r4, r0 - blt _0233C7D0 - add r5, r5, #1 -_0233C818: - ldrsh r0, [sp, #4] - cmp r5, r0 - blt _0233C7C8 - mov r1, #1 - add r0, sp, #0 - mov r2, r1 - rsb r3, r1, #0x3e8 - bl GenerateMonsterHouse - add sp, sp, #0xa60 - add sp, sp, #0x1000 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end GenerateOneRoomMonsterHouseFloor - - arm_func_start GenerateTwoRoomsWithMonsterHouseFloor -GenerateTwoRoomsWithMonsterHouseFloor: ; 0x0233C844 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2e4 - sub sp, sp, #0x1800 - mov r1, #2 - mov r5, #0x1c - mov r4, #0x36 - mov r3, #0x1e - str r5, [sp, #0x4c] - add r0, sp, #0x84 - mov r2, #1 - str r1, [sp, #0x48] - str r4, [sp, #0x50] - str r1, [sp, #0xc] - str r3, [sp, #0x10] - mov r5, #0 - bl InitDungeonGrid - mov r6, r5 -_0233C888: - add r1, sp, #0x48 - add r0, r1, r6, lsl #2 - ldr sb, [r1, r6, lsl #2] - ldr r1, [r0, #4] - ldr sl, [sp, #0xc] - ldr r0, [sp, #0x10] - sub r1, r1, sb - sub r7, r1, #3 - sub r0, r0, sl - sub r8, r0, #3 - mov r1, r7 - mov r0, #0xa - bl DungeonRandRange - mov r4, r0 - mov r1, r8 - mov r0, #0x10 - bl DungeonRandRange - mov fp, r0 - sub r0, r7, r4 - bl DungeonRandInt - add r1, sb, #1 - add r7, r1, r0 - sub r0, r8, fp - bl DungeonRandInt - ldr r1, _0233C9E4 ; =0x000001C2 - add r2, sl, #1 - add r8, r2, r0 - mul r1, r6, r1 - add r0, sp, #0x84 - add r2, r0, r1 - mov r0, #1 - strb r0, [r2, #0xa] - add r0, sp, #0x84 - strh r7, [r0, r1] - add r0, r7, r4 - strh r0, [r2, #4] - strh r8, [r2, #2] - add sb, r8, fp - str r0, [sp, #8] - strh sb, [r2, #6] - and r4, r5, #0xff - b _0233C97C -_0233C930: - mov sl, r8 - b _0233C970 -_0233C938: - mov r0, r7 - mov r1, sl - bl GetTileSafe - ldrh r2, [r0] - mov r1, sl - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r7 - bl GetTileSafe - strb r4, [r0, #7] - add sl, sl, #1 -_0233C970: - cmp sl, sb - blt _0233C938 - add r7, r7, #1 -_0233C97C: - ldr r0, [sp, #8] - cmp r7, r0 - blt _0233C930 - add r6, r6, #1 - cmp r6, #2 - add r5, r5, #1 - blt _0233C888 - mov r2, #1 - add r1, sp, #0xc - strb r2, [sp, #0x9a] - strb r2, [sp, #0x25b] - str r1, [sp] - mov r4, #0 - add r0, sp, #0x84 - add r3, sp, #0x48 - mov r1, #2 - str r4, [sp, #4] - bl CreateGridCellConnections - mov r2, #1 - add r0, sp, #0x84 - rsb r3, r2, #0x3e8 - mov r1, #2 - bl GenerateMonsterHouse - add sp, sp, #0x2e4 - add sp, sp, #0x1800 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233C9E4: .word 0x000001C2 - arm_func_end GenerateTwoRoomsWithMonsterHouseFloor - - arm_func_start GenerateExtraHallways -GenerateExtraHallways: ; 0x0233C9E8 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - movs sl, r3 - str r0, [sp] - str r1, [sp, #4] - str r2, [sp, #8] - beq _0233CF70 - mov r5, #0 - b _0233CF68 -_0233CA0C: - ldr r0, [sp, #4] - bl DungeonRandInt - mov r4, r0 - ldr r0, [sp, #8] - bl DungeonRandInt - mov sb, r0 - ldr r1, _0233CF78 ; =0x000001C2 - ldr r0, [sp] - mla r1, r4, r1, r0 - mov r0, #0x1e - mla r6, sb, r0, r1 - ldrb r0, [r6, #0xa] - cmp r0, #0 - ldrneb r0, [r6, #0xb] - cmpne r0, #0 - beq _0233CF64 - ldrb r0, [r6, #8] - cmp r0, #0 - ldreqb r0, [r6, #0x10] - cmpeq r0, #0 - bne _0233CF64 - ldrsh r0, [r6] - ldrsh r1, [r6, #4] - bl DungeonRandRange - mov r8, r0 - ldrsh r0, [r6, #2] - ldrsh r1, [r6, #6] - bl DungeonRandRange - mov r7, r0 - mov r0, #4 - bl DungeonRandInt - mov r6, r0, lsl #1 - ldr r0, [sp, #8] - mov ip, #0 - sub fp, r0, #1 - ldr r0, [sp, #4] - mov r3, #2 - sub r2, r0, #1 - mov r1, #4 - mov r0, #6 - mov lr, ip -_0233CAB0: - cmp r6, #0 - bne _0233CAC0 - cmp sb, fp - movge r6, r3 -_0233CAC0: - cmp r6, #2 - bne _0233CAD0 - cmp r4, r2 - movge r6, r1 -_0233CAD0: - cmp r6, #4 - bne _0233CAE0 - cmp sb, #0 - movle r6, r0 -_0233CAE0: - cmp r6, #6 - bne _0233CAF0 - cmp r4, #0 - movle r6, lr -_0233CAF0: - add ip, ip, #1 - cmp ip, #3 - blt _0233CAB0 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrb sb, [r0, #7] - ldr r0, _0233CF7C ; =DIRECTIONS_XY - mov r4, r6, lsl #2 - add fp, r0, r6, lsl #2 -_0233CB18: - mov r0, r8 - mov r1, r7 - bl GetTile - ldrb r0, [r0, #7] - cmp sb, r0 - ldreq r0, _0233CF7C ; =DIRECTIONS_XY - ldreqsh r1, [r0, r4] - ldreqsh r0, [fp, #2] - addeq r8, r8, r1 - addeq r7, r7, r0 - beq _0233CB18 - ldr fp, _0233CF7C ; =DIRECTIONS_XY - mov sb, r6, lsl #2 - add r4, fp, r6, lsl #2 -_0233CB50: - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - ldreqsh r1, [fp, sb] - ldreqsh r0, [r4, #2] - addeq r8, r8, r1 - addeq r7, r7, r0 - beq _0233CB50 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #2 - beq _0233CF64 - sub sb, r8, #2 - mov r4, #0 - add r1, r7, #2 - sub r3, r7, #2 - add r0, r8, #2 - mov r2, #1 - b _0233CBFC -_0233CBB4: - mov fp, r3 - b _0233CBE8 -_0233CBBC: - cmp sb, #0 - blt _0233CBDC - cmp sb, #0x38 - bge _0233CBDC - cmp fp, #0 - blt _0233CBDC - cmp fp, #0x20 - blt _0233CBE4 -_0233CBDC: - mov r4, r2 - b _0233CBF0 -_0233CBE4: - add fp, fp, #1 -_0233CBE8: - cmp fp, r1 - ble _0233CBBC -_0233CBF0: - cmp r4, #0 - bne _0233CC04 - add sb, sb, #1 -_0233CBFC: - cmp sb, r0 - ble _0233CBB4 -_0233CC04: - cmp r4, #0 - bne _0233CF64 - add r0, r6, #2 - and r0, r0, #6 - ldr r1, _0233CF7C ; =DIRECTIONS_XY - mov r2, r0, lsl #2 - add r0, r1, r0, lsl #2 - ldrsh r2, [r1, r2] - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - sub r0, r6, #2 - and r0, r0, #6 - ldr r1, _0233CF7C ; =DIRECTIONS_XY - mov r2, r0, lsl #2 - add r0, r1, r0, lsl #2 - ldrsh r2, [r1, r2] - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - mov r0, #3 - bl DungeonRandInt - ldr r4, _0233CF7C ; =DIRECTIONS_XY - add sb, r0, #3 -_0233CC8C: - cmp r8, #1 - cmpgt r7, #1 - ble _0233CF64 - cmp r8, #0x37 - cmplt r7, #0x1f - bge _0233CF64 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - tst r0, #0x10 - bne _0233CF64 - mov r0, #1 - str r0, [sp, #0xc] - add r0, r8, #1 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CD38 - add r0, r8, #1 - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CD38 - mov r0, r8 - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #0 - streq r0, [sp, #0xc] -_0233CD38: - add r0, r8, #1 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CD94 - sub fp, r7, #1 - add r0, r8, #1 - mov r1, fp - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CD94 - mov r1, fp - mov r0, r8 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #0 - streq r0, [sp, #0xc] -_0233CD94: - sub fp, r8, #1 - mov r0, fp - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CDF0 - mov r0, fp - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CDF0 - mov r0, r8 - add r1, r7, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #0 - streq r0, [sp, #0xc] -_0233CDF0: - mov r0, fp - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CE4C - mov r0, fp - sub fp, r7, #1 - mov r1, fp - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233CE4C - mov r1, fp - mov r0, r8 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #0 - streq r0, [sp, #0xc] -_0233CE4C: - ldr r0, [sp, #0xc] - cmp r0, #0 - beq _0233CE7C - mov r0, r8 - mov r1, r7 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233CE7C: - add r0, r6, #2 - and r1, r0, #6 - mov r0, r1, lsl #2 - ldrsh r2, [r4, r0] - add r0, r4, r1, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - sub r0, r6, #2 - and r1, r0, #6 - mov r0, r1, lsl #2 - ldrsh r2, [r4, r0] - add r0, r4, r1, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233CF64 - subs sb, sb, #1 - bne _0233CF48 - mov r0, #3 - bl DungeonRandInt - add sb, r0, #3 - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x32 - addlt r6, r6, #2 - subge r6, r6, #2 - cmp r8, #0x20 - and r6, r6, #6 - blt _0233CF2C - ldr r0, _0233CF80 ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #6] - cmp r0, #1 - cmpeq r6, #2 - beq _0233CF64 -_0233CF2C: - cmp r8, #0x30 - blt _0233CF48 - ldr r0, _0233CF80 ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #6] - cmp r0, #2 - cmpeq r6, #2 - beq _0233CF64 -_0233CF48: - mov r0, r6, lsl #2 - ldrsh r1, [r4, r0] - add r0, r4, r6, lsl #2 - ldrsh r0, [r0, #2] - add r8, r8, r1 - add r7, r7, r0 - b _0233CC8C -_0233CF64: - add r5, r5, #1 -_0233CF68: - cmp r5, sl - blt _0233CA0C -_0233CF70: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233CF78: .word 0x000001C2 -_0233CF7C: .word DIRECTIONS_XY -_0233CF80: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateExtraHallways - - arm_func_start GetGridPositions -GetGridPositions: ; 0x0233CF84 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r4, #0 - mov sl, r0 - mov sb, r1 - mov r8, r2 - mov r7, r3 - mov r6, r4 - mov r5, #0x38 - b _0233CFC0 -_0233CFA8: - mov r0, r5 - mov r1, r8 - str r4, [sl, r6, lsl #2] - bl _s32_div_f - add r4, r4, r0 - add r6, r6, #1 -_0233CFC0: - cmp r6, r8 - blt _0233CFA8 - mov r6, #0 - str r4, [sl, r8, lsl #2] - mov r5, r6 - mov r4, #0x20 - b _0233CFF4 -_0233CFDC: - mov r0, r4 - mov r1, r7 - str r6, [sb, r5, lsl #2] - bl _s32_div_f - add r6, r6, r0 - add r5, r5, #1 -_0233CFF4: - cmp r5, r7 - blt _0233CFDC - str r6, [sb, r7, lsl #2] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end GetGridPositions - - arm_func_start InitDungeonGrid -InitDungeonGrid: ; 0x0233D004 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - add r5, r1, r1, lsl #1 - mov r4, r5, asr #1 - add r3, r1, r1, lsr #31 - add ip, r5, r4, lsr #30 - mov r7, #0 - b _0233D0F0 -_0233D020: - ldr r4, _0233D0FC ; =0x000001C2 - mov r8, #0 - mla sb, r7, r4, r0 - mov r5, #1 - mov r4, r8 - mov r6, r5 - mov lr, r8 - b _0233D0E4 -_0233D040: - ldr sl, _0233D100 ; =FLOOR_GENERATION_STATUS - ldrb sl, [sl, #6] - cmp sl, #1 - bne _0233D064 - cmp r7, r3, asr #1 - movge sl, #0x1e - mlage sl, r8, sl, sb - strgeb r6, [sl, #8] - bge _0233D08C -_0233D064: - cmp sl, #2 - bne _0233D080 - cmp r7, ip, asr #2 - movge sl, #0x1e - mlage sl, r8, sl, sb - strgeb r5, [sl, #8] - bge _0233D08C -_0233D080: - mov sl, #0x1e - mla sl, r8, sl, sb - strb r4, [sl, #8] -_0233D08C: - mov fp, #1 - strb fp, [sl, #0xa] - strb lr, [sl, #0xb] - strb lr, [sl, #0xf] - and fp, lr, #0xff - strb fp, [sl, #0xe] - strb fp, [sl, #0xc] - strb lr, [sl, #0x16] - strb fp, [sl, #0x15] - strb fp, [sl, #0x14] - strb fp, [sl, #0x13] - strb lr, [sl, #0x1a] - strb fp, [sl, #0x19] - strb fp, [sl, #0x18] - strb fp, [sl, #0x17] - strb lr, [sl, #9] - strb lr, [sl, #0x11] - strb lr, [sl, #0x10] - strb lr, [sl, #0x12] - strb lr, [sl, #0x1c] - strb lr, [sl, #0x1d] - add r8, r8, #1 -_0233D0E4: - cmp r8, r2 - blt _0233D040 - add r7, r7, #1 -_0233D0F0: - cmp r7, r1 - blt _0233D020 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233D0FC: .word 0x000001C2 -_0233D100: .word FLOOR_GENERATION_STATUS - arm_func_end InitDungeonGrid - - arm_func_start AssignRooms -AssignRooms: ; 0x0233D104 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x104 - mov sl, r0 - mov r4, r3 - mov r0, #3 - mov sb, r1 - mov r8, r2 - bl DungeonRandInt - cmp r4, #0 - rsblt r4, r4, #0 - addge r4, r4, r0 - mov r2, #0 - mov r1, #1 - add r0, sp, #4 - b _0233D148 -_0233D140: - strb r1, [r0, r2] - add r2, r2, #1 -_0233D148: - cmp r2, r4 - blt _0233D140 - mov r1, #0 - add r0, sp, #4 - b _0233D164 -_0233D15C: - strb r1, [r0, r2] - add r2, r2, #1 -_0233D164: - cmp r2, #0x100 - blt _0233D15C - mul r7, sb, r8 - mov r6, #0 - add r4, sp, #4 -_0233D178: - mov r0, r7 - bl DungeonRandInt - mov r5, r0 - mov r0, r7 - bl DungeonRandInt - add r6, r6, #1 - ldrb r2, [r4, r5] - ldrb r1, [r4, r0] - cmp r6, #0x40 - strb r1, [r4, r5] - strb r2, [r4, r0] - blt _0233D178 - ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS - mov fp, #0 - sub r1, sb, #1 - str fp, [r0, #0x14] - mov r3, fp - and r5, sb, #1 - add r0, r1, r1, lsr #31 - mov r2, fp - add lr, sp, #4 - b _0233D25C -_0233D1D0: - ldr r1, _0233D314 ; =0x000001C2 - mov r4, #0 - mla r6, r3, r1, sl - ldr r1, _0233D310 ; =FLOOR_GENERATION_STATUS - b _0233D250 -_0233D1E4: - mov r7, #0x1e - mla r7, r4, r7, r6 - ldrb ip, [r7, #8] - cmp ip, #0 - bne _0233D24C - ldr ip, [r1, #0x14] - cmp ip, #0x20 - strgeb r2, [r7, #0xa] - ldrb ip, [lr, fp] - cmp ip, #0 - beq _0233D240 - mov ip, #1 - strb ip, [r7, #0xa] - ldr ip, [r1, #0x14] - cmp r5, #0 - add ip, ip, #1 - str ip, [r1, #0x14] - beq _0233D248 - cmp r3, r0, asr #1 - cmpeq r4, #1 - moveq ip, #0 - streqb ip, [r7, #0xa] - b _0233D248 -_0233D240: - mov ip, #0 - strb ip, [r7, #0xa] -_0233D248: - add fp, fp, #1 -_0233D24C: - add r4, r4, #1 -_0233D250: - cmp r4, r8 - blt _0233D1E4 - add r3, r3, #1 -_0233D25C: - cmp r3, sb - blt _0233D1D0 - ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x14] - cmp r0, #2 - bge _0233D308 - mov r4, #0 - b _0233D2F4 -_0233D27C: - mov r0, #0 - str r0, [sp] - mov r6, r0 - b _0233D2DC -_0233D28C: - ldr r0, _0233D314 ; =0x000001C2 - mov r7, #0 - mla fp, r6, r0, sl - b _0233D2D0 -_0233D29C: - mov r0, #0x1e - mla r5, r7, r0, fp - ldrb r0, [r5, #8] - cmp r0, #0 - bne _0233D2CC - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x3c - movlt r0, #1 - strlt r0, [sp] - strltb r0, [r5, #0xa] - blt _0233D2E4 -_0233D2CC: - add r7, r7, #1 -_0233D2D0: - cmp r7, r8 - blt _0233D29C - add r6, r6, #1 -_0233D2DC: - cmp r6, sb - blt _0233D28C -_0233D2E4: - ldr r0, [sp] - cmp r0, #0 - bne _0233D2FC - add r4, r4, #1 -_0233D2F4: - cmp r4, #0xc8 - blt _0233D27C -_0233D2FC: - ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS - mov r1, #0 - strb r1, [r0] -_0233D308: - add sp, sp, #0x104 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233D310: .word FLOOR_GENERATION_STATUS -_0233D314: .word 0x000001C2 - arm_func_end AssignRooms - - arm_func_start CreateRoomsAndAnchors -CreateRoomsAndAnchors: ; 0x0233D318 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x30 - ldr r5, [sp, #0x5c] - str r0, [sp] - and r0, r5, #4 - str r0, [sp, #0x14] - ldr r0, [sp, #0x58] - mov r4, #0 - str r4, [sp, #0x1c] - str r1, [sp, #4] - str r2, [sp, #8] - str r3, [sp, #0xc] - str r0, [sp, #0x58] - b _0233D658 -_0233D350: - ldr r0, [sp] - mov r1, #0x1e - mla sb, r4, r1, r0 - ldr r0, [sp, #4] - mov sl, #0 - sub r0, r0, #1 - str r0, [sp, #0x28] - ldr r0, [sp, #8] - sub r0, r0, #1 - str r0, [sp, #0x2c] - ldr r0, [sp, #0x58] - add r0, r0, r4, lsl #2 - str r0, [sp, #0x20] - b _0233D648 -_0233D388: - ldr r0, [sp, #0xc] - ldr r3, [r0, sl, lsl #2] - ldr r0, [sp, #0x58] - add fp, r3, #2 - ldr r2, [r0, r4, lsl #2] - add r0, r2, #2 - str r0, [sp, #0x18] - ldr r0, [sp, #0xc] - add r0, r0, sl, lsl #2 - ldr r1, [r0, #4] - ldr r0, [sp, #0x20] - sub r1, r1, r3 - ldr r0, [r0, #4] - sub r5, r1, #4 - sub r0, r0, r2 - sub r6, r0, #3 - ldr r0, _0233D66C ; =0x000001C2 - mla r0, sl, r0, sb - str r0, [sp, #0x10] - ldrb r0, [r0, #8] - cmp r0, #0 - bne _0233D644 - ldr r0, [sp, #0x10] - ldrb r0, [r0, #0xa] - cmp r0, #0 - beq _0233D580 - mov r0, #5 - mov r1, r5 - bl DungeonRandRange - mov r7, r0 - mov r0, #4 - mov r1, r6 - bl DungeonRandRange - mov r8, r0 - orr r0, r7, #1 - cmp r0, r5 - movlt r7, r0 - orr r0, r8, #1 - cmp r0, r6 - movlt r8, r0 - add r0, r8, r8, lsl #1 - add r0, r0, r0, lsr #31 - cmp r7, r0, asr #1 - mov r0, r0, asr #1 - movgt r7, r0 - add r0, r7, r7, lsl #1 - add r0, r0, r0, lsr #31 - cmp r8, r0, asr #1 - mov r0, r0, asr #1 - movgt r8, r0 - sub r0, r5, r7 - bl DungeonRandInt - add r5, fp, r0 - sub r0, r6, r8 - bl DungeonRandInt - ldr r1, [sp, #0x18] - add fp, r5, r7 - add r6, r1, r0 - ldr r0, _0233D66C ; =0x000001C2 - add r7, r6, r8 - mul r0, sl, r0 - strh r5, [sb, r0] - add r0, sb, r0 - strh fp, [r0, #4] - strh r6, [r0, #2] - strh r7, [r0, #6] - ldr r0, [sp, #0x1c] - and r0, r0, #0xff - str r0, [sp, #0x24] - b _0233D4F0 -_0233D4A0: - mov r8, r6 - b _0233D4E4 -_0233D4A8: - mov r0, r5 - mov r1, r8 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r8 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - ldr r1, [sp, #0x24] - add r8, r8, #1 - strb r1, [r0, #7] -_0233D4E4: - cmp r8, r7 - blt _0233D4A8 - add r5, r5, #1 -_0233D4F0: - cmp r5, fp - blt _0233D4A0 - mov r5, #1 - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x50 - movlt r0, r5 - movge r0, #0 - and r6, r0, #0xff - ldr r0, _0233D670 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x18] - cmp r0, #0 - ldr r0, [sp, #0x14] - moveq r6, #0 - cmp r0, #0 - moveq r5, #0 - cmp r5, #0 - cmpne r6, #0 - beq _0233D550 - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x32 - movlt r5, #0 - movge r6, #0 -_0233D550: - cmp r5, #0 - ldrne r0, [sp, #0x10] - movne r1, #1 - strneb r1, [r0, #0x1c] - cmp r6, #0 - ldrne r0, [sp, #0x10] - movne r1, #1 - strneb r1, [r0, #0x1d] - ldr r0, [sp, #0x1c] - add r0, r0, #1 - str r0, [sp, #0x1c] - b _0233D644 -_0233D580: - mov r2, #2 - ldr r0, [sp, #0x28] - mov r8, r2 - cmp sl, #0 - moveq r2, #1 - cmp r4, #0 - moveq r8, #1 - cmp sl, r0 - mov r1, #4 - mov r7, r1 - ldr r0, [sp, #0x2c] - moveq r1, #2 - cmp r4, r0 - add r0, fp, r2 - add r2, fp, r5 - sub r1, r2, r1 - moveq r7, #2 - bl DungeonRandRange - ldr r1, [sp, #0x18] - add r1, r1, r6 - mov r6, r0 - ldr r0, [sp, #0x18] - sub r1, r1, r7 - add r0, r0, r8 - bl DungeonRandRange - mov r5, r0 - ldr r0, _0233D66C ; =0x000001C2 - mul r0, sl, r0 - strh r6, [sb, r0] - add r1, sb, r0 - add r0, r6, #1 - strh r0, [r1, #4] - strh r5, [r1, #2] - add r0, r5, #1 - strh r0, [r1, #6] - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r5 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #1 - strh r2, [r0] - mov r0, r6 - bl GetTileSafe - mov r1, #0xfe - strb r1, [r0, #7] -_0233D644: - add sl, sl, #1 -_0233D648: - ldr r0, [sp, #4] - cmp sl, r0 - blt _0233D388 - add r4, r4, #1 -_0233D658: - ldr r0, [sp, #8] - cmp r4, r0 - blt _0233D350 - add sp, sp, #0x30 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233D66C: .word 0x000001C2 -_0233D670: .word FLOOR_GENERATION_STATUS - arm_func_end CreateRoomsAndAnchors - - arm_func_start GenerateSecondaryStructures -GenerateSecondaryStructures: ; 0x0233D674 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2c - mov sl, r0 - mov r0, #0 - str r1, [sp] - str r2, [sp, #4] - str r0, [sp, #0x20] - b _0233E03C -_0233D694: - ldr r0, [sp, #0x20] - mov r1, #0x1e - mul r7, r0, r1 - mov r0, #0 - add r6, sl, r7 - str r0, [sp, #0x24] - b _0233E020 -_0233D6B0: - ldr r1, [sp, #0x24] - ldr r0, _0233E054 ; =0x000001C2 - mul sb, r1, r0 - add r8, r6, sb - ldrb r0, [r8, #8] - cmp r0, #0 - ldreqb r0, [r8, #0xe] - cmpeq r0, #0 - ldreqb r0, [r8, #0x12] - cmpeq r0, #0 - bne _0233E014 - ldrb r0, [r8, #0xa] - cmp r0, #0 - beq _0233E014 - ldrb r0, [r8, #0x1c] - cmp r0, #0 - bne _0233E014 - ldrb r0, [r8, #0x1d] - cmp r0, #0 - beq _0233E014 - mov r0, #6 - bl DungeonRandInt - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0233E014 -_0233D714: ; jump table - b _0233E014 ; case 0 - b _0233DE94 ; case 1 - b _0233DDC8 ; case 2 - b _0233DC9C ; case 3 - b _0233D938 ; case 4 - b _0233D72C ; case 5 -_0233D72C: - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x18] - cmp r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - add r0, sl, sb - add r0, r0, r7 - bl SetSpawnFlag5 - mov r0, #2 - bl DungeonRandInt - cmp r0, #0 - mov r0, #0 - beq _0233D850 - str r0, [sp, #0x10] - mov r4, r8 - ldrsh r1, [r6, sb] - ldrsh r0, [r4, #4] - ldrsh r5, [r4, #2] - add r0, r1, r0 - add r0, r0, r0, lsr #31 - mov fp, r0, asr #1 - b _0233D7AC -_0233D78C: - mov r0, fp - mov r1, r5 - bl IsNextToHallway - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x10] - bne _0233D7B8 - add r5, r5, #1 -_0233D7AC: - ldrsh r0, [r4, #6] - cmp r5, r0 - blt _0233D78C -_0233D7B8: - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233E014 - ldrsh r5, [r4, #2] - b _0233D7F4 -_0233D7CC: - mov r0, fp - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] -_0233D7F4: - ldrsh r0, [r4, #6] - cmp r5, r0 - blt _0233D7CC - ldrsh sb, [r4] - b _0233D83C -_0233D808: - ldrsh r5, [r4, #2] - b _0233D82C -_0233D810: - mov r0, sb - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - orr r1, r1, #0x80 - strh r1, [r0] -_0233D82C: - ldrsh r0, [r4, #6] - cmp r5, r0 - blt _0233D810 - add sb, sb, #1 -_0233D83C: - cmp sb, fp - blt _0233D808 - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233D850: - str r0, [sp, #0x14] - mov r4, r8 - ldrsh r1, [r4, #2] - ldrsh r0, [r4, #6] - ldrsh r5, [r6, sb] - add r0, r1, r0 - add r0, r0, r0, lsr #31 - mov fp, r0, asr #1 - b _0233D894 -_0233D874: - mov r0, r5 - mov r1, fp - bl IsNextToHallway - cmp r0, #0 - movne r0, #1 - strne r0, [sp, #0x14] - bne _0233D8A0 - add r5, r5, #1 -_0233D894: - ldrsh r0, [r4, #4] - cmp r5, r0 - blt _0233D874 -_0233D8A0: - ldr r0, [sp, #0x14] - cmp r0, #0 - bne _0233E014 - ldrsh r5, [r4] - b _0233D8DC -_0233D8B4: - mov r0, r5 - mov r1, fp - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] -_0233D8DC: - ldrsh r0, [r4, #4] - cmp r5, r0 - blt _0233D8B4 - ldrsh sb, [r4, #2] - b _0233D924 -_0233D8F0: - ldrsh r5, [r4] - b _0233D914 -_0233D8F8: - mov r0, r5 - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - add r5, r5, #1 - orr r1, r1, #0x80 - strh r1, [r0] -_0233D914: - ldrsh r0, [r4, #4] - cmp r5, r0 - blt _0233D8F8 - add sb, sb, #1 -_0233D924: - cmp sb, fp - blt _0233D8F0 - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233D938: - mov r1, r8 - ldrsh r4, [r6, sb] - ldrsh r3, [r1, #4] - sub r0, r3, r4 - cmp r0, #6 - ldrgesh r2, [r1, #2] - ldrgesh r1, [r1, #6] - subge r0, r1, r2 - cmpge r0, #6 - blt _0233E014 - add r0, r4, r3 - add r0, r0, r0, lsr #31 - mov r5, r0, asr #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - add r1, r2, r1 - ldr r0, [r0, #0x18] - add r1, r1, r1, lsr #31 - mov r4, r1, asr #1 - cmp r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - add r0, sl, sb - add r0, r0, r7 - bl SetSpawnFlag5 - sub r0, r4, #2 - str r0, [sp, #0xc] - sub r0, r5, #2 - ldr r1, [sp, #0xc] - str r0, [sp, #8] - bl GetTileSafe - ldrh r2, [r0] - sub fp, r5, #1 - ldr r1, [sp, #0xc] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0] - ldr r1, [sp, #0xc] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0] - ldr r1, [sp, #0xc] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r1, [r0] - sub sb, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #6 - strh r1, [r0] - ldr r0, [sp, #8] - mov r1, sb - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - ldr r0, [sp, #8] - bl GetTileSafe - ldrh r2, [r0] - add r1, r4, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - ldr r0, [sp, #8] - bl GetTileSafe - ldrh r2, [r0] - add r1, r4, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - ldr r0, [sp, #8] - bl GetTileSafe - ldrh r2, [r0] - add r1, r4, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - mov r0, fp - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] - ldrh r2, [r0] - add r1, r4, #1 - orr r2, r2, #4 - strh r2, [r0] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0] - ldr r1, [sp, #0xc] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r2, [r0] - mov r1, sb - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r2, [r0] - add r1, r4, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #6 - strh r2, [r0] - add r0, r5, #1 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r2, [r0] - mov r1, sb - orr r2, r2, #6 - strh r2, [r0] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, sb - orr r2, r2, #4 - strh r2, [r0, #2] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, sb - orr r2, r2, #0x40 - strh r2, [r0, #2] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r4 - orr r2, r2, #2 - strh r2, [r0, #2] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r4 - orr r2, r2, #2 - strh r2, [r0, #2] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, sb - orr r2, r2, #2 - strh r2, [r0, #2] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, sb - orr r2, r2, #0x10 - strh r2, [r0, #2] - mov r0, r5 - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r4 - orr r2, r2, #0x10 - strh r2, [r0, #2] - mov r0, fp - bl GetTileSafe - ldrh r2, [r0, #2] - mov r1, r4 - orr r2, r2, #0x10 - strh r2, [r0, #2] - mov r0, r5 - bl GetTileSafe - ldrh r1, [r0, #2] - orr r1, r1, #0x10 - strh r1, [r0, #2] - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233DC9C: - mov r4, r8 - ldrsh r3, [r6, sb] - ldrsh r2, [r4, #4] - sub r0, r2, r3 - cmp r0, #5 - ldrgesh r1, [r4, #6] - ldrgesh r0, [r4, #2] - subge r0, r1, r0 - cmpge r0, #5 - blt _0233E014 - add r0, r3, #2 - sub r1, r2, #3 - bl DungeonRandRange - ldrsh r1, [r4, #6] - str r0, [sp, #0x28] - mov r5, r0 - ldrsh r0, [r4, #2] - sub r1, r1, #3 - add r0, r0, #2 - bl DungeonRandRange - str r0, [sp, #0x18] - ldrsh r0, [r4] - ldrsh r1, [r4, #4] - add r0, r0, #2 - sub r1, r1, #3 - bl DungeonRandRange - str r0, [sp, #0x1c] - ldrsh r0, [r4, #2] - ldrsh r1, [r4, #6] - add r0, r0, #2 - sub r1, r1, #3 - bl DungeonRandRange - mov fp, r0 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x18] - cmp r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - add r0, sl, sb - add r0, r0, r7 - bl SetSpawnFlag5 - ldr r1, [sp, #0x28] - ldr r0, [sp, #0x1c] - cmp r1, r0 - movgt r5, r0 - movgt r0, r1 - strgt r0, [sp, #0x1c] - ldr r0, [sp, #0x18] - cmp r0, fp - strgt fp, [sp, #0x18] - movgt fp, r0 - b _0233DDB0 -_0233DD74: - ldr r4, [sp, #0x18] - b _0233DDA4 -_0233DD7C: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] -_0233DDA4: - cmp r4, fp - ble _0233DD7C - add r5, r5, #1 -_0233DDB0: - ldr r0, [sp, #0x1c] - cmp r5, r0 - ble _0233DD74 - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233DDC8: - mov r2, r8 - ldrsh r1, [r2, #4] - ldrsh r0, [r6, sb] - sub r0, r1, r0 - tst r0, #1 - beq _0233E014 - ldrsh r1, [r2, #6] - ldrsh r0, [r2, #2] - sub r0, r1, r0 - tst r0, #1 - ldrne r0, _0233E058 ; =FLOOR_GENERATION_STATUS - ldrne r0, [r0, #0x18] - cmpne r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - add r0, sl, sb - add r0, r0, r7 - bl SetSpawnFlag5 - mov r5, #0 -_0233DE1C: - ldrsh r1, [r8, #4] - ldrsh r0, [r8] - sub r0, r1, r0 - bl DungeonRandInt - mov r4, r0 - ldrsh r1, [r8, #6] - ldrsh r0, [r8, #2] - sub r0, r1, r0 - bl DungeonRandInt - mov r2, r0 - add r0, r4, r2 - tst r0, #1 - beq _0233DE7C - ldrsh r0, [r8] - ldrsh r1, [r8, #2] - add r0, r0, r4 - add r1, r1, r2 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] -_0233DE7C: - add r5, r5, #1 - cmp r5, #0x40 - blt _0233DE1C - mov r0, #1 - strb r0, [r8, #9] - b _0233E014 -_0233DE94: - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x18] - cmp r0, #0 - beq _0233E014 - sub r1, r0, #1 - ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS - str r1, [r0, #0x18] - mov r0, r8 - ldrsh r2, [r0, #4] - ldrsh r1, [r6, sb] - sub r3, r2, r1 - tst r3, #1 - beq _0233DEDC - ldrsh r2, [r0, #6] - ldrsh r1, [r0, #2] - sub r1, r2, r1 - tst r1, #1 - bne _0233DFF4 -_0233DEDC: - cmp r3, #5 - ldrsh r4, [r0] - ldrsh r3, [r0, #4] - ldrsh r2, [r0, #6] - ldrsh r1, [r0, #2] - add r0, r4, r3 - add r0, r0, r0, lsr #31 - mov r4, r0, asr #1 - add r0, r1, r2 - add r0, r0, r0, lsr #31 - mov r5, r0, asr #1 - subge r0, r2, r1 - cmpge r0, #5 - blt _0233DFCC - add r0, r4, #1 - mov r1, r5 - bl GetTileSafe - ldrh r2, [r0] - add r1, r5, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #2 - strh r2, [r0] - mov r0, r4 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r5 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #2 - strh r2, [r0] - sub r0, r4, #1 - bl GetTileSafe - ldrh r2, [r0] - sub r1, r5, #1 - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #2 - strh r2, [r0] - mov r0, r4 - bl GetTileSafe - mov r1, r5 - ldrh r2, [r0] - bic r2, r2, #3 - strh r2, [r0] - ldrh r2, [r0] - orr r2, r2, #2 - strh r2, [r0] - mov r0, r4 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] - b _0233E00C -_0233DFCC: - mov r0, r4 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] - b _0233E00C -_0233DFF4: - add r4, sl, sb - add r0, r4, r7 - bl SetSpawnFlag5 - add r0, r4, r7 - mov r1, #1 - bl GenerateMaze -_0233E00C: - mov r0, #1 - strb r0, [r8, #9] -_0233E014: - ldr r0, [sp, #0x24] - add r0, r0, #1 - str r0, [sp, #0x24] -_0233E020: - ldr r1, [sp, #0x24] - ldr r0, [sp] - cmp r1, r0 - blt _0233D6B0 - ldr r0, [sp, #0x20] - add r0, r0, #1 - str r0, [sp, #0x20] -_0233E03C: - ldr r1, [sp, #0x20] - ldr r0, [sp, #4] - cmp r1, r0 - blt _0233D694 - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233E054: .word 0x000001C2 -_0233E058: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateSecondaryStructures - - arm_func_start AssignGridCellConnections -AssignGridCellConnections: ; 0x0233E05C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - ldr r4, [sp, #0x3c] - mov r8, r1 - mov r1, r4 - ldrb r1, [r1, #5] - mov sb, r0 - mov r0, #4 - str r4, [sp, #0x3c] - mov fp, r2 - mov r7, r3 - ldr r5, [sp, #0x38] - str r1, [sp, #4] - bl DungeonRandInt - mov r6, r0 - mov sl, #0 - b _0233E208 -_0233E0A0: - mov r0, #8 - bl DungeonRandInt - mov r4, r0 - mov r0, #4 - bl DungeonRandInt - mov lr, #1 - cmp r4, #4 - movlt r6, r0 - sub r1, r8, #1 - sub r0, fp, #1 - mov ip, lr - mov r3, #0 -_0233E0D0: - and r2, r6, #3 - mov r4, r3 - cmp r2, #3 - addls pc, pc, r2, lsl #2 - b _0233E130 -_0233E0E4: ; jump table - b _0233E0F4 ; case 0 - b _0233E104 ; case 1 - b _0233E114 ; case 2 - b _0233E124 ; case 3 -_0233E0F4: - cmp r7, r1 - movlt r4, ip - addge r6, r6, #1 - b _0233E130 -_0233E104: - cmp r5, #0 - movgt r4, lr - addle r6, r6, #1 - b _0233E130 -_0233E114: - cmp r7, #0 - movgt r4, #1 - addle r6, r6, #1 - b _0233E130 -_0233E124: - cmp r5, r0 - movlt r4, #1 - addge r6, r6, #1 -_0233E130: - cmp r4, #0 - beq _0233E0D0 - and r0, r6, #3 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233E204 -_0233E148: ; jump table - b _0233E158 ; case 0 - b _0233E184 ; case 1 - b _0233E1B0 ; case 2 - b _0233E1DC ; case 3 -_0233E158: - ldr r0, _0233E438 ; =0x000001C2 - mov r1, #0x1e - mla r0, r7, r0, sb - mla r1, r5, r1, r0 - ldrb r0, [r1, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r1, #0x16] - streqb r0, [r1, #0x1d7] - addeq r7, r7, #1 - b _0233E204 -_0233E184: - ldr r0, _0233E438 ; =0x000001C2 - mov r1, #0x1e - mla r0, r7, r0, sb - mla r1, r5, r1, r0 - ldrb r0, [r1, #-0x16] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r1, #0x13] - streqb r0, [r1, #-0xa] - subeq r5, r5, #1 - b _0233E204 -_0233E1B0: - ldr r0, _0233E438 ; =0x000001C2 - mov r1, #0x1e - mla r0, r7, r0, sb - mla r1, r5, r1, r0 - ldrb r0, [r1, #-0x1ba] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r1, #0x15] - streqb r0, [r1, #-0x1ac] - subeq r7, r7, #1 - b _0233E204 -_0233E1DC: - ldr r0, _0233E438 ; =0x000001C2 - mov r1, #0x1e - mla r0, r7, r0, sb - mla r1, r5, r1, r0 - ldrb r0, [r1, #0x26] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r1, #0x14] - streqb r0, [r1, #0x31] - addeq r5, r5, #1 -_0233E204: - add sl, sl, #1 -_0233E208: - ldr r0, [sp, #4] - cmp sl, r0 - blt _0233E0A0 - ldr r0, [sp, #0x3c] - ldrb r0, [r0, #0xb] - cmp r0, #0 - bne _0233E430 -_0233E224: - sub r0, r8, #1 - mov r6, #0 - str r0, [sp, #8] - sub r0, fp, #1 - str r6, [sp] - str r0, [sp, #0xc] - b _0233E41C -_0233E240: - ldr r0, _0233E438 ; =0x000001C2 - mov r7, #0 - mla sl, r6, r0, sb - b _0233E410 -_0233E250: - mov r1, #0x1e - mla r5, r7, r1, sl - ldrb r1, [r5, #8] - mov r0, #0 - cmp r1, #0 - ldreqb r1, [r5, #0xa] - cmpeq r1, #0 - bne _0233E40C - ldrb r1, [r5, #0x13] - cmp r1, #0 - ldrb r1, [r5, #0x14] - addne r0, r0, #1 - cmp r1, #0 - ldrb r1, [r5, #0x15] - addne r0, r0, #1 - cmp r1, #0 - ldrb r1, [r5, #0x16] - addne r0, r0, #1 - cmp r1, #0 - addne r0, r0, #1 - cmp r0, #1 - bne _0233E40C - mov r4, #0 - mov r0, #4 - bl DungeonRandInt - mov r1, r4 - b _0233E370 -_0233E2BC: - and r2, r0, #3 - mov r4, #0 - cmp r2, #3 - addls pc, pc, r2, lsl #2 - b _0233E364 -_0233E2D0: ; jump table - b _0233E2E0 ; case 0 - b _0233E304 ; case 1 - b _0233E324 ; case 2 - b _0233E344 ; case 3 -_0233E2E0: - ldr r2, [sp, #8] - cmp r6, r2 - bge _0233E2FC - ldrb r2, [r5, #0x16] - cmp r2, #0 - moveq r4, #1 - beq _0233E364 -_0233E2FC: - add r0, r0, #1 - b _0233E364 -_0233E304: - cmp r7, #0 - ble _0233E31C - ldrb r2, [r5, #0x13] - cmp r2, #0 - moveq r4, #1 - beq _0233E364 -_0233E31C: - add r0, r0, #1 - b _0233E364 -_0233E324: - cmp r6, #0 - ble _0233E33C - ldrb r2, [r5, #0x15] - cmp r2, #0 - moveq r4, #1 - beq _0233E364 -_0233E33C: - add r0, r0, #1 - b _0233E364 -_0233E344: - ldr r2, [sp, #0xc] - cmp r7, r2 - bge _0233E360 - ldrb r2, [r5, #0x14] - cmp r2, #0 - moveq r4, #1 - beq _0233E364 -_0233E360: - add r0, r0, #1 -_0233E364: - cmp r4, #0 - bne _0233E378 - add r1, r1, #1 -_0233E370: - cmp r1, #8 - blt _0233E2BC -_0233E378: - cmp r4, #0 - beq _0233E40C - and r0, r0, #3 - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233E40C -_0233E390: ; jump table - b _0233E3A0 ; case 0 - b _0233E3BC ; case 1 - b _0233E3D8 ; case 2 - b _0233E3F4 ; case 3 -_0233E3A0: - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r5, #0x16] - streqb r0, [r5, #0x1d7] - streq r0, [sp] - b _0233E40C -_0233E3BC: - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r5, #0x13] - streqb r0, [r5, #-0xa] - streq r0, [sp] - b _0233E40C -_0233E3D8: - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r5, #0x15] - streqb r0, [r5, #-0x1ac] - streq r0, [sp] - b _0233E40C -_0233E3F4: - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - moveq r0, #1 - streqb r0, [r5, #0x14] - streqb r0, [r5, #0x31] - streq r0, [sp] -_0233E40C: - add r7, r7, #1 -_0233E410: - cmp r7, fp - blt _0233E250 - add r6, r6, #1 -_0233E41C: - cmp r6, r8 - blt _0233E240 - ldr r0, [sp] - cmp r0, #0 - bne _0233E224 -_0233E430: - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233E438: .word 0x000001C2 - arm_func_end AssignGridCellConnections - - arm_func_start CreateGridCellConnections -CreateGridCellConnections: ; 0x0233E43C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x48 - str r0, [sp, #0xc] - str r1, [sp, #0x10] - str r2, [sp, #0x14] - mov sb, r3 - ldr r8, [sp, #0x70] - mov r5, #0 - b _0233E510 -_0233E460: - ldr r1, _0233ED30 ; =0x000001C2 - ldr r0, [sp, #0xc] - mov r6, #0 - mla r7, r5, r1, r0 - ldr r0, [sp, #0x10] - mov r3, r6 - sub r1, r0, #1 - ldr r0, [sp, #0x14] - mov r2, r6 - sub r0, r0, #1 - mov ip, r6 - mov lr, r6 - mov r4, r6 - b _0233E500 -_0233E498: - mov sl, #0x1e - mla sl, r6, sl, r7 - ldrb fp, [sl, #8] - cmp fp, #0 - strneb r4, [sl, #0x17] - strneb r4, [sl, #0x18] - strneb r4, [sl, #0x19] - strneb r4, [sl, #0x1a] - bne _0233E4FC - cmp r5, #0 - strleb r3, [sl, #0x15] - cmp r6, #0 - strleb r2, [sl, #0x13] - cmp r5, r1 - strgeb ip, [sl, #0x16] - cmp r6, r0 - strgeb lr, [sl, #0x14] - ldrb fp, [sl, #0x13] - strb fp, [sl, #0x17] - ldrb fp, [sl, #0x14] - strb fp, [sl, #0x18] - ldrb fp, [sl, #0x15] - strb fp, [sl, #0x19] - ldrb fp, [sl, #0x16] - strb fp, [sl, #0x1a] -_0233E4FC: - add r6, r6, #1 -_0233E500: - ldr sl, [sp, #0x14] - cmp r6, sl - blt _0233E498 - add r5, r5, #1 -_0233E510: - ldr r0, [sp, #0x10] - cmp r5, r0 - blt _0233E460 - mov r6, #0 - b _0233E800 -_0233E524: - ldr r1, _0233ED30 ; =0x000001C2 - ldr r0, [sp, #0xc] - mov r7, #0 - mla r4, r6, r1, r0 - add r0, sb, r6, lsl #2 - str r0, [sp, #0x2c] - b _0233E7F0 -_0233E540: - mov r0, #0x1e - mla r5, r7, r0, r4 - ldrb r0, [r5, #8] - cmp r0, #0 - bne _0233E7EC - ldrb r0, [r5, #0xa] - cmp r0, #0 - ldreqsh fp, [r5] - ldreqsh sl, [r5, #2] - beq _0233E598 - ldrsh r0, [r5] - ldrsh r1, [r5, #4] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - mov fp, r0 - ldrsh r0, [r5, #2] - ldrsh r1, [r5, #6] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - mov sl, r0 -_0233E598: - ldrb r0, [r5, #0x17] - cmp r0, #0 - beq _0233E624 - ldrb r0, [r5, #-0x16] - cmp r0, #0 - bne _0233E60C - ldrb r0, [r5, #-0x14] - cmp r0, #0 - ldreqsh r2, [r5, #-0x1e] - beq _0233E5D8 - ldrsh r0, [r5, #-0x1e] - ldrsh r1, [r5, #-0x1a] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - mov r2, r0 -_0233E5D8: - mov r0, #1 - str r0, [sp] - mov r0, #0x1e - mla r3, r7, r0, r4 - ldr r1, [sb, r6, lsl #2] - mov r0, fp - str r1, [sp, #4] - ldr r1, [r8, r7, lsl #2] - str r1, [sp, #8] - ldrsh r1, [r3, #2] - ldrsh r3, [r3, #-0x18] - sub r3, r3, #1 - bl CreateHallway -_0233E60C: - mov r0, #0 - strb r0, [r5, #0x17] - strb r0, [r5, #-6] - mov r0, #1 - strb r0, [r5, #0xb] - strb r0, [r5, #-0x13] -_0233E624: - ldrb r0, [r5, #0x18] - cmp r0, #0 - beq _0233E6B8 - ldrb r0, [r5, #0x26] - cmp r0, #0 - bne _0233E6A0 - ldrb r0, [r5, #0x28] - cmp r0, #0 - ldreqsh r2, [r5, #0x1e] - beq _0233E664 - ldrsh r0, [r5, #0x1e] - ldrsh r1, [r5, #0x22] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - mov r2, r0 -_0233E664: - mov r1, #1 - str r1, [sp] - mov r0, fp - mov r1, #0x1e - ldr fp, [sb, r6, lsl #2] - mla r1, r7, r1, r4 - add r3, r8, r7, lsl #2 - str fp, [sp, #4] - ldr r3, [r3, #4] - sub r3, r3, #1 - str r3, [sp, #8] - ldrsh fp, [r1, #6] - ldrsh r3, [r1, #0x20] - sub r1, fp, #1 - bl CreateHallway -_0233E6A0: - mov r0, #0 - strb r0, [r5, #0x18] - strb r0, [r5, #0x35] - mov r0, #1 - strb r0, [r5, #0xb] - strb r0, [r5, #0x29] -_0233E6B8: - ldrb r0, [r5, #0x19] - cmp r0, #0 - beq _0233E750 - ldrb r0, [r5, #-0x1ba] - cmp r0, #0 - bne _0233E738 - ldrb r0, [r5, #-0x1b8] - cmp r0, #0 - sub r0, r5, #0x100 - ldreqsh r3, [r0, #-0xc0] - beq _0233E6FC - ldrsh r1, [r0, #-0xbc] - ldrsh r2, [r0, #-0xc0] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - mov r3, r0 -_0233E6FC: - mov r0, #0 - str r0, [sp] - mov r0, #0x1e - mul r0, r7, r0 - ldr fp, [sb, r6, lsl #2] - add r1, r4, r0 - str fp, [sp, #4] - ldr fp, [r8, r7, lsl #2] - sub r2, r1, #0x100 - str fp, [sp, #8] - ldrsh r2, [r2, #-0xc2] - ldrsh r0, [r4, r0] - mov r1, sl - sub r2, r2, #1 - bl CreateHallway -_0233E738: - mov r0, #0 - strb r0, [r5, #0x19] - strb r0, [r5, #-0x1a8] - mov r0, #1 - strb r0, [r5, #0xb] - strb r0, [r5, #-0x1b7] -_0233E750: - ldrb r0, [r5, #0x1a] - cmp r0, #0 - beq _0233E7EC - ldrb r0, [r5, #0x1ca] - cmp r0, #0 - bne _0233E7D4 - ldrb r0, [r5, #0x1cc] - cmp r0, #0 - add r0, r5, #0x100 - ldreqsh r3, [r0, #0xc4] - beq _0233E794 - ldrsh r1, [r0, #0xc8] - ldrsh r2, [r0, #0xc4] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - mov r3, r0 -_0233E794: - mov r0, #0 - str r0, [sp] - mov r0, #0x1e - ldr r2, [sp, #0x2c] - mov r1, sl - ldr sl, [r2, #4] - mla r0, r7, r0, r4 - sub sl, sl, #1 - str sl, [sp, #4] - ldr sl, [r8, r7, lsl #2] - add r2, r0, #0x100 - str sl, [sp, #8] - ldrsh r0, [r0, #4] - ldrsh r2, [r2, #0xc2] - sub r0, r0, #1 - bl CreateHallway -_0233E7D4: - mov r0, #0 - strb r0, [r5, #0x1a] - strb r0, [r5, #0x1db] - mov r0, #1 - strb r0, [r5, #0xb] - strb r0, [r5, #0x1cd] -_0233E7EC: - add r7, r7, #1 -_0233E7F0: - ldr r0, [sp, #0x14] - cmp r7, r0 - blt _0233E540 - add r6, r6, #1 -_0233E800: - ldr r0, [sp, #0x10] - cmp r6, r0 - blt _0233E524 - ldrb r0, [sp, #0x74] - cmp r0, #0 - bne _0233ED28 - mov r7, #0 - b _0233ED1C -_0233E820: - ldr r1, _0233ED30 ; =0x000001C2 - ldr r0, [sp, #0xc] - mov r8, #0 - mla r0, r7, r1, r0 - str r0, [sp, #0x20] - ldr r0, [sp, #0x14] - sub r0, r0, #2 - str r0, [sp, #0x40] - ldr r0, [sp, #0x10] - sub r0, r0, #2 - str r0, [sp, #0x38] - b _0233ED0C -_0233E850: - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #5 - bge _0233ED08 - ldr r0, [sp, #0x20] - mov r1, #0x1e - mla r6, r8, r1, r0 - ldrb r0, [r6, #8] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #0xb] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x12] - cmp r0, #0 - ldreqb r0, [r6, #9] - cmpeq r0, #0 - bne _0233ED08 - ldrb r0, [r6, #0xa] - cmp r0, #0 - beq _0233ED08 - mov r0, #4 - bl DungeonRandInt - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233ED08 -_0233E8B8: ; jump table - b _0233E8C8 ; case 0 - b _0233E9DC ; case 1 - b _0233EAE4 ; case 2 - b _0233EBFC ; case 3 -_0233E8C8: - cmp r7, #1 - blt _0233ED08 - ldrb r0, [r6, #-0x1b7] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #-0x1ba] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #-0x1b8] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #-0x1b9] - cmp r0, #0 - ldreqb r0, [r6, #-0x1b0] - cmpeq r0, #0 - bne _0233ED08 - sub r1, r6, #0x100 - ldrsh r0, [r1, #-0xc2] - ldrsh fp, [r1, #-0xc0] - ldrsh r1, [r6, #2] - str r0, [sp, #0x28] - sub r0, r6, #0x100 - ldrsh sb, [r0, #-0xbc] - ldrsh r2, [r6, #6] - cmp fp, r1 - movge fp, r1 - cmp sb, r2 - ldrsh r0, [r6] - ldrsh sl, [r6, #4] - movle sb, r2 - bl GetTile - ldrb r0, [r0, #7] - ldr r5, [sp, #0x28] - and r0, r0, #0xff - str r0, [sp, #0x30] - b _0233E99C -_0233E958: - mov r4, fp - b _0233E990 -_0233E960: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x30] - strb r1, [r0, #7] -_0233E990: - cmp r4, sb - blt _0233E960 - add r5, r5, #1 -_0233E99C: - cmp r5, sl - blt _0233E958 - ldr r0, [sp, #0x28] - sub r1, r6, #0x100 - strh r0, [r1, #-0xc2] - strh sl, [r1, #-0xbe] - strh fp, [r1, #-0xc0] - strh sb, [r1, #-0xbc] - mov r0, #1 - strb r0, [r6, #0x12] - strb r0, [r6, #-0x1b0] - mov r0, #0 - strb r0, [r6, #0xb] - mov r0, #1 - strb r0, [r6, #0x11] - b _0233ED08 -_0233E9DC: - cmp r8, #1 - blt _0233ED08 - ldrb r0, [r6, #-0x13] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #-0x16] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #-0x14] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #-0x15] - cmp r0, #0 - ldreqb r0, [r6, #-0xc] - cmpeq r0, #0 - bne _0233ED08 - ldrsh r1, [r6, #-0x1c] - ldrsh r0, [r6] - ldrsh fp, [r6, #-0x1e] - str r1, [sp, #0x24] - ldrsh r1, [r6, #4] - ldrsh sb, [r6, #-0x1a] - cmp fp, r0 - movge fp, r0 - cmp sb, r1 - movle sb, r1 - ldrsh r1, [r6, #2] - ldrsh sl, [r6, #6] - bl GetTile - ldrb r0, [r0, #7] - mov r5, fp - and r0, r0, #0xff - str r0, [sp, #0x34] - b _0233EAA8 -_0233EA64: - ldr r4, [sp, #0x24] - b _0233EA9C -_0233EA6C: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x34] - strb r1, [r0, #7] -_0233EA9C: - cmp r4, sl - blt _0233EA6C - add r5, r5, #1 -_0233EAA8: - cmp r5, sb - blt _0233EA64 - strh fp, [r6, #-0x1e] - ldr r0, [sp, #0x24] - strh sb, [r6, #-0x1a] - strh r0, [r6, #-0x1c] - strh sl, [r6, #-0x18] - mov r0, #1 - strb r0, [r6, #0x12] - strb r0, [r6, #-0xc] - mov r0, #0 - strb r0, [r6, #0xb] - mov r0, #1 - strb r0, [r6, #0x11] - b _0233ED08 -_0233EAE4: - ldr r0, [sp, #0x38] - cmp r7, r0 - bgt _0233ED08 - ldrb r0, [r6, #0x1cd] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x1ca] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #0x1cc] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x1cb] - cmp r0, #0 - ldreqb r0, [r6, #0x1d4] - cmpeq r0, #0 - bne _0233ED08 - add r0, r6, #0x100 - ldrsh sl, [r6] - ldrsh r0, [r0, #0xc4] - str r0, [sp, #0x1c] - ldrsh r1, [r6, #2] - mov r0, r0 - cmp r1, r0 - strlt r1, [sp, #0x1c] - add r0, r6, #0x100 - ldrsh fp, [r0, #0xc6] - ldrsh r0, [r0, #0xc8] - ldrsh sb, [r6, #6] - cmp sb, r0 - movle sb, r0 - mov r0, sl - bl GetTile - ldrb r0, [r0, #7] - mov r5, sl - and r0, r0, #0xff - str r0, [sp, #0x3c] - b _0233EBC0 -_0233EB7C: - ldr r4, [sp, #0x1c] - b _0233EBB4 -_0233EB84: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x3c] - strb r1, [r0, #7] -_0233EBB4: - cmp r4, sb - blt _0233EB84 - add r5, r5, #1 -_0233EBC0: - cmp r5, fp - blt _0233EB7C - strh sl, [r6] - strh fp, [r6, #4] - ldr r0, [sp, #0x1c] - strh r0, [r6, #2] - strh sb, [r6, #6] - mov r0, #1 - strb r0, [r6, #0x1d4] - strb r0, [r6, #0x12] - mov r0, #0 - strb r0, [r6, #0x1cd] - mov r0, #1 - strb r0, [r6, #0x1d3] - b _0233ED08 -_0233EBFC: - ldr r0, [sp, #0x40] - cmp r8, r0 - bgt _0233ED08 - ldrb r0, [r6, #0x29] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x26] - cmp r0, #0 - bne _0233ED08 - ldrb r0, [r6, #0x28] - cmp r0, #0 - beq _0233ED08 - ldrb r0, [r6, #0x27] - cmp r0, #0 - ldreqb r0, [r6, #0x30] - cmpeq r0, #0 - bne _0233ED08 - ldrsh r0, [r6, #0x1e] - str r0, [sp, #0x18] - ldrsh r0, [r6] - ldr r1, [sp, #0x18] - cmp r0, r1 - strlt r0, [sp, #0x18] - ldrsh sl, [r6, #2] - ldrsh r1, [r6, #0x22] - ldrsh sb, [r6, #4] - ldrsh fp, [r6, #0x24] - cmp sb, r1 - movle sb, r1 - mov r1, sl - bl GetTile - ldrb r0, [r0, #7] - ldr r5, [sp, #0x18] - and r0, r0, #0xff - str r0, [sp, #0x44] - b _0233ECD0 -_0233EC8C: - mov r4, sl - b _0233ECC4 -_0233EC94: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - ldr r1, [sp, #0x44] - strb r1, [r0, #7] -_0233ECC4: - cmp r4, fp - blt _0233EC94 - add r5, r5, #1 -_0233ECD0: - cmp r5, sb - blt _0233EC8C - ldr r0, [sp, #0x18] - strh r0, [r6] - strh sb, [r6, #4] - strh sl, [r6, #2] - strh fp, [r6, #6] - mov r0, #1 - strb r0, [r6, #0x30] - strb r0, [r6, #0x12] - mov r0, #0 - strb r0, [r6, #0x29] - mov r0, #1 - strb r0, [r6, #0x2f] -_0233ED08: - add r8, r8, #1 -_0233ED0C: - ldr r0, [sp, #0x14] - cmp r8, r0 - blt _0233E850 - add r7, r7, #1 -_0233ED1C: - ldr r0, [sp, #0x10] - cmp r7, r0 - blt _0233E820 -_0233ED28: - add sp, sp, #0x48 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233ED30: .word 0x000001C2 - arm_func_end CreateGridCellConnections - - arm_func_start GenerateRoomImperfections -GenerateRoomImperfections: ; 0x0233ED34 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x34 - str r0, [sp] - str r1, [sp, #4] - str r2, [sp, #8] - mov fp, #0 - b _0233F100 -_0233ED50: - ldr r1, _0233F114 ; =0x000001C2 - ldr r0, [sp] - mov sl, #0 - mla r0, fp, r1, r0 - str r0, [sp, #0xc] - mvn r0, #0 - str r0, [sp, #0x30] - b _0233F0F0 -_0233ED70: - ldr r0, [sp, #0xc] - mov r1, #0x1e - mla sb, sl, r1, r0 - ldrb r0, [sb, #8] - cmp r0, #0 - ldreqb r0, [sb, #0x11] - cmpeq r0, #0 - ldreqb r0, [sb, #0x12] - cmpeq r0, #0 - bne _0233F0EC - ldrb r0, [sb, #0xb] - cmp r0, #0 - ldrneb r0, [sb, #0xa] - cmpne r0, #0 - beq _0233F0EC - ldrb r0, [sb, #9] - cmp r0, #0 - ldreqb r0, [sb, #0x10] - cmpeq r0, #0 - bne _0233F0EC - ldrb r0, [sb, #0x1c] - cmp r0, #0 - beq _0233F0EC - mov r0, #0x64 - bl DungeonRandInt - cmp r0, #0x3c - blt _0233F0EC - ldrsh r3, [sb, #4] - ldrsh r2, [sb] - ldrsh r1, [sb, #6] - ldrsh r0, [sb, #2] - sub r2, r3, r2 - sub r0, r1, r0 - add r1, r2, r0 - mov r0, r1, asr #1 - add r0, r1, r0, lsr #30 - movs r0, r0, asr #2 - str r0, [sp, #0x24] - moveq r0, #1 - streq r0, [sp, #0x24] - mov r0, #0 - str r0, [sp, #0x2c] - b _0233F0DC -_0233EE1C: - mov r4, #0 -_0233EE20: - mov r0, #4 - bl DungeonRandInt - str r0, [sp, #0x20] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0233EE48 -_0233EE38: ; jump table - b _0233EE48 ; case 0 - b _0233EE70 ; case 1 - b _0233EE9C ; case 2 - b _0233EECC ; case 3 -_0233EE48: - cmp r4, #0 - movne r0, #1 - strne r0, [sp, #0x28] - movne r5, #0 - moveq r0, #0 - ldrsh r8, [sb] - ldrsh r7, [sb, #2] - streq r0, [sp, #0x28] - moveq r5, #1 - b _0233EEF4 -_0233EE70: - ldrsh r0, [sb, #4] - cmp r4, #0 - movne r5, #1 - sub r8, r0, #1 - movne r0, #0 - strne r0, [sp, #0x28] - ldreq r0, [sp, #0x30] - ldrsh r7, [sb, #2] - streq r0, [sp, #0x28] - moveq r5, #0 - b _0233EEF4 -_0233EE9C: - ldrsh r0, [sb, #6] - cmp r4, #0 - ldrsh r1, [sb, #4] - sub r7, r0, #1 - ldrne r0, [sp, #0x30] - movne r5, #0 - strne r0, [sp, #0x28] - moveq r0, #0 - sub r8, r1, #1 - streq r0, [sp, #0x28] - ldreq r5, [sp, #0x30] - b _0233EEF4 -_0233EECC: - ldrsh r0, [sb, #6] - cmp r4, #0 - ldrne r5, [sp, #0x30] - sub r7, r0, #1 - movne r0, #0 - strne r0, [sp, #0x28] - moveq r0, #1 - ldrsh r8, [sb] - streq r0, [sp, #0x28] - moveq r5, #0 -_0233EEF4: - mov r6, #0 - b _0233F0BC -_0233EEFC: - ldrsh r0, [sb] - cmp r8, r0 - blt _0233F0C4 - ldrsh r0, [sb, #4] - cmp r8, r0 - bge _0233F0C4 - ldrsh r0, [sb, #2] - cmp r7, r0 - blt _0233F0C4 - ldrsh r0, [sb, #6] - cmp r7, r0 - bge _0233F0C4 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233F0AC - mov r5, #0 - b _0233F014 -_0233EF50: - ldr r0, _0233F118 ; =DIRECTIONS_XY - mov r1, r5, lsl #2 - ldrsh r2, [r0, r1] - add r0, r0, r5, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - str r0, [sp, #0x1c] - mov r0, #0 - str r0, [sp, #0x10] - add r0, r7, r1 - str r0, [sp, #0x18] - ldr r6, [sp, #0x30] - b _0233EFFC -_0233EF84: - ldr r0, [sp, #0x30] - str r0, [sp, #0x14] - b _0233EFE0 -_0233EF90: - ldr r1, [sp, #0x1c] - ldr r0, [sp, #0x14] - add r0, r1, r0 - ldr r1, [sp, #0x18] - add r1, r1, r6 - bl GetTile - ldrh r1, [r0] - and r1, r1, #3 - cmp r1, #1 - bne _0233EFD4 - ldrb r0, [r0, #7] - cmp r0, #0xff - moveq r0, #1 - streq r0, [sp, #0x10] - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233EFEC -_0233EFD4: - ldr r0, [sp, #0x14] - add r0, r0, #1 - str r0, [sp, #0x14] -_0233EFE0: - ldr r0, [sp, #0x14] - cmp r0, #1 - ble _0233EF90 -_0233EFEC: - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233F004 - add r6, r6, #1 -_0233EFFC: - cmp r6, #1 - ble _0233EF84 -_0233F004: - ldr r0, [sp, #0x10] - cmp r0, #0 - bne _0233F01C - add r5, r5, #1 -_0233F014: - cmp r5, #8 - blt _0233EF50 -_0233F01C: - cmp r5, #8 - bne _0233F0C4 - ldr r1, _0233F11C ; =CORNER_CARDINAL_NEIGHBOR_IS_OPEN - ldr r0, [sp, #0x20] - mov r5, #0 - add r6, r1, r0, lsl #3 - b _0233F080 -_0233F038: - ldr r0, _0233F118 ; =DIRECTIONS_XY - mov r1, r5, lsl #2 - ldrsh r2, [r0, r1] - add r0, r0, r5, lsl #2 - ldrsh r1, [r0, #2] - add r0, r8, r2 - add r1, r7, r1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - moveq r0, #1 - movne r0, #0 - and r1, r0, #0xff - ldrb r0, [r5, r6] - cmp r1, r0 - bne _0233F088 - add r5, r5, #2 -_0233F080: - cmp r5, #8 - blt _0233F038 -_0233F088: - cmp r5, #8 - bne _0233F0C4 - mov r0, r8 - mov r1, r7 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - b _0233F0C4 -_0233F0AC: - ldr r0, [sp, #0x28] - add r7, r7, r5 - add r8, r8, r0 - add r6, r6, #1 -_0233F0BC: - cmp r6, #0xa - blt _0233EEFC -_0233F0C4: - add r4, r4, #1 - cmp r4, #2 - blt _0233EE20 - ldr r0, [sp, #0x2c] - add r0, r0, #1 - str r0, [sp, #0x2c] -_0233F0DC: - ldr r1, [sp, #0x2c] - ldr r0, [sp, #0x24] - cmp r1, r0 - blt _0233EE1C -_0233F0EC: - add sl, sl, #1 -_0233F0F0: - ldr r0, [sp, #8] - cmp sl, r0 - blt _0233ED70 - add fp, fp, #1 -_0233F100: - ldr r0, [sp, #4] - cmp fp, r0 - blt _0233ED50 - add sp, sp, #0x34 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233F114: .word 0x000001C2 -_0233F118: .word DIRECTIONS_XY -_0233F11C: .word CORNER_CARDINAL_NEIGHBOR_IS_OPEN - arm_func_end GenerateRoomImperfections - - arm_func_start CreateHallway -CreateHallway: ; 0x0233F120 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldrb r6, [sp, #0x28] - mov sl, r0 - ldr r0, [sp, #0x30] - mov sb, r1 - cmp r6, #0 - mov r8, r2 - mov r7, r3 - mov r4, sl - mov r5, sb - ldr fp, [sp, #0x2c] - str r0, [sp, #0x30] - mov r6, #0 - beq _0233F328 - b _0233F1C4 -_0233F15C: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F1AC - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F1B4 -_0233F1AC: - cmp sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F1B4: - ldr r0, [sp, #0x30] - cmp sb, r0 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F1C4: - ldr r0, [sp, #0x30] - cmp sb, r0 - bne _0233F15C - mov r6, #0 - b _0233F240 -_0233F1D8: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F228 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F234 -_0233F228: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F234: - cmp sl, r8 - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F240: - cmp sl, r8 - bne _0233F1D8 - mov r6, #0 - b _0233F2B8 -_0233F250: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F2A0 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F2AC -_0233F2A0: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F2AC: - cmp sb, r7 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F2B8: - cmp sb, r7 - bne _0233F250 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F2C4: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F314 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F31C -_0233F314: - cmp sl, r4 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F31C: - cmp sl, fp - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F328: - cmp sl, fp - bne _0233F2C4 - mov r6, #0 - b _0233F3A0 -_0233F338: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F388 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F394 -_0233F388: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F394: - cmp sb, r7 - addlt sb, sb, #1 - subge sb, sb, #1 -_0233F3A0: - cmp sb, r7 - bne _0233F338 - mov r6, #0 - b _0233F418 -_0233F3B0: - cmp r6, #0x38 - add r6, r6, #1 - ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - mov r0, sl - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _0233F400 - mov r0, sl - mov r1, sb - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233F40C -_0233F400: - cmp sl, r4 - cmpeq sb, r5 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -_0233F40C: - cmp sl, r8 - addlt sl, sl, #1 - subge sl, sl, #1 -_0233F418: - cmp sl, r8 - bne _0233F3B0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end CreateHallway - - arm_func_start EnsureConnectedGrid -EnsureConnectedGrid: ; 0x0233F424 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2c - str r0, [sp, #0xc] - mov r7, r1 - mov fp, r2 - mov r6, r3 - ldr r5, [sp, #0x50] - mov r8, #0 - b _0233F818 -_0233F448: - ldr r1, _0233F8FC ; =0x000001C2 - ldr r0, [sp, #0xc] - mov r4, #0 - mla sb, r8, r1, r0 - sub r0, fp, #1 - str r0, [sp, #0x20] - add r0, r6, r8, lsl #2 - str r0, [sp, #0x28] - sub r0, r7, #1 - str r0, [sp, #0x24] - b _0233F80C -_0233F474: - mov r0, #0x1e - mla sl, r4, r0, sb - ldrb r0, [sl, #8] - cmp r0, #0 - ldreqb r0, [sl, #0x11] - cmpeq r0, #0 - ldreqb r0, [sl, #0xb] - cmpeq r0, #0 - bne _0233F808 - ldrb r0, [sl, #0xa] - cmp r0, #0 - beq _0233F7CC - ldrb r0, [sl, #9] - cmp r0, #0 - bne _0233F7CC - ldrsh r0, [sl] - ldrsh r1, [sl, #4] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - str r0, [sp, #0x1c] - ldrsh r0, [sl, #2] - ldrsh r1, [sl, #6] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - str r0, [sp, #0x18] - cmp r4, #0 - ble _0233F590 - ldrb r0, [sl, #-0x16] - cmp r0, #0 - ldreqb r0, [sl, #-0xc] - cmpeq r0, #0 - bne _0233F590 - ldrb r0, [sl, #-0x13] - cmp r0, #0 - beq _0233F590 - ldrb r0, [sl, #-0x14] - cmp r0, #0 - ldrsh r0, [sl, #-0x1e] - streq r0, [sp, #0x14] - beq _0233F544 - ldrsh r1, [sl, #-0x1a] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - str r0, [sp, #0x14] - ldrsh r0, [sl, #-0x1c] - ldrsh r1, [sl, #-0x18] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange -_0233F544: - mov r1, #1 - str r1, [sp] - mov r1, #0x1e - mla sl, r4, r1, sb - ldr r1, [r6, r8, lsl #2] - ldr r0, [sp, #0x1c] - str r1, [sp, #4] - ldr r1, [r5, r4, lsl #2] - ldr r2, [sp, #0x14] - str r1, [sp, #8] - ldrsh r3, [sl, #-0x18] - ldrsh r1, [sl, #2] - sub r3, r3, #1 - bl CreateHallway - mov r0, #1 - strb r0, [sl, #0xb] - strb r0, [sl, #0x13] - strb r0, [sl, #-0xa] - b _0233F808 -_0233F590: - ldr r0, [sp, #0x20] - cmp r4, r0 - bge _0233F64C - ldrb r0, [sl, #0x26] - cmp r0, #0 - ldreqb r0, [sl, #0x30] - cmpeq r0, #0 - bne _0233F64C - ldrb r0, [sl, #0x29] - cmp r0, #0 - beq _0233F64C - ldrb r0, [sl, #0x28] - cmp r0, #0 - ldrsh r0, [sl, #0x1e] - streq r0, [sp, #0x10] - beq _0233F5F8 - ldrsh r1, [sl, #0x22] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange - str r0, [sp, #0x10] - ldrsh r0, [sl, #0x20] - ldrsh r1, [sl, #0x24] - add r0, r0, #1 - sub r1, r1, #1 - bl DungeonRandRange -_0233F5F8: - mov r1, #1 - str r1, [sp] - mov r1, #0x1e - mla sl, r4, r1, sb - ldr r3, [r6, r8, lsl #2] - add r1, r5, r4, lsl #2 - str r3, [sp, #4] - ldr r1, [r1, #4] - ldr r0, [sp, #0x1c] - sub r1, r1, #1 - str r1, [sp, #8] - ldrsh r1, [sl, #6] - ldrsh r3, [sl, #0x20] - ldr r2, [sp, #0x10] - sub r1, r1, #1 - bl CreateHallway - mov r0, #1 - strb r0, [sl, #0xb] - strb r0, [sl, #0x14] - strb r0, [sl, #0x31] - b _0233F808 -_0233F64C: - cmp r8, #0 - ble _0233F708 - ldrb r0, [sl, #-0x1ba] - cmp r0, #0 - ldreqb r0, [sl, #-0x1b0] - cmpeq r0, #0 - bne _0233F708 - ldrb r0, [sl, #-0x1b7] - cmp r0, #0 - beq _0233F708 - ldrb r0, [sl, #-0x1b8] - cmp r0, #0 - sub r0, sl, #0x100 - ldreqsh r3, [r0, #-0xc0] - beq _0233F6B8 - ldrsh r1, [r0, #-0xbe] - ldrsh r2, [r0, #-0xc2] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - sub r0, sl, #0x100 - ldrsh r1, [r0, #-0xbc] - ldrsh r2, [r0, #-0xc0] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - mov r3, r0 -_0233F6B8: - mov r0, #0 - str r0, [sp] - mov r0, #0x1e - mul r0, r4, r0 - ldr ip, [r6, r8, lsl #2] - add sl, sb, r0 - str ip, [sp, #4] - ldr ip, [r5, r4, lsl #2] - sub r2, sl, #0x100 - str ip, [sp, #8] - ldrsh r2, [r2, #-0xc2] - ldrsh r0, [sb, r0] - ldr r1, [sp, #0x18] - sub r2, r2, #1 - bl CreateHallway - mov r0, #1 - strb r0, [sl, #0xb] - strb r0, [sl, #0x15] - strb r0, [sl, #-0x1ac] - b _0233F808 -_0233F708: - ldr r0, [sp, #0x24] - cmp r8, r0 - bge _0233F808 - ldrb r0, [sl, #0x1ca] - cmp r0, #0 - ldreqb r0, [sl, #0x1d4] - cmpeq r0, #0 - bne _0233F808 - ldrb r0, [sl, #0x1cd] - cmp r0, #0 - beq _0233F808 - ldrb r0, [sl, #0x1cc] - cmp r0, #0 - add r0, sl, #0x100 - ldreqsh r3, [r0, #0xc4] - beq _0233F778 - ldrsh r1, [r0, #0xc6] - ldrsh r2, [r0, #0xc2] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - add r0, sl, #0x100 - ldrsh r1, [r0, #0xc8] - ldrsh r2, [r0, #0xc4] - sub r1, r1, #1 - add r0, r2, #1 - bl DungeonRandRange - mov r3, r0 -_0233F778: - mov r0, #0 - str r0, [sp] - mov r0, #0x1e - mla sl, r4, r0, sb - ldr r0, [sp, #0x28] - ldr r1, [sp, #0x18] - ldr r2, [r0, #4] - add r0, sl, #0x100 - sub r2, r2, #1 - str r2, [sp, #4] - ldr r2, [r5, r4, lsl #2] - str r2, [sp, #8] - ldrsh r2, [r0, #0xc2] - ldrsh r0, [sl, #4] - sub r0, r0, #1 - bl CreateHallway - mov r0, #1 - strb r0, [sl, #0xb] - strb r0, [sl, #0x16] - strb r0, [sl, #0x1d7] - b _0233F808 -_0233F7CC: - ldrsh r0, [sl] - ldrsh r1, [sl, #2] - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0, #2] - bic r1, r1, #1 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #2 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #4 - strh r1, [r0, #2] -_0233F808: - add r4, r4, #1 -_0233F80C: - cmp r4, fp - blt _0233F474 - add r8, r8, #1 -_0233F818: - cmp r8, r7 - blt _0233F448 - mov r8, #0 - b _0233F8EC -_0233F828: - ldr r1, _0233F8FC ; =0x000001C2 - ldr r0, [sp, #0xc] - mov sb, #0 - mla sl, r8, r1, r0 - b _0233F8E0 -_0233F83C: - mov r0, #0x1e - mla r5, sb, r0, sl - ldrb r0, [r5, #8] - cmp r0, #0 - ldreqb r0, [r5, #0x11] - cmpeq r0, #0 - ldreqb r0, [r5, #0xb] - cmpeq r0, #0 - ldreqb r0, [r5, #0xf] - cmpeq r0, #0 - bne _0233F8DC - ldrsh r6, [r5] - b _0233F8D0 -_0233F870: - ldrsh r4, [r5, #2] - b _0233F8C0 -_0233F878: - mov r0, r6 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - add r4, r4, #1 - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0, #2] - bic r1, r1, #2 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #1 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #4 - strh r1, [r0, #2] - mov r1, #0xff - strb r1, [r0, #7] -_0233F8C0: - ldrsh r0, [r5, #6] - cmp r4, r0 - blt _0233F878 - add r6, r6, #1 -_0233F8D0: - ldrsh r0, [r5, #4] - cmp r6, r0 - blt _0233F870 -_0233F8DC: - add sb, sb, #1 -_0233F8E0: - cmp sb, fp - blt _0233F83C - add r8, r8, #1 -_0233F8EC: - cmp r8, r7 - blt _0233F828 - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233F8FC: .word 0x000001C2 - arm_func_end EnsureConnectedGrid - - arm_func_start SetTerrainObstacleChecked -SetTerrainObstacleChecked: ; 0x0233F900 - ldrh r3, [r0] - cmp r1, #0 - bic r1, r3, #3 - strh r1, [r0] - bxeq lr - ldrb r1, [r0, #7] - cmp r1, r2 - bxne lr - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - strh r1, [r0] - bx lr - arm_func_end SetTerrainObstacleChecked - - arm_func_start FinalizeJunctions -FinalizeJunctions: ; 0x0233F93C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r4, #0 -_0233F944: - sub r5, r4, #1 - mov r6, #0 - mov r7, #0xff -_0233F950: - mov r0, r4 - mov r1, r6 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _0233FAFC - mov r0, r4 - mov r1, r6 - bl GetTile - ldrb r0, [r0, #7] - cmp r0, #0xff - bne _0233FAD4 - cmp r4, #0 - ble _0233F9D4 - mov r0, r5 - mov r1, r6 - bl GetTileSafe - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233F9D4 - ldrh r1, [r0] - orr r2, r1, #8 - and r1, r2, #3 - strh r2, [r0] - cmp r1, #2 - bne _0233F9D4 - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233F9D4: - cmp r6, #0 - ble _0233FA28 - mov r0, r4 - sub r1, r6, #1 - bl GetTileSafe - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233FA28 - ldrh r1, [r0] - orr r1, r1, #8 - orr r2, r1, #8 - and r1, r2, #3 - strh r2, [r0] - cmp r1, #2 - bne _0233FA28 - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233FA28: - cmp r6, #0x1f - bge _0233FA7C - mov r0, r4 - add r1, r6, #1 - bl GetTileSafe - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233FA7C - ldrh r1, [r0] - orr r1, r1, #8 - orr r2, r1, #8 - and r1, r2, #3 - strh r2, [r0] - cmp r1, #2 - bne _0233FA7C - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] -_0233FA7C: - cmp r4, #0x37 - bge _0233FAFC - mov r1, r6 - add r0, r4, #1 - bl GetTileSafe - ldrb r1, [r0, #7] - cmp r1, #0xff - beq _0233FAFC - ldrh r1, [r0] - orr r1, r1, #8 - orr r2, r1, #8 - and r1, r2, #3 - strh r2, [r0] - cmp r1, #2 - bne _0233FAFC - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #1 - strh r1, [r0] - b _0233FAFC -_0233FAD4: - mov r0, r4 - mov r1, r6 - bl GetTile - ldrb r0, [r0, #7] - cmp r0, #0xfe - bne _0233FAFC - mov r0, r4 - mov r1, r6 - bl GetTileSafe - strb r7, [r0, #7] -_0233FAFC: - add r6, r6, #1 - cmp r6, #0x20 - blt _0233F950 - add r4, r4, #1 - cmp r4, #0x38 - blt _0233F944 - bl ov29_0233FB1C - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end FinalizeJunctions - - arm_func_start ov29_0233FB1C -ov29_0233FB1C: ; 0x0233FB1C -#ifdef JAPAN -#define OV29_0233FB1C_OFFSET 0x5C -#else -#define OV29_0233FB1C_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r0, _0233FBE4 ; =DUNGEON_PTR - mov r1, #0 - ldr r6, [r0] - mov r7, r1 -_0233FB30: - add r0, r6, r1, lsl #1 -#ifdef JAPAN - add r0, r0, #0xf100 -#else - add r0, r0, #0xf200 -#endif - add r1, r1, #1 - strh r7, [r0, #0x68 + OV29_0233FB1C_OFFSET] - cmp r1, #0x20 - blt _0233FB30 -_0233FB48: - mov r0, r7, lsl #0x10 - mov r5, #0 - mov r4, r0, asr #0x10 -_0233FB54: - mov r0, r7 - mov r1, r5 - bl GetTile - ldrh r0, [r0] - tst r0, #8 - beq _0233FBC8 - mov r0, r7 - mov r1, r5 - bl GetTile - ldrb r2, [r0, #7] - cmp r2, #0 - blt _0233FBC8 - cmp r2, #0x20 - addlt r0, r6, r2, lsl #1 -#ifdef JAPAN - addlt r1, r0, #0xf100 -#else - addlt r1, r0, #0xf200 -#endif - ldrltsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] - cmplt r0, #0x20 - bge _0233FBC8 - add r2, r6, r2, lsl #7 - add r0, r2, r0, lsl #2 - add r0, r0, #0xf200 -#ifdef JAPAN - strh r4, [r0, #4] -#else - strh r4, [r0, #0xa8] -#endif - ldrsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] - add r0, r2, r0, lsl #2 - add r0, r0, #0xf200 -#ifdef JAPAN - strh r5, [r0, #6] -#else - strh r5, [r0, #0xaa] -#endif - ldrsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] - add r0, r0, #1 - strh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] -_0233FBC8: - add r5, r5, #1 - cmp r5, #0x20 - blt _0233FB54 - add r7, r7, #1 - cmp r7, #0x38 - blt _0233FB48 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0233FBE4: .word DUNGEON_PTR - arm_func_end ov29_0233FB1C - - arm_func_start GenerateKecleonShop -GenerateKecleonShop: ; 0x0233FBE8 -#ifdef JAPAN -#define GENERATE_KECLEON_SHOP_OFFSET -0xA4 -#else -#define GENERATE_KECLEON_SHOP_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x44 - ldr r5, _0233FF8C ; =DUNGEON_PTR - ldr r4, _0233FF90 ; =FLOOR_GENERATION_STATUS - mvn r7, #0 - ldr r6, [r5] - strh r7, [r4, #0x20] - strh r7, [r4, #0x22] - ldrb r4, [r4, #1] - mov sl, r0 - str r1, [sp] - str r2, [sp, #4] - mov r5, r3 - cmp r4, #0 - bne _0233FF84 - bl GetFloorType - cmp r0, #2 - cmpne r5, #0 - beq _0233FF84 - mov r0, #0x64 - bl DungeonRandInt - cmp r5, r0 - ble _0233FF84 - mov r4, #0 - add r2, sp, #0x26 - add r1, sp, #8 -_0233FC50: - mov r0, r4, lsl #0x10 - mov r3, r4, lsl #1 - mov r0, r0, asr #0x10 - add r4, r4, #1 - strh r0, [r2, r3] - strh r0, [r1, r3] - cmp r4, #0xf - blt _0233FC50 - mov r7, #0xf - mov r8, #0 - mov r5, r7 - add r4, sp, #0x26 -_0233FC80: - mov r0, r7 - bl DungeonRandInt - mov sb, r0 - mov r0, r5 - bl DungeonRandInt - mov r3, sb, lsl #1 - mov r1, r0, lsl #1 - add r8, r8, #1 - ldrsh r2, [r4, r3] - ldrsh r0, [r4, r1] - cmp r8, #0xc8 - strh r0, [r4, r3] - strh r2, [r4, r1] - blt _0233FC80 - mov r7, #0xf - mov r8, #0 - mov r5, r7 - add r4, sp, #8 -_0233FCC8: - mov r0, r7 - bl DungeonRandInt - mov sb, r0 - mov r0, r5 - bl DungeonRandInt - mov r3, sb, lsl #1 - mov r1, r0, lsl #1 - add r8, r8, #1 - ldrsh r2, [r4, r3] - ldrsh r0, [r4, r1] - cmp r8, #0xc8 - strh r0, [r4, r3] - strh r2, [r4, r1] - blt _0233FCC8 - mov r4, #0 - b _0233FF7C -_0233FD08: - add r0, sp, #0x26 - mov r1, r4, lsl #1 - ldrsh r1, [r0, r1] - ldr r0, [sp] - cmp r1, r0 - bge _0233FF78 - ldr r0, _0233FF94 ; =0x000001C2 - mov r5, #0 - mul fp, r1, r0 - add sb, sl, fp - b _0233FF70 -_0233FD34: - mov r1, r5, lsl #1 - add r0, sp, #8 - ldrsh r1, [r0, r1] - ldr r0, [sp, #4] - cmp r1, r0 - bge _0233FF6C - mov r0, #0x1e - mul r7, r1, r0 - add r8, sb, r7 - ldrb r0, [r8, #8] - cmp r0, #0 - ldreqb r0, [r8, #0x11] - cmpeq r0, #0 - ldreqb r0, [r8, #0x12] - cmpeq r0, #0 - bne _0233FF6C - ldrb r0, [r8, #0xb] - cmp r0, #0 - ldrneb r0, [r8, #0xa] - cmpne r0, #0 - beq _0233FF6C - ldrb r0, [r8, #9] - cmp r0, #0 - ldreqb r0, [r8, #0x10] - cmpeq r0, #0 - ldreqb r0, [r8, #0x1d] - cmpeq r0, #0 - bne _0233FF6C - ldrsh r1, [r8, #4] - ldrsh r0, [r8] - sub r0, r1, r0 - bl abs - cmp r0, #5 - blt _0233FF6C - ldrsh r1, [r8, #6] - ldrsh r0, [r8, #2] - sub r0, r1, r0 - bl abs - cmp r0, #4 - blt _0233FF6C - ldr r0, _0233FF90 ; =FLOOR_GENERATION_STATUS - add r1, sl, fp - mov r3, #1 - strb r3, [r0, #3] - add r2, r1, r7 - strb r3, [r2, #0xc] - ldrsh r1, [sb, r7] - add r1, r1, #1 - str r1, [r0, #0x30] - ldrsh r1, [r2, #4] - sub r1, r1, #1 - str r1, [r0, #0x38] - ldrsh r1, [r2, #2] - add r3, r1, #1 - str r3, [r0, #0x34] - ldrsh r1, [r2, #6] - sub r2, r1, #1 - sub r1, r2, r3 - cmp r1, #3 - str r2, [r0, #0x3c] - addlt r1, r2, #1 - strlt r1, [r0, #0x3c] - ldr r1, _0233FF98 ; =0x0000270F - add r0, r6, #0xc000 - str r1, [r0, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] - str r1, [r0, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] - rsb r2, r1, #0 - str r2, [r0, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] - ldr r1, _0233FF90 ; =FLOOR_GENERATION_STATUS - str r2, [r0, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] - ldr r4, [r1, #0x30] - b _0233FED8 -_0233FE54: - ldr sl, _0233FF90 ; =FLOOR_GENERATION_STATUS - add r8, r6, #0xc000 - ldr r5, [sl, #0x34] - b _0233FEC8 -_0233FE64: - mov r0, r4 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - orr r1, r1, #0x20 - strh r1, [r0] - ldrh r1, [r0, #2] - bic r1, r1, #8 - strh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #1 - strh r1, [r0, #2] - ldr r0, [r8, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] - cmp r0, r4 - strgt r4, [r8, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] - ldr r0, [r8, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] - cmp r0, r5 - strgt r5, [r8, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] - ldr r0, [r8, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] - cmp r0, r4 - strlt r4, [r8, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] - ldr r0, [r8, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] - cmp r0, r5 - strlt r5, [r8, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] - add r5, r5, #1 -_0233FEC8: - ldr r0, [sl, #0x3c] - cmp r5, r0 - blt _0233FE64 - add r4, r4, #1 -_0233FED8: - ldr r0, _0233FF90 ; =FLOOR_GENERATION_STATUS - ldr r0, [r0, #0x38] - cmp r4, r0 - blt _0233FE54 - add r4, sb, r7 - ldrsh r5, [sb, r7] - b _0233FF28 -_0233FEF4: - ldrsh r6, [r4, #2] - b _0233FF18 -_0233FEFC: - mov r0, r5 - mov r1, r6 - bl GetTileSafe - ldrh r1, [r0, #2] - add r6, r6, #1 - orr r1, r1, #0x10 - strh r1, [r0, #2] -_0233FF18: - ldrsh r0, [r4, #6] - cmp r6, r0 - blt _0233FEFC - add r5, r5, #1 -_0233FF28: - ldrsh r0, [r4, #4] - cmp r5, r0 - blt _0233FEF4 - ldr r1, _0233FF90 ; =FLOOR_GENERATION_STATUS - ldr r2, [r1, #0x30] - ldr r0, [r1, #0x38] - add r0, r2, r0 - add r0, r0, r0, lsr #31 - mov r0, r0, asr #1 - strh r0, [r1, #0x20] - ldr r2, [r1, #0x34] - ldr r0, [r1, #0x3c] - add r0, r2, r0 - add r0, r0, r0, lsr #31 - mov r0, r0, asr #1 - strh r0, [r1, #0x22] - b _0233FF84 -_0233FF6C: - add r5, r5, #1 -_0233FF70: - cmp r5, #0xf - blt _0233FD34 -_0233FF78: - add r4, r4, #1 -_0233FF7C: - cmp r4, #0xf - blt _0233FD08 -_0233FF84: - add sp, sp, #0x44 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0233FF8C: .word DUNGEON_PTR -_0233FF90: .word FLOOR_GENERATION_STATUS -_0233FF94: .word 0x000001C2 -_0233FF98: .word 0x0000270F - arm_func_end GenerateKecleonShop - - arm_func_start GenerateMonsterHouse -GenerateMonsterHouse: ; 0x0233FF9C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x100 - ldr r4, _02340218 ; =DUNGEON_PTR - movs r5, r3 - mov sl, r0 - mov sb, r1 - mov r8, r2 - ldr r6, [r4] - beq _02340210 - mov r0, #0x64 - bl DungeonRandInt - cmp r5, r0 - ble _02340210 - ldr r0, _0234021C ; =FLOOR_GENERATION_STATUS - ldrb r0, [r0, #3] - cmp r0, #0 - bne _02340210 - bl IsOutlawMonsterHouseFloor - cmp r0, #0 - bne _0233FFF8 - bl IsDestinationFloorWithMonster - cmp r0, #0 - bne _02340210 -_0233FFF8: - bl GetFloorType - cmp r0, #0 - bne _02340210 - mov r5, #0 - mov r2, r5 - mov r1, r5 - b _02340088 -_02340014: - ldr r0, _02340220 ; =0x000001C2 - mov r3, r1 - mla r4, r2, r0, sl - mov r7, #0x1e - b _0234007C -_02340028: - mla r0, r3, r7, r4 - ldrb fp, [r0, #8] - cmp fp, #0 - ldreqb fp, [r0, #0x11] - cmpeq fp, #0 - bne _02340078 - ldrb fp, [r0, #0xb] - cmp fp, #0 - ldrneb fp, [r0, #0xa] - cmpne fp, #0 - beq _02340078 - ldrb fp, [r0, #0xc] - cmp fp, #0 - ldreqb fp, [r0, #0xf] - cmpeq fp, #0 - ldreqb fp, [r0, #0x10] - cmpeq fp, #0 - ldreqb r0, [r0, #9] - cmpeq r0, #0 - addeq r5, r5, #1 -_02340078: - add r3, r3, #1 -_0234007C: - cmp r3, r8 - blt _02340028 - add r2, r2, #1 -_02340088: - cmp r2, sb - blt _02340014 - cmp r5, #0 - beq _02340210 - mov r1, #0 - mov r7, r1 - add r0, sp, #0 -_023400A4: - strb r7, [r0, r1] - add r1, r1, #1 - cmp r1, #0x100 - blt _023400A4 - mov r0, #1 - strb r0, [sp] - add fp, sp, #0 -_023400C0: - mov r0, r5 - bl DungeonRandInt - mov r4, r0 - mov r0, r5 - bl DungeonRandInt - add r7, r7, #1 - ldrb r2, [fp, r4] - ldrb r1, [fp, r0] - cmp r7, #0x40 - strb r1, [fp, r4] - strb r2, [fp, r0] - blt _023400C0 - mov r7, #0 - mov r4, r7 - add fp, sp, #0 - b _02340208 -_02340100: - ldr r0, _02340220 ; =0x000001C2 - mov r5, #0 - mul r3, r4, r0 - add r2, sl, r3 - mov lr, #0x1e - b _023401FC -_02340118: - mul r1, r5, lr - add r0, r2, r1 - ldrb ip, [r0, #8] - cmp ip, #0 - ldreqb ip, [r0, #0x11] - cmpeq ip, #0 - bne _023401F8 - ldrb ip, [r0, #0xb] - cmp ip, #0 - ldrneb ip, [r0, #0xa] - cmpne ip, #0 - beq _023401F8 - ldrb ip, [r0, #0xc] - cmp ip, #0 - ldreqb ip, [r0, #0xf] - cmpeq ip, #0 - ldreqb ip, [r0, #0x10] - cmpeq ip, #0 - ldreqb r0, [r0, #9] - cmpeq r0, #0 - bne _023401F8 - ldrb r0, [fp, r7] - cmp r0, #0 - beq _023401F4 - ldr r0, _0234021C ; =FLOOR_GENERATION_STATUS - add r2, sl, r3 - mov r3, #1 - strb r3, [r0, #1] - add r7, r2, r1 - strb r3, [r7, #0xe] - ldrsh r5, [r2, r1] - add r6, r6, #0x4000 - b _023401E4 -_0234019C: - ldrsh r4, [r7, #2] - b _023401D4 -_023401A4: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r2, [r0] - mov r1, r4 - orr r2, r2, #0x40 - strh r2, [r0] - mov r0, r5 - bl GetTile - ldrb r0, [r0, #7] - add r4, r4, #1 -#ifdef JAPAN - strb r0, [r6, #0x25] -#else - strb r0, [r6, #0xc9] -#endif -_023401D4: - ldrsh r0, [r7, #6] - cmp r4, r0 - blt _023401A4 - add r5, r5, #1 -_023401E4: - ldrsh r0, [r7, #4] - cmp r5, r0 - blt _0234019C - b _02340210 -_023401F4: - add r7, r7, #1 -_023401F8: - add r5, r5, #1 -_023401FC: - cmp r5, r8 - blt _02340118 - add r4, r4, #1 -_02340208: - cmp r4, sb - blt _02340100 -_02340210: - add sp, sp, #0x100 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02340218: .word DUNGEON_PTR -_0234021C: .word FLOOR_GENERATION_STATUS -_02340220: .word 0x000001C2 - arm_func_end GenerateMonsterHouse - - arm_func_start GenerateMazeRoom -GenerateMazeRoom: ; 0x02340224 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x100 - ldr r7, _02340450 ; =DUNGEON_PTR - movs r8, r3 - mov r6, r0 - mov r5, r1 - mov r4, r2 - ldr r7, [r7] - beq _02340448 - mov r0, #0x64 - bl DungeonRandInt - cmp r8, r0 - ble _02340448 - add r0, r7, #0x4000 -#ifdef JAPAN - ldrsh r0, [r0, #0x3a] -#else - ldrsh r0, [r0, #0xde] -#endif - cmp r0, #0 - bge _02340448 - mov sb, #0 - mov r1, sb - b _02340310 -_02340274: - ldr r0, _02340454 ; =0x000001C2 - mov r2, #0 - mla r3, r1, r0, r6 - mov r7, #0x1e - b _02340304 -_02340288: - mla r0, r2, r7, r3 - ldrb r8, [r0, #8] - cmp r8, #0 - ldreqb r8, [r0, #0x11] - cmpeq r8, #0 - bne _02340300 - ldrb r8, [r0, #0xb] - cmp r8, #0 - ldrneb r8, [r0, #0xa] - cmpne r8, #0 - beq _02340300 - ldrb r8, [r0, #0xc] - cmp r8, #0 - ldreqb r8, [r0, #0xf] - cmpeq r8, #0 - ldreqb r8, [r0, #0xe] - cmpeq r8, #0 - ldreqb r8, [r0, #9] - cmpeq r8, #0 - bne _02340300 - ldrsh sl, [r0, #4] - ldrsh r8, [r0] - sub r8, sl, r8 - tst r8, #1 - beq _02340300 - ldrsh r8, [r0, #6] - ldrsh r0, [r0, #2] - sub r0, r8, r0 - tst r0, #1 - addne sb, sb, #1 -_02340300: - add r2, r2, #1 -_02340304: - cmp r2, r4 - blt _02340288 - add r1, r1, #1 -_02340310: - cmp r1, r5 - blt _02340274 - cmp sb, #0 - beq _02340448 - mov r1, #0 - mov sl, r1 - add r0, sp, #0 -_0234032C: - strb sl, [r0, r1] - add r1, r1, #1 - cmp r1, #0x100 - blt _0234032C - mov r0, #1 - strb r0, [sp] - add r7, sp, #0 -_02340348: - mov r0, sb - bl DungeonRandInt - mov r8, r0 - mov r0, sb - bl DungeonRandInt - add sl, sl, #1 - ldrb r2, [r7, r8] - ldrb r1, [r7, r0] - cmp sl, #0x40 - strb r1, [r7, r8] - strb r2, [r7, r0] - blt _02340348 - mov r7, #0 - mov r2, r7 - b _02340440 -_02340384: - ldr r0, _02340454 ; =0x000001C2 - mov r3, #0 - mla r1, r2, r0, r6 - add sl, sp, #0 - mov r8, #0x1e - b _02340434 -_0234039C: - mla r0, r3, r8, r1 - ldrb sb, [r0, #8] - cmp sb, #0 - ldreqb sb, [r0, #0x11] - cmpeq sb, #0 - bne _02340430 - ldrb sb, [r0, #0xb] - cmp sb, #0 - ldrneb sb, [r0, #0xa] - cmpne sb, #0 - beq _02340430 - ldrb sb, [r0, #0xc] - cmp sb, #0 - ldreqb sb, [r0, #0xf] - cmpeq sb, #0 - ldreqb sb, [r0, #0xe] - cmpeq sb, #0 - ldreqb sb, [r0, #9] - cmpeq sb, #0 - bne _02340430 - ldrsh ip, [r0, #4] - ldrsh sb, [r0] - sub sb, ip, sb - tst sb, #1 - beq _02340430 - ldrsh ip, [r0, #6] - ldrsh sb, [r0, #2] - sub sb, ip, sb - tst sb, #1 - beq _02340430 - ldrb sb, [sl, r7] - cmp sb, #0 - beq _0234042C - mov r1, #0 - bl GenerateMaze - b _02340448 -_0234042C: - add r7, r7, #1 -_02340430: - add r3, r3, #1 -_02340434: - cmp r3, r4 - blt _0234039C - add r2, r2, #1 -_02340440: - cmp r2, r5 - blt _02340384 -_02340448: - add sp, sp, #0x100 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02340450: .word DUNGEON_PTR -_02340454: .word 0x000001C2 - arm_func_end GenerateMazeRoom - - arm_func_start GenerateMaze -GenerateMaze: ; 0x02340458 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0x10 - ldr r2, _023406D0 ; =FLOOR_GENERATION_STATUS - mov r3, #1 - mov r5, r0 - strb r3, [r2, #7] - strb r3, [r5, #0x10] - mov r4, r1 - ldrsh r0, [r5] - ldrsh r1, [r5, #2] - bl GetTile - ldrsh r1, [r5] - ldrb r7, [r0, #7] - add r6, r1, #1 - b _023404DC -_02340494: - ldrsh r1, [r5, #2] - mov r0, r6 - sub r1, r1, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _023404D8 - ldrsh r3, [r5, #2] - ldrsh r2, [r5, #4] - mov r0, r6 - sub r1, r3, #1 - str r2, [sp] - ldrsh r2, [r5, #6] - stmib sp, {r2, r4, r7} - ldrsh r2, [r5] - bl GenerateMazeLine -_023404D8: - add r6, r6, #2 -_023404DC: - ldrsh r0, [r5, #4] - sub r0, r0, #1 - cmp r6, r0 - blt _02340494 - ldrsh r0, [r5, #2] - add r6, r0, #1 - b _02340538 -_023404F8: - ldrsh r0, [r5, #4] - mov r1, r6 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _02340534 - ldrsh r0, [r5, #4] - mov r1, r6 - str r0, [sp] - ldrsh r2, [r5, #6] - stmib sp, {r2, r4, r7} - ldrsh r2, [r5] - ldrsh r3, [r5, #2] - bl GenerateMazeLine -_02340534: - add r6, r6, #2 -_02340538: - ldrsh r0, [r5, #6] - sub r0, r0, #1 - cmp r6, r0 - blt _023404F8 - ldrsh r0, [r5] - add r6, r0, #1 - b _02340594 -_02340554: - ldrsh r1, [r5, #6] - mov r0, r6 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _02340590 - ldrsh r1, [r5, #6] - ldrsh r2, [r5, #4] - mov r0, r6 - str r2, [sp] - stmib sp, {r1, r4, r7} - ldrsh r2, [r5] - ldrsh r3, [r5, #2] - bl GenerateMazeLine -_02340590: - add r6, r6, #2 -_02340594: - ldrsh r0, [r5, #4] - sub r0, r0, #1 - cmp r6, r0 - blt _02340554 - ldrsh r0, [r5, #2] - add r6, r0, #1 - b _023405F8 -_023405B0: - ldrsh r0, [r5] - mov r1, r6 - sub r0, r0, #1 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _023405F4 - ldrsh r2, [r5] - ldrsh r3, [r5, #4] - mov r1, r6 - sub r0, r2, #1 - str r3, [sp] - ldrsh r3, [r5, #6] - stmib sp, {r3, r4, r7} - ldrsh r3, [r5, #2] - bl GenerateMazeLine -_023405F4: - add r6, r6, #2 -_023405F8: - ldrsh r0, [r5, #6] - sub r0, r0, #1 - cmp r6, r0 - blt _023405B0 - ldrsh r0, [r5] - add r8, r0, #3 - b _023406B8 -_02340614: - ldrsh r0, [r5, #2] - sub r6, r8, #1 - add sb, r0, #3 - b _023406A4 -_02340624: - mov r0, r8 - mov r1, sb - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _023406A0 - cmp r4, #0 - mov r0, r6 - mov r1, sb - beq _0234066C - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #2 - b _02340678 -_0234066C: - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 -_02340678: - strh r1, [r0] - ldrsh r2, [r5, #4] - mov r0, r8 - mov r1, sb - str r2, [sp] - ldrsh r2, [r5, #6] - stmib sp, {r2, r4, r7} - ldrsh r2, [r5] - ldrsh r3, [r5, #2] - bl GenerateMazeLine -_023406A0: - add sb, sb, #2 -_023406A4: - ldrsh r0, [r5, #6] - sub r0, r0, #3 - cmp sb, r0 - blt _02340624 - add r8, r8, #2 -_023406B8: - ldrsh r0, [r5, #4] - sub r0, r0, #3 - cmp r8, r0 - blt _02340614 - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_023406D0: .word FLOOR_GENERATION_STATUS - arm_func_end GenerateMaze - - arm_func_start GenerateMazeLine -GenerateMazeLine: ; 0x023406D4 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0xc - ldr r4, [sp, #0x34] - ldr fp, [sp, #0x30] - ldr r7, [sp, #0x38] - ldr r6, [sp, #0x3c] - str r4, [sp, #0x34] - mov sb, r0 - mov r8, r1 - str r2, [sp] - str r3, [sp, #4] -_02340700: - mov r0, #4 - bl DungeonRandInt - mov r4, r0 - mov r0, sb - mov r1, r8 - mov sl, #0 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - mvn r0, #1 - str r0, [sp, #8] -_02340730: - and r5, r4, #3 - cmp r5, #3 - addls pc, pc, r5, lsl #2 - b _02340774 -_02340740: ; jump table - b _02340750 ; case 0 - b _0234075C ; case 1 - b _02340768 ; case 2 - b _02340774 ; case 3 -_02340750: - mov r0, #2 - mov r2, #0 - b _0234077C -_0234075C: - mov r0, #0 - ldr r2, [sp, #8] - b _0234077C -_02340768: - ldr r0, [sp, #8] - mov r2, #0 - b _0234077C -_02340774: - mov r0, #0 - mov r2, #2 -_0234077C: - ldr r1, [sp] - add r0, sb, r0 - cmp r1, r0 - bgt _023407C4 - cmp fp, r0 - ble _023407C4 - add r1, r8, r2 - ldr r2, [sp, #4] - cmp r2, r1 - bgt _023407C4 - ldr r2, [sp, #0x34] - cmp r2, r1 - ble _023407C4 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - beq _023407D8 -_023407C4: - add r4, r4, #1 - add sl, sl, #1 - cmp sl, #4 - blt _02340730 - b _02340874 -_023407D8: - cmp r5, #3 - addls pc, pc, r5, lsl #2 - b _02340700 -_023407E4: ; jump table - b _023407F4 ; case 0 - b _02340814 ; case 1 - b _02340834 ; case 2 - b _02340854 ; case 3 -_023407F4: - mov r1, r8 - add r0, sb, #1 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - add sb, sb, #2 - b _02340700 -_02340814: - mov r0, sb - sub r1, r8, #1 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - sub r8, r8, #2 - b _02340700 -_02340834: - mov r1, r8 - sub r0, sb, #1 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - sub sb, sb, #2 - b _02340700 -_02340854: - mov r0, sb - add r1, r8, #1 - bl GetTileSafe - mov r1, r7 - and r2, r6, #0xff - bl SetTerrainObstacleChecked - add r8, r8, #2 - b _02340700 -_02340874: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - arm_func_end GenerateMazeLine - - arm_func_start SetSpawnFlag5 -SetSpawnFlag5: ; 0x0234087C - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldrsh r5, [r6] - b _023408C0 -_0234088C: - ldrsh r4, [r6, #2] - b _023408B0 -_02340894: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0, #2] - add r4, r4, #1 - orr r1, r1, #0x20 - strh r1, [r0, #2] -_023408B0: - ldrsh r0, [r6, #6] - cmp r4, r0 - blt _02340894 - add r5, r5, #1 -_023408C0: - ldrsh r0, [r6, #4] - cmp r5, r0 - blt _0234088C - ldmia sp!, {r4, r5, r6, pc} - arm_func_end SetSpawnFlag5 - - arm_func_start IsNextToHallway -IsNextToHallway: ; 0x023408D0 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mvn r5, #0 - mov sl, r0 - mov sb, r1 - mov r4, r5 - b _02340964 -_023408E8: - adds r8, sl, r5 - bmi _02340960 - cmp r8, #0x38 - bge _0234096C - mov r6, r4 - b _02340958 -_02340900: - adds r7, sb, r6 - bmi _02340954 - cmp r7, #0x20 - bge _02340960 - cmp r5, #0 - cmpne r6, #0 - bne _02340954 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #1 - bne _02340954 - mov r0, r8 - mov r1, r7 - bl GetTile - ldrb r0, [r0, #7] - cmp r0, #0xff - moveq r0, #1 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} -_02340954: - add r6, r6, #1 -_02340958: - cmp r6, #1 - ble _02340900 -_02340960: - add r5, r5, #1 -_02340964: - cmp r5, #1 - ble _023408E8 -_0234096C: - mov r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end IsNextToHallway - - arm_func_start ResolveInvalidSpawns -ResolveInvalidSpawns: ; 0x02340974 - stmdb sp!, {r3, r4, r5, lr} - mov r5, #0 -_0234097C: - mov r4, #0 -_02340980: - mov r0, r5 - mov r1, r4 - bl GetTileSafe - ldrh r1, [r0] - and r1, r1, #3 - cmp r1, #1 - beq _023409BC - ldrh r1, [r0] - tst r1, #0x110 - ldrneh r1, [r0, #2] - bicne r1, r1, #2 - strneh r1, [r0, #2] - ldrh r1, [r0, #2] - bic r1, r1, #4 - strh r1, [r0, #2] -_023409BC: - ldrh r1, [r0, #2] - tst r1, #1 - beq _023409E0 - ldrh r1, [r0] - orr r1, r1, #0x200 - strh r1, [r0] - ldrh r1, [r0, #2] - bic r1, r1, #4 - strh r1, [r0, #2] -_023409E0: - ldrh r1, [r0, #2] - add r4, r4, #1 - tst r1, #2 - bicne r1, r1, #4 - strneh r1, [r0, #2] - cmp r4, #0x20 - blt _02340980 - add r5, r5, #1 - cmp r5, #0x38 - blt _0234097C - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ResolveInvalidSpawns - - arm_func_start ConvertSecondaryTerrainToChasms -ConvertSecondaryTerrainToChasms: ; 0x02340A0C - stmdb sp!, {r4, r5, r6, lr} - mov r6, #0 - mov r4, r6 -_02340A18: - mov r5, r4 -_02340A1C: - mov r0, r6 - mov r1, r5 - bl GetTile - ldrh r0, [r0] - and r0, r0, #3 - cmp r0, #2 - bne _02340A5C - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] - ldrh r1, [r0] - orr r1, r1, #3 - strh r1, [r0] -_02340A5C: - add r5, r5, #1 - cmp r5, #0x20 - blt _02340A1C - add r6, r6, #1 - cmp r6, #0x38 - blt _02340A18 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end ConvertSecondaryTerrainToChasms - - arm_func_start EnsureImpassableTilesAreWalls -EnsureImpassableTilesAreWalls: ; 0x02340A78 - stmdb sp!, {r4, r5, r6, lr} - mov r6, #0 - mov r4, r6 -_02340A84: - mov r5, r4 -_02340A88: - mov r0, r6 - mov r1, r5 - bl GetTile - ldrh r0, [r0] - tst r0, #0x10 - beq _02340AB8 - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - bic r1, r1, #3 - strh r1, [r0] -_02340AB8: - add r5, r5, #1 - cmp r5, #0x20 - blt _02340A88 - add r6, r6, #1 - cmp r6, #0x38 - blt _02340A84 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end EnsureImpassableTilesAreWalls - - arm_func_start InitializeTile -InitializeTile: ; 0x02340AD4 - mov r2, #0 - strh r2, [r0] - strh r2, [r0, #2] - mov r1, #0xff - strb r1, [r0, #7] - strh r2, [r0, #4] - strb r2, [r0, #8] - strb r2, [r0, #9] - strb r2, [r0, #0xa] - strb r2, [r0, #0xb] - strb r2, [r0, #6] - str r2, [r0, #0xc] - str r2, [r0, #0x10] - bx lr - arm_func_end InitializeTile - - arm_func_start ResetFloor -ResetFloor: ; 0x02340B0C -#ifdef JAPAN -#define RESET_FLOOR_OFFSET -0xA4 -#else -#define RESET_FLOOR_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r6, #0 - mov r4, r6 -_02340B18: - mov r5, r4 - sub r7, r6, #1 -_02340B20: - mov r0, r6 - mov r1, r5 - bl GetTileSafe - bl InitializeTile - sub r8, r5, #1 - mov r0, r6 - mov r1, r8 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r1, r8 - add r0, r6, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r1, r8 - add r0, r6, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - add r0, r6, #1 - add r1, r5, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r0, r6 - add r1, r5, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r0, r7 - add r1, r5, #1 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r0, r7 - mov r1, r5 - bl PosIsOutOfBounds - cmp r0, #0 - bne _02340BD4 - mov r0, r7 - mov r1, r8 - bl PosIsOutOfBounds - cmp r0, #0 - beq _02340BEC -_02340BD4: - mov r0, r6 - mov r1, r5 - bl GetTileSafe - ldrh r1, [r0] - orr r1, r1, #0x10 - strh r1, [r0] -_02340BEC: - add r5, r5, #1 - cmp r5, #0x20 - blt _02340B20 - add r6, r6, #1 - cmp r6, #0x38 - blt _02340B18 - ldr r6, _02340CA8 ; =DUNGEON_PTR - mov sb, #0 - ldr r0, [r6] - mvn r1, #0 - add r0, r0, #0xcc00 - strh r1, [r0, #0xe4 + RESET_FLOOR_OFFSET] - ldr r0, [r6] - mov r7, sb - add r0, r0, #0xcc00 - strh r1, [r0, #0xe6 + RESET_FLOOR_OFFSET] - mov r4, #0x14 - mov r5, #0xa0 -_02340C34: - mul r8, sb, r5 - mov sl, r7 -_02340C3C: - ldr r0, [r6] -#ifdef JAPAN - add r0, r0, #0xbc - add r0, r0, #0xcc00 -#else - add r0, r0, #0xd60 - add r0, r0, #0xc000 -#endif - add r0, r0, r8 - mla r0, sl, r4, r0 - bl InitializeTile - add sl, sl, #1 - cmp sl, #8 - blt _02340C3C - add sb, sb, #1 - cmp sb, #8 - blt _02340C34 - ldr r1, _02340CA8 ; =DUNGEON_PTR - mov r3, #0 - ldr r0, [r1] - mov r2, r3 - add r0, r0, #0x3f00 - strh r3, [r0, #0xc0 + RESET_FLOOR_OFFSET] -_02340C84: - ldr r0, [r1] - add r0, r0, r3, lsl #2 - add r0, r0, #0x12000 - ldr r0, [r0, #0xcc8 + RESET_FLOOR_OFFSET] - add r3, r3, #1 - str r2, [r0] - cmp r3, #0x40 - blt _02340C84 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02340CA8: .word DUNGEON_PTR - arm_func_end ResetFloor diff --git a/asm/overlay_29_023388B0.s b/asm/overlay_29_023388B0.s new file mode 100644 index 00000000..afeb1333 --- /dev/null +++ b/asm/overlay_29_023388B0.s @@ -0,0 +1,666 @@ + .include "asm/macros.inc" + .include "overlay_29_023388B0.inc" + + .text + + arm_func_start LoadWeather3DFiles +LoadWeather3DFiles: ; 0x023388B0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + ldr r0, _02338974 ; =ov29_02352F1C + mov sl, #0 + ldr r1, [r0, #4] + ldr r0, [r0] + ldr r7, _02338978 ; =ov29_02352F40 + add r8, sp, #0 + str r1, [sp, #4] + str r0, [sp] + mov r6, #4 + mov r5, #0x300 + mov fp, sl + mov r4, #0x14 +_023388E8: + mul sb, sl, r4 + ldrh r2, [r7, sb] + mov r0, r8 + mov r1, r6 + mov r3, r5 + add sb, r7, sb + bl LoadWteFromFileDirectory + ldrsh r2, [sb, #8] + ldr r0, [sp, #4] + ldr r1, [sb, #4] + mov r3, fp + bl ProcessWte + mov r0, r8 + bl DelayWteFree + add sl, sl, #1 + cmp sl, #3 + blt _023388E8 + ldr r0, _0233897C ; =ov29_0237CACC + mov r1, #0 + bl ov29_02338D94 + ldr r0, _02338980 ; =ov29_0237CD40 + mov r1, #1 + bl ov29_02338D94 + ldr r0, _02338984 ; =ov29_02352F7C + ldr r2, _0233897C ; =ov29_0237CACC + mov r1, #0 + ldr r4, [r0] + strb r1, [r2, #0x240] + ldr r3, [r0, #4] + str r4, [r2, #0x254] + ldr r0, _02338980 ; =ov29_0237CD40 + str r3, [r2, #0x258] + bl ov29_02338D34 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02338974: .word ov29_02352F1C +_02338978: .word ov29_02352F40 +_0233897C: .word ov29_0237CACC +_02338980: .word ov29_0237CD40 +_02338984: .word ov29_02352F7C + arm_func_end LoadWeather3DFiles + + arm_func_start Weather3DEffectActive +Weather3DEffectActive: ; 0x02338988 + stmdb sp!, {r3, lr} + ldr r0, _023389BC ; =ov29_0237CACC + bl ov29_02338D58 + cmp r0, #0 + bne _023389AC + ldr r0, _023389C0 ; =ov29_0237CD40 + bl ov29_02338D58 + cmp r0, #0 + beq _023389B4 +_023389AC: + mov r0, #1 + ldmia sp!, {r3, pc} +_023389B4: + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_023389BC: .word ov29_0237CACC +_023389C0: .word ov29_0237CD40 + arm_func_end Weather3DEffectActive + + arm_func_start ov29_023389C4 +ov29_023389C4: ; 0x023389C4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + mov r0, #0xc + mul r2, r4, r0 + ldr r1, _02338A3C ; =ov10_022C6326 + ldr r0, _02338A40 ; =ov29_0237CACC + ldrb r1, [r1, r2] + bl ov29_02338D34 + cmp r4, #0xc3 + bne _02338A34 + ldr r1, _02338A44 ; =ov29_02352F1C + ldr r2, _02338A48 ; =0x000003EB + ldr r3, [r1, #0xc] + ldr ip, [r1, #8] + str r3, [sp, #4] + add r0, sp, #0 + mov r1, #4 + mov r3, #0 + str ip, [sp] + bl LoadWteFromFileDirectory + ldr r0, [sp, #4] + mov r1, #0xb000 + mov r2, #0x14 + mov r3, #0 + bl ProcessWte + add r0, sp, #0 + bl DelayWteFree +_02338A34: + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02338A3C: .word ov10_022C6326 +_02338A40: .word ov29_0237CACC +_02338A44: .word ov29_02352F1C +_02338A48: .word 0x000003EB + arm_func_end ov29_023389C4 + + arm_func_start ov29_02338A4C +ov29_02338A4C: ; 0x02338A4C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r1, _02338AB4 ; =ov29_02353730 + mov r4, r0 + ldrb r1, [r1, r4, lsl #3] + ldr r0, _02338AB8 ; =ov29_0237CD40 + bl ov29_02338D34 + ldr r1, _02338ABC ; =ov29_0235372C + mov sb, #0 + ldr r7, [r1, r4, lsl #3] + ldr r0, _02338AC0 ; =ov29_0237CACC + ldr r5, _02338AB8 ; =ov29_0237CD40 + str r7, [r0, #0x4e4] + mov r6, sb + mov r4, #0xc0 +_02338A84: + mla sl, sb, r4, r5 + mov r8, r6 +_02338A8C: + mov r1, r7 + add r0, sl, r8, lsl #6 + bl ov29_02338E50 + add r8, r8, #1 + cmp r8, #3 + blt _02338A8C + add sb, sb, #1 + cmp sb, #3 + blt _02338A84 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02338AB4: .word ov29_02353730 +_02338AB8: .word ov29_0237CD40 +_02338ABC: .word ov29_0235372C +_02338AC0: .word ov29_0237CACC + arm_func_end ov29_02338A4C + + arm_func_start RenderWeather3D +RenderWeather3D: ; 0x02338AC4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r5, #0 +_02338ACC: + ldr r1, _02338D28 ; =ov29_0237CACC + mov r0, #0x274 + mla r6, r5, r0, r1 + ldrb r0, [r6, #0x240] + cmp r0, #0 + beq _02338D18 + bl DungeonScreenEffectActive + cmp r0, #0 + movne r0, #0 + strneb r0, [r6, #0x26d] + bne _02338B04 + mov r0, r6 + mov r1, #1 + bl ov29_02338D6C +_02338B04: + mov r0, r6 + bl ov29_02338D58 + cmp r0, #0 + beq _02338D18 + ldr r4, [r6, #0x24c] + ldr fp, [r6, #0x250] + mov r7, #0 +_02338B20: + mov r0, #0xc0 + mla sl, r7, r0, r6 + mov r0, r7, lsl #7 + add sb, r0, fp, asr #8 + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + mov r8, #0 + str r0, [sp] +_02338B40: + cmp sb, #0xc0 + bge _02338B74 + mov r0, r8, lsl #7 + ldr r1, [r6, #0x244] + add r2, r0, r4, asr #8 + mov r0, r8, lsl #6 + strh r2, [sl, r0] + ldr r2, [sp] + add r0, sl, r8, lsl #6 + strh r2, [r0, #2] + mov r1, r1, asr #8 + strb r1, [r0, #0x2f] + bl sub_0201F2A0 +_02338B74: + add r8, r8, #1 + cmp r8, #3 + blt _02338B40 + add r7, r7, #1 + cmp r7, #3 + blt _02338B20 + ldrb r0, [r6, #0x240] + cmp r0, #9 + beq _02338BBC + ldr r1, [r6, #0x24c] + ldr r0, [r6, #0x254] + add r0, r1, r0 + str r0, [r6, #0x24c] + ldr r1, [r6, #0x250] + ldr r0, [r6, #0x258] + add r0, r1, r0 + str r0, [r6, #0x250] + b _02338C48 +_02338BBC: + ldr r0, [r6, #0x25c] + bl SinAbs4096 + ldr r3, [r6, #0x254] + mov r2, #0xa + mov r1, r0 + mul r0, r3, r2 + bl MultiplyByFixedPoint + ldr r1, [r6, #0x24c] + add r0, r1, r0 + str r0, [r6, #0x24c] + ldr r0, [r6, #0x260] + bl SinAbs4096 + ldr r3, [r6, #0x258] + mov r2, #0xa + mov r1, r0 + mul r0, r3, r2 + bl MultiplyByFixedPoint + ldr r2, [r6, #0x250] + ldr r1, _02338D2C ; =0x00000FFF + add r0, r2, r0 + str r0, [r6, #0x250] + ldr r2, [r6, #0x25c] + ldr r0, [r6, #0x264] + add r0, r2, r0 + str r0, [r6, #0x25c] + ldr r2, [r6, #0x260] + ldr r0, [r6, #0x268] + add r0, r2, r0 + str r0, [r6, #0x260] + ldr r0, [r6, #0x25c] + and r0, r0, r1 + str r0, [r6, #0x25c] + ldr r0, [r6, #0x260] + and r0, r0, r1 + str r0, [r6, #0x260] +_02338C48: + ldr r1, [r6, #0x24c] + cmp r1, #0 + subgt r0, r1, #0x8000 + strgt r0, [r6, #0x24c] + bgt _02338C70 + mov r0, #0x8000 + rsb r0, r0, #0 + cmp r1, r0 + addlt r0, r1, #0x8000 + strlt r0, [r6, #0x24c] +_02338C70: + ldr r1, [r6, #0x250] + cmp r1, #0 + subgt r0, r1, #0x8000 + strgt r0, [r6, #0x250] + bgt _02338C98 + mov r0, #0x8000 + rsb r0, r0, #0 + cmp r1, r0 + addlt r0, r1, #0x8000 + strlt r0, [r6, #0x250] +_02338C98: + ldrb r0, [r6, #0x26e] + cmp r0, #0 + beq _02338CC8 + ldr r0, [r6, #0x244] + add r0, r0, #0x400 + str r0, [r6, #0x244] + cmp r0, #0x4000 + movge r0, #1 + strgeb r0, [r6, #0x26c] + movge r0, #0 + strgeb r0, [r6, #0x26e] + b _02338D18 +_02338CC8: + ldrb r0, [r6, #0x26c] + ldr r1, [r6, #0x244] + cmp r0, #0 + ldr r0, [r6, #0x248] + bne _02338CFC + sub r0, r1, r0 + str r0, [r6, #0x244] + cmp r0, #0x4000 + movlt r0, #1 + strltb r0, [r6, #0x26c] + movlt r0, #0x4000 + strlt r0, [r6, #0x244] + b _02338D18 +_02338CFC: + add r0, r1, r0 + str r0, [r6, #0x244] + cmp r0, #0xc000 + movgt r0, #0 + strgtb r0, [r6, #0x26c] + movgt r0, #0xc000 + strgt r0, [r6, #0x244] +_02338D18: + add r5, r5, #1 + cmp r5, #2 + blt _02338ACC + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02338D28: .word ov29_0237CACC +_02338D2C: .word 0x00000FFF + arm_func_end RenderWeather3D + + arm_func_start ov29_02338D30 +ov29_02338D30: ; 0x02338D30 + bx lr + arm_func_end ov29_02338D30 + + arm_func_start ov29_02338D34 +ov29_02338D34: ; 0x02338D34 + ldr r3, _02338D54 ; =ov29_02352F7C + strb r1, [r0, #0x240] + add r2, r3, r1, lsl #3 + ldr r3, [r3, r1, lsl #3] + ldr r1, [r2, #4] + str r3, [r0, #0x254] + str r1, [r0, #0x258] + bx lr + .align 2, 0 +_02338D54: .word ov29_02352F7C + arm_func_end ov29_02338D34 + + arm_func_start ov29_02338D58 +ov29_02338D58: ; 0x02338D58 + ldrb r1, [r0, #0x240] + cmp r1, #0 + moveq r0, #0 + ldrneb r0, [r0, #0x26d] + bx lr + arm_func_end ov29_02338D58 + + arm_func_start ov29_02338D6C +ov29_02338D6C: ; 0x02338D6C + cmp r1, #0 + beq _02338D8C + ldrb r2, [r0, #0x26d] + cmp r2, #0 + moveq r2, #1 + streqb r2, [r0, #0x26e] + moveq r2, #0 + streq r2, [r0, #0x244] +_02338D8C: + strb r1, [r0, #0x26d] + bx lr + arm_func_end ov29_02338D6C + + arm_func_start ov29_02338D94 +ov29_02338D94: ; 0x02338D94 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov r0, #0x4000 + str r0, [sl, #0x244] + mov r0, #0 + str r0, [sl, #0x248] + strb r0, [sl, #0x26c] + str r0, [sl, #0x24c] + str r0, [sl, #0x250] + mov r0, #0x400 + mov sb, r1 + bl DungeonRandInt + str r0, [sl, #0x25c] + mov r0, #0x400 + bl DungeonRandInt + str r0, [sl, #0x260] + mov r0, #4 + str r0, [sl, #0x264] + mov r0, #1 + str r0, [sl, #0x268] + mov r5, #0 + strb r0, [sl, #0x26d] + strb r5, [sl, #0x26e] + str sb, [sl, #0x270] + mov fp, r5 +_02338DF8: + mov r0, #0xc0 + mla r8, r5, r0, sl + mov r6, #0 +_02338E04: + add r7, r8, r6, lsl #6 + mov r0, r7 + mov r4, r6, lsl #6 + bl InitRender3dElement64 + strb fp, [r7, #0x3c] + strh fp, [r8, r4] + strh fp, [r7, #2] + ldr r2, [sl, #0x244] + mov r0, r7 + mov r1, sb + strb r2, [r7, #0x2f] + bl ov29_02338E50 + add r6, r6, #1 + cmp r6, #3 + blt _02338E04 + add r5, r5, #1 + cmp r5, #3 + blt _02338DF8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end ov29_02338D94 + + arm_func_start ov29_02338E50 +ov29_02338E50: ; 0x02338E50 + ldr r3, _02338F08 ; =ov29_02352F40 + mov r2, #0x14 + mla r2, r1, r2, r3 + ldr r3, [r2, #4] + mov r1, #0 + str r3, [r0, #0x20] + strh r1, [r0, #0x16] + strh r1, [r0, #0x18] + mov r1, #0x80 + strh r1, [r0, #0x1a] + strh r1, [r0, #0x1c] + ldrh r3, [r0, #0x14] + ldr r1, _02338F0C ; =_020AFC70 + bic r3, r3, #7 + orr r3, r3, #4 + strh r3, [r0, #0x14] + ldrh r3, [r0, #0x14] + bic r3, r3, #0x38 + orr r3, r3, #0x20 + strh r3, [r0, #0x14] + ldrh r3, [r0, #0x14] + bic r3, r3, #0xc0 + strh r3, [r0, #0x14] + ldrh r3, [r0, #0x14] + bic r3, r3, #0x700 + orr r3, r3, #0x300 + strh r3, [r0, #0x14] + ldrh r3, [r0, #0x14] + bic r3, r3, #0x1800 + strh r3, [r0, #0x14] + ldrh r3, [r0, #0x14] + bic r3, r3, #0x6000 + strh r3, [r0, #0x14] + ldrh r3, [r0, #0x14] + orr r3, r3, #0x8000 + strh r3, [r0, #0x14] + ldr r3, [r1] + ldrsh r1, [r2, #8] + ldr r3, [r3, #0xe0] + add r1, r3, r1, lsl #9 + str r1, [r0, #0x24] + ldr r1, [r2, #0xc] + strh r1, [r0, #0x2a] + ldr r1, [r2, #0x10] + strb r1, [r0, #0x3e] + bx lr + .align 2, 0 +_02338F08: .word ov29_02352F40 +_02338F0C: .word _020AFC70 + arm_func_end ov29_02338E50 + + arm_func_start ov29_02338F10 +ov29_02338F10: ; 0x02338F10 + ldr r0, _02338F20 ; =ov29_0235376C + mov r1, #0x64 + strh r1, [r0, #2] + bx lr + .align 2, 0 +_02338F20: .word ov29_0235376C + arm_func_end ov29_02338F10 + + arm_func_start ov29_02338F24 +ov29_02338F24: ; 0x02338F24 + ldr r2, _02338F34 ; =ov29_0235376C + strh r0, [r2, #2] + strh r1, [r2, #4] + bx lr + .align 2, 0 +_02338F34: .word ov29_0235376C + arm_func_end ov29_02338F24 + + arm_func_start ov29_02338F38 +ov29_02338F38: ; 0x02338F38 + ldr r1, _02338F44 ; =ov29_0237CFB8 + strb r0, [r1, #2] + bx lr + .align 2, 0 +_02338F44: .word ov29_0237CFB8 + arm_func_end ov29_02338F38 + + arm_func_start ov29_02338F48 +ov29_02338F48: ; 0x02338F48 + ldr r1, _02338F54 ; =ov29_0237CFB8 + strb r0, [r1] + bx lr + .align 2, 0 +_02338F54: .word ov29_0237CFB8 + arm_func_end ov29_02338F48 + + arm_func_start ov29_02338F58 +ov29_02338F58: ; 0x02338F58 + ldr r1, _02338F64 ; =ov29_0235376C + strb r0, [r1, #1] + bx lr + .align 2, 0 +_02338F64: .word ov29_0235376C + arm_func_end ov29_02338F58 + + arm_func_start ov29_02338F68 +ov29_02338F68: ; 0x02338F68 + stmdb sp!, {r3, lr} + ldr r1, _02338FBC ; =0x0000040B + ldr r2, _02338FC0 ; =ov29_02353784 + mov r0, #4 + mov r3, #0 + bl DirectoryFileMngr_OpenDirectoryFile + ldr r1, _02338FC4 ; =ov29_0235376C + add r0, sp, #0 + ldr r1, [r1, #0x18] + bl HandleSir0Translation + ldr r1, [sp] + ldr r0, _02338FC4 ; =ov29_0235376C + str r1, [r0, #8] + bl GetMinimapData + add r0, r0, #0xe000 + mov r2, #0 + ldr r1, _02338FC4 ; =ov29_0235376C + strb r2, [r0, #0x447] + str r2, [r1, #0xc] + strb r2, [r1] + ldmia sp!, {r3, pc} + .align 2, 0 +#ifdef JAPAN +_02338FBC: .word 0x000003FF +#else +_02338FBC: .word 0x0000040B +#endif +_02338FC0: .word ov29_02353784 +_02338FC4: .word ov29_0235376C + arm_func_end ov29_02338F68 + + arm_func_start ov29_02338FC8 +ov29_02338FC8: ; 0x02338FC8 + stmdb sp!, {r3, lr} + ldr r0, _02339000 ; =ov29_0235376C + ldr r0, [r0, #8] + cmp r0, #0 + beq _02338FF0 + ldr r0, _02339004 ; =ov29_02353784 + bl UnloadFile + ldr r0, _02339000 ; =ov29_0235376C + mov r1, #0 + str r1, [r0, #8] +_02338FF0: + ldr r0, _02339008 ; =ov29_0237CFB8 + mov r1, #0 + strb r1, [r0, #2] + ldmia sp!, {r3, pc} + .align 2, 0 +_02339000: .word ov29_0235376C +_02339004: .word ov29_02353784 +_02339008: .word ov29_0237CFB8 + arm_func_end ov29_02338FC8 + + arm_func_start ov29_0233900C +ov29_0233900C: ; 0x0233900C + stmdb sp!, {r3, lr} + ldr r0, _02339044 ; =ov29_0235352C + ldr r0, [r0] + add r0, r0, #0x20 + bl ov29_022DE288 + ldr r1, _02339044 ; =ov29_0235352C + ldr r2, _02339048 ; =ov29_0235376C + ldr r1, [r1] + str r0, [r2, #0x10] + add r0, r1, #0x2c + bl ov29_022DE288 + ldr r1, _02339048 ; =ov29_0235376C + str r0, [r1, #0x14] + ldmia sp!, {r3, pc} + .align 2, 0 +_02339044: .word ov29_0235352C +_02339048: .word ov29_0235376C + arm_func_end ov29_0233900C + + arm_func_start ov29_0233904C +ov29_0233904C: ; 0x0233904C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov fp, r0 + bl GetMinimapData + mov r7, r0 + mov r6, #0 + add r4, r7, #0x7000 +_02339064: + mov r0, #0x700 + mul r1, r6, r0 + mov r0, #0x1c + mla sl, r6, r0, r7 + mov r5, #0 + add r8, r7, r1 + add sb, r4, r1 +_02339080: + add r0, r8, r5, lsl #6 + mov r1, #0x20 + bl MemZero + add r0, sb, r5, lsl #6 + mov r1, #0x20 + bl MemZero + add r0, sl, r5 + add r1, r0, #0xe000 + mov r0, #0 + add r5, r5, #1 + strb r0, [r1] + cmp r5, #0x1c + blt _02339080 + add r6, r6, #1 + cmp r6, #0x10 + blt _02339064 + cmp fp, #0 + ldreq r0, _02339110 ; =ov29_0235376C + moveq r1, #0x64 + streqh r1, [r0, #2] + streqh r1, [r0, #4] + add r0, r7, #0xe000 + mov r3, #0 + str r3, [r0, #0x440] + mov r2, #1 + strb r2, [r0, #0x444] + ldr r1, _02339114 ; =ov29_0237CFB8 + strb r3, [r0, #0x446] + strb r2, [r1, #3] + bl ov29_0233900C + bl ov29_022E7F7C + ldr r0, _02339114 ; =ov29_0237CFB8 + mov r1, #1 + strb r1, [r0, #2] + bl ov29_02339148 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02339110: .word ov29_0235376C +_02339114: .word ov29_0237CFB8 + arm_func_end ov29_0233904C diff --git a/asm/overlay_29_02339138.s b/asm/overlay_29_02339138.s new file mode 100644 index 00000000..de5f328d --- /dev/null +++ b/asm/overlay_29_02339138.s @@ -0,0 +1,8995 @@ + .include "asm/macros.inc" + .include "overlay_29_02339138.inc" + + .text + + arm_func_start ov29_02339138 +ov29_02339138: ; 0x02339138 + stmdb sp!, {r3, lr} + bl ov29_0233900C + bl ov29_022E7F7C + ldmia sp!, {r3, pc} + arm_func_end ov29_02339138 + + arm_func_start ov29_02339148 +ov29_02339148: ; 0x02339148 + stmdb sp!, {r4, lr} + ldr r0, _02339188 ; =DUNGEON_PTR + mov r2, #0xc + ldr r0, [r0] + ldr r3, _0233918C ; =TILESET_PROPERTIES + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + mov r1, #0 + smulbb r0, r0, r2 + ldr r4, [r3, r0] + mov r0, r4 + bl ov29_0233A548 + mov r0, r4 + mov r1, #1 + bl ov29_0233A548 + ldmia sp!, {r4, pc} + .align 2, 0 +_02339188: .word DUNGEON_PTR +_0233918C: .word TILESET_PROPERTIES + arm_func_end ov29_02339148 + + arm_func_start ov29_02339190 +ov29_02339190: ; 0x02339190 + stmdb sp!, {r3, lr} + ldr r2, _023391B8 ; =ov29_0235376C + ldr r2, [r2, #8] + cmp r2, #0 + ldrne r2, _023391BC ; =ov29_0237CFB8 + ldrneb r2, [r2, #2] + cmpne r2, #0 + ldmeqia sp!, {r3, pc} + bl ov29_0233A548 + ldmia sp!, {r3, pc} + .align 2, 0 +_023391B8: .word ov29_0235376C +_023391BC: .word ov29_0237CFB8 + arm_func_end ov29_02339190 + + arm_func_start ov29_023391C0 +ov29_023391C0: ; 0x023391C0 + ldr r0, _023391E4 ; =DUNGEON_PTR + mov r1, #0xc + ldr r0, [r0] + ldr r2, _023391E8 ; =TILESET_PROPERTIES + add r0, r0, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x30] +#else + ldrsh r0, [r0, #0xd4] +#endif + smulbb r0, r0, r1 + ldr r0, [r2, r0] + bx lr + .align 2, 0 +_023391E4: .word DUNGEON_PTR +_023391E8: .word TILESET_PROPERTIES + arm_func_end ov29_023391C0 + + arm_func_start DrawMinimapTile +DrawMinimapTile: ; 0x023391EC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x30 + mov sl, r0 + mov sb, r1 + bl GetMinimapData + ldr r2, _023398C4 ; =ov29_02352FCC + ldr r3, _023398C8 ; =DUNGEON_PTR + ldrh r4, [r2] + ldr r5, [r3] + ldrh r3, [r2, #2] + ldr r1, _023398CC ; =ov29_0235376C + mov r7, #1 + ldr r2, [r1, #8] + mov fp, r0 + cmp r2, #0 + ldrne r0, _023398D0 ; =ov29_0237CFB8 + str r7, [sp, #0x14] + ldrneb r0, [r0, #2] +#ifdef JAPAN + add r1, r5, #0x178 +#else + add r1, r5, #0x21c +#endif + strh r4, [sp, #0x2c] + strh r3, [sp, #0x2e] + add r4, r1, #0x1a000 + cmpne r0, #0 + beq _023398BC + cmp sl, #0 + cmpge sb, #2 + blt _023398BC + cmp sl, #0x38 + cmplt sb, #0x20 + bge _023398BC + mov r0, sl + mov r1, sb + bl GetTile + mov r6, r0 + ldrb r1, [r4, #0x32] + ldrh r2, [r6] + ldrb r0, [r4, #0x29] + cmp r1, #0 + moveq r1, r7 + str r0, [sp, #0x24] + and r0, r2, #3 + str r0, [sp, #0x28] + ldrb r0, [r4, #0x22] + movne r1, #0 + and r1, r1, #0xff + str r0, [sp, #0x20] + ldrb r0, [r4, #0x28] + str r0, [sp, #0x18] + ldrb r0, [r4, #0x27] + str r0, [sp, #0x1c] + ldrb r0, [r4, #0x23] + ldrb r5, [r4, #0x25] + str r1, [sp, #0xc] + ldrb r1, [r4, #0x33] + cmp r1, #0 + movne r1, #0 + ldreq r1, _023398D0 ; =ov29_0237CFB8 + ldreqb r1, [r1, #3] + and r1, r1, #0xff + str r1, [sp, #8] + ldr r1, [sp, #0x20] + cmp r1, #0 + ldrneh r1, [r6, #2] + movne r0, #0 + strne r0, [sp, #0x10] + andne r8, r1, #1 + bne _02339344 + ldrb r1, [r4, #0x34] + cmp r1, #0 + bne _02339310 + cmp r0, #0 + movne r8, #1 + bne _02339318 +_02339310: + ldrh r0, [r6, #2] + and r8, r0, #1 +_02339318: + bl GetFloorType + cmp r0, #0 + ldreqb r0, [r4, #0x2a] + streq r0, [sp, #0x10] + movne r0, #0 + strne r0, [sp, #0x10] + cmp r5, #0 + beq _02339344 + cmp r8, #0 + streq r8, [sp, #0x14] + moveq r8, #1 +_02339344: + bl IsMapShownOnEitherScreen + cmp r0, #0 + ldreq r0, _023398CC ; =ov29_0235376C + ldreqb r1, [r0, #1] + cmpeq r1, #0 + beq _02339788 + ldr r0, [sp, #0x20] + mov r5, #0 + cmp r0, #0 + bne _0233946C + ldr r0, [r6, #0xc] + str r0, [sp, #4] + cmp r0, #0 + ldrne r0, _023398D0 ; =ov29_0237CFB8 + ldrneb r0, [r0, #3] + cmpne r0, #0 + beq _0233946C + ldr r0, [sp, #4] + ldr r0, [r0] + cmp r0, #1 + bne _0233946C + ldr r0, [sp, #4] + bl ShouldMinimapDisplayEntity + cmp r0, #0 + beq _0233946C + ldr r0, [sp, #4] + mov r7, r5 + ldr r0, [r0, #0xb4] + str r0, [sp] + bl IsExperienceLocked + cmp r0, #0 + bne _023393D4 + ldr r0, [sp] + ldrb r0, [r0, #0xbc] + cmp r0, #7 + bne _023393DC +_023393D4: + mov r5, #0xa + b _0233946C +_023393DC: + ldr r0, [sp] + ldrb r0, [r0, #6] + cmp r0, #0 + beq _0233943C + ldr r0, [sp, #8] + cmp r0, #0 + beq _02339434 + ldr r0, [sp] + ldrb r0, [r0, #0xbc] + cmp r0, #2 + moveq r0, r5 + beq _02339410 + bl IsBehaviorLoneOutlaw +_02339410: + cmp r0, #0 + movne r5, #0xc + bne _0233946C + ldr r0, [sp] + ldrb r0, [r0, #8] + cmp r0, #0 + movne r5, #0xa + moveq r5, #2 + b _0233946C +_02339434: + mov r7, #1 + b _0233946C +_0233943C: + ldr r0, [sp] + ldrb r0, [r0, #7] + cmp r0, #0 + beq _02339468 + ldr r0, _023398CC ; =ov29_0235376C + strh sl, [r0, #2] + strh sb, [r0, #4] + ldrb r0, [r4, #0x2d] + cmp r0, #0 + movne r5, #8 + b _0233946C +_02339468: + mov r5, #0xa +_0233946C: + cmp r7, #0 + beq _0233963C + ldr r0, [sp, #0x20] + cmp r0, #0 + bne _0233963C + ldr r0, [r6, #0x10] + cmp r0, #0 + beq _023395D0 + cmp r8, #0 + ldr r1, [r0] + bne _023394F4 + ldr r0, [sp, #0xc] + mov r5, #0 + cmp r0, #0 + beq _023394D8 + cmp r1, #3 + bne _023394D8 + ldr r0, [sp, #0x1c] + cmp r0, #0 + bne _023394C8 + ldrh r0, [r6, #2] + tst r0, #2 + beq _023394EC +_023394C8: + ldr r0, [sp, #0x28] + cmp r0, #0 + movne r5, #3 + b _023394EC +_023394D8: + cmp r1, #5 + bne _023394EC + ldr r0, [sp, #0x10] + cmp r0, #0 + movne r5, #0xd +_023394EC: + mov r7, #0 + b _0233963C +_023394F4: + cmp r7, #0 + beq _0233963C + cmp r1, #2 + bne _0233953C + ldr r2, [sp, #0x14] + cmp r2, #0 + beq _0233953C + ldrb r2, [r0, #0x20] + cmp r2, #0 + ldreq r2, [sp, #0x18] + cmpeq r2, #0 + beq _0233953C + bl GetTrapInfo + ldrb r1, [r0] + ldr r0, _023398D4 ; =ov29_02352FF4 + mov r7, #0 + ldrb r5, [r0, r1] + b _0233963C +_0233953C: + ldr r2, [sp, #0xc] + cmp r2, #0 + beq _0233957C + cmp r1, #3 + bne _0233957C + ldr r2, [sp, #0x1c] + cmp r2, #0 + bne _02339568 + ldrh r2, [r6, #2] + tst r2, #2 + beq _0233957C +_02339568: + ldr r2, [sp, #0x28] + cmp r2, #0 + movne r5, #3 + movne r7, #0 + bne _0233963C +_0233957C: + cmp r1, #5 + bne _023395BC + ldr r1, [sp, #0x10] + cmp r1, #0 + bne _023395B0 + ldr r1, [sp, #0x14] + cmp r1, #0 + beq _0233963C + ldr r1, [sp, #0x18] + cmp r1, #0 + ldreqb r0, [r0, #0x20] + cmpeq r0, #0 + beq _0233963C +_023395B0: + mov r5, #0xd + mov r7, #0 + b _0233963C +_023395BC: + ldr r0, [sp, #0x28] + cmp r0, #1 + movne r5, #0 + movne r7, r5 + b _0233963C +_023395D0: + cmp r8, #0 + bne _02339608 + ldr r0, [sp, #0x10] + cmp r0, #0 + beq _0233963C + ldrh r0, [r6] + tst r0, #0x200 + beq _0233963C + bl GetFloorType + cmp r0, #0 + moveq r5, #6 + movne r5, #5 + mov r7, #0 + b _0233963C +_02339608: + ldrh r0, [r6] + tst r0, #0x200 + beq _0233963C + ldr r0, [sp, #0x10] + cmp r0, #0 + ldreq r0, [sp, #0x14] + cmpeq r0, #0 + beq _0233963C + bl GetFloorType + cmp r0, #0 + moveq r5, #6 + movne r5, #5 + mov r7, #0 +_0233963C: + cmp r7, #0 + bne _02339654 + ldr r0, [sp, #0x24] + cmp r0, #0 + cmpne r5, #0 + movne r5, #0xb +_02339654: + cmp r5, #0 + bne _02339734 + cmp r8, #0 + moveq r5, #1 + beq _02339734 + ldr r0, [sp, #0x28] + cmp r0, #1 + movne r5, #1 + bne _02339734 + cmp sb, #0x1f + mov r4, #0xf + bge _023396A0 + mov r0, sl + add r1, sb, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + biceq r4, r4, #1 +_023396A0: + cmp sb, #1 + blt _023396C4 + mov r0, sl + sub r1, sb, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + biceq r4, r4, #4 +_023396C4: + cmp sl, #0x37 + bge _023396E8 + mov r1, sb + add r0, sl, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + biceq r4, r4, #2 +_023396E8: + cmp sl, #1 + blt _0233970C + mov r1, sb + sub r0, sl, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + biceq r4, r4, #8 +_0233970C: + ldrh r1, [r6, #2] + mov r0, r4, lsl #0x10 + mov r0, r0, asr #0x10 + tst r1, #2 + addne r0, r0, #0x10 + movne r0, r0, lsl #0x10 + movne r5, r0, asr #0x10 + addeq r0, r0, #0x20 + moveq r0, r0, lsl #0x10 + moveq r5, r0, asr #0x10 +_02339734: + bl GetTopScreenOption + cmp r0, #3 + addeq r0, r5, #0x80 + streqh r0, [sp, #0x2e] + bl GetBottomScreenOption + cmp r0, #0 + bne _02339770 + ldr r0, _023398CC ; =ov29_0235376C + ldrb r0, [r0, #1] + cmp r0, #0 + addne r0, r5, #0x40 + strneh r0, [sp, #0x2c] + moveq r0, #1 + streqh r0, [sp, #0x2c] + b _0233979C +_02339770: + bl GetBottomScreenOption + cmp r0, #1 + addeq r0, r5, #0x40 + streqh r0, [sp, #0x2c] + strneh r5, [sp, #0x2c] + b _0233979C +_02339788: + mov r2, #1 + mov r1, #0x64 + strh r2, [sp, #0x2c] + strh r2, [sp, #0x2e] + strh r1, [r0, #2] +_0233979C: + sub r3, sb, #2 + add r0, r3, r3, lsr #31 + mov r5, r0, asr #1 + mov r0, #0x700 + mul r7, r5, r0 + ldr r0, _023398CC ; =ov29_0235376C + mov r2, sl, lsr #0x1f + mov r4, r3, lsr #0x1f + rsb r1, r2, sl, lsl #31 + rsb r3, r4, r3, lsl #31 + ldr sb, [r0, #8] + add r0, sl, sl, lsr #31 + ldrsh r6, [sp, #0x2c] + add r2, r2, r1, ror #31 + add r1, r4, r3, ror #31 + add r8, r2, r1, lsl #1 + ldr r2, [sb] + add r1, r8, r6, lsl #2 + mov r4, r0, asr #1 + add r0, fp, r7 + add r6, r0, r4, lsl #6 + ldr r1, [r2, r1, lsl #2] + mov r0, r6 + bl InitMinimapDisplayTile + ldr r0, _023398CC ; =ov29_0235376C + ldrsh r1, [sp, #0x2e] + ldr r0, [r0, #8] + add r2, fp, #0x7000 + add r2, r2, r7 + add r7, r2, r4, lsl #6 + ldr r2, [r0] + add r0, r8, r1, lsl #2 + ldr r1, [r2, r0, lsl #2] + mov r0, r7 + bl InitMinimapDisplayTile + add r0, fp, #0xe000 + ldrb r1, [r0, #0x445] + cmp r1, #0 + bne _023398BC + mov r1, #0x1c + mul r8, r5, r1 + add r1, r0, r8 + ldrb r2, [r1, r4] + add r1, r1, r4 + cmp r2, #0 + bne _023398BC + mov r3, #1 + strb r3, [r1] + ldr r2, [r0, #0x440] + cmp r2, #0x28 + strgeb r3, [r0, #0x445] + bge _023398BC + add r3, r4, r8 + add r2, fp, r2, lsl #4 + mov r3, r3, lsl #6 + add r2, r2, #0xe000 + str r3, [r2, #0x1c0] + ldr r2, [r0, #0x440] + add r2, fp, r2, lsl #4 + add r2, r2, #0xe000 + str r6, [r2, #0x1c4] + ldr r2, [r0, #0x440] + add r2, fp, r2, lsl #4 + add r2, r2, #0xe000 + str r7, [r2, #0x1c8] + ldr r2, [r0, #0x440] + add r2, fp, r2, lsl #4 + add r2, r2, #0xe000 + str r1, [r2, #0x1cc] + ldr r1, [r0, #0x440] + add r1, r1, #1 + str r1, [r0, #0x440] +_023398BC: + add sp, sp, #0x30 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_023398C4: .word ov29_02352FCC +_023398C8: .word DUNGEON_PTR +_023398CC: .word ov29_0235376C +_023398D0: .word ov29_0237CFB8 +_023398D4: .word ov29_02352FF4 + arm_func_end DrawMinimapTile + + arm_func_start ov29_023398D8 +ov29_023398D8: ; 0x023398D8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r2, #0x7000 + mla r6, r1, r2, r0 + add r0, r0, #0xe000 + mov r5, #0 + ldr r2, _02339928 ; =ov29_0235377C + strb r5, [r0, #0x445] + ldr r7, [r2, r1, lsl #2] + mov r4, #0x200 + b _0233991C +_02339900: + mov r0, r7 + mov r1, r6 + mov r2, r4 + bl Memcpy32 + add r7, r7, #0x200 + add r6, r6, #0x200 + add r5, r5, #8 +_0233991C: + cmp r5, #0x1c0 + blo _02339900 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02339928: .word ov29_0235377C + arm_func_end ov29_023398D8 + + arm_func_start ov29_0233992C +ov29_0233992C: ; 0x0233992C + stmdb sp!, {r4, r5, r6, lr} + ldr r0, _02339A1C ; =DUNGEON_PTR + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r4, #0 + mov r5, r4 + bl ov29_022EA408 + ldr r1, _02339A20 ; =ov29_0237CFB8 + ldrb r1, [r1] + cmp r1, #0 + beq _0233996C + cmp r0, #0 + cmpne r0, #3 + cmpne r0, #0xc + moveq r4, #1 +_0233996C: + bl GetTopScreenOption + cmp r0, #3 + moveq r5, #1 + bl GetMinimapData + mov r6, r0 + add r0, r6, #0xe000 + ldrb r0, [r0, #0x444] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl ov10_022BFD20 + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + add r0, r6, #0xe000 + ldrb r0, [r0, #0x445] + cmp r0, #0 + bne _023399D8 + cmp r4, #0 + beq _023399C0 + mov r0, r6 + mov r1, #0 + bl ov29_0233A470 +_023399C0: + cmp r5, #0 + beq _02339A0C + mov r0, r6 + mov r1, #1 + bl ov29_0233A470 + b _02339A0C +_023399D8: + cmp r4, #0 + beq _023399EC + mov r0, r6 + mov r1, #0 + bl ov29_023398D8 +_023399EC: + cmp r5, #0 + beq _02339A00 + mov r0, r6 + mov r1, #1 + bl ov29_023398D8 +_02339A00: + add r0, r6, #0xe000 + mov r1, #1 + strb r1, [r0, #0x446] +_02339A0C: + add r0, r6, #0xe000 + mov r1, #0 + str r1, [r0, #0x440] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02339A1C: .word DUNGEON_PTR +_02339A20: .word ov29_0237CFB8 + arm_func_end ov29_0233992C + + arm_func_start FlashLeaderIcon +FlashLeaderIcon: ; 0x02339A24 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #8 + ldr r1, _02339CB8 ; =DUNGEON_PTR + mov r4, r0 + ldr r0, [r1] + add r0, r0, #0x1a000 +#ifdef JAPAN + ldrb r0, [r0, #0x1a5] +#else + ldrb r0, [r0, #0x249] +#endif + cmp r0, #0 + bne _02339CB0 + ldr r0, _02339CBC ; =ov29_0235376C + ldrsh r0, [r0, #2] + cmp r0, #0x64 + bge _02339CB0 + ldr r0, _02339CC0 ; =ov29_0237CFB8 + ldrb r1, [r0, #1] + add r2, r1, #1 + and r1, r2, #0xff + strb r2, [r0, #1] + tst r1, #8 + bne _02339CB0 + add r0, sp, #0 + mov r1, #8 + bl MemZero + ldrh r2, [sp] + ldrh r0, [sp, #6] + ldrh r1, [sp, #2] + bic r2, r2, #0x100 + strh r2, [sp] + ldrh r2, [sp] + bic r0, r0, #1 + strh r0, [sp, #6] + bic r2, r2, #0x200 + strh r2, [sp] + ldrh r2, [sp] + bic r1, r1, #0x3e00 + strh r1, [sp, #2] + bic r0, r2, #0xc00 + strh r0, [sp] + ldrh r0, [sp] + ldrh r2, [sp, #2] + ldrh r1, [sp, #4] + bic r0, r0, #0x1000 + strh r0, [sp] + ldrh r3, [sp] + ldrh r0, [sp, #6] + bic r2, r2, #0xc000 + bic r3, r3, #0xc000 + bic r1, r1, #0xc00 + bic r0, r0, #2 + strh r3, [sp] + strh r2, [sp, #2] + strh r1, [sp, #4] + strh r0, [sp, #6] + bl GetMinimapData + add r0, r0, #0xe000 + ldrb r0, [r0, #0x448] + cmp r0, #0 + beq _02339BC0 + bl GetTopScreenOption + cmp r0, #3 + bne _02339BC0 + ldrh r0, [sp, #4] + mov r2, #0x400 + rsb r2, r2, #0 + and r0, r0, r2 + strh r0, [sp, #4] + ldrh r0, [sp, #4] + ldr ip, _02339CBC ; =ov29_0235376C + ldrh r3, [sp, #2] + orr r5, r0, #0x70 + add r0, r2, #0x200 + and r0, r3, r0 + strh r0, [sp, #2] + ldrsh r1, [ip, #2] + bic r5, r5, #0xf000 + strh r5, [sp, #4] + mov r0, r1, lsl #2 + ldrh r1, [sp] + add r5, r0, #0x10 + and r2, r5, r2, lsr #23 + ldrh r6, [sp, #2] + ldrh r3, [sp, #4] + bic r1, r1, #0x2000 + orr r6, r6, r2 + orr r0, r3, #0xc000 + ldr r3, _02339CC4 ; =OBJ_GRAPHICS_CONTROLS_PTR + ldrh r5, [sp, #6] + ldr r2, _02339CC8 ; =0xFFFF000F + strh r1, [sp] + and r1, r5, r2 + strh r1, [sp, #6] + strh r6, [sp, #2] + strh r0, [sp, #4] + ldrsh r0, [ip, #4] + ldrh r2, [sp, #6] + ldr r3, [r3] + mov r0, r0, lsl #0x16 + orr r5, r2, r0, lsr #16 + ldr r2, _02339CCC ; =0x0000013F + add r1, sp, #0 + add r0, r3, #0x70 + strh r5, [sp, #6] + bl AddSimpleObjToOam +_02339BC0: + cmp r4, #0 + bne _02339CB0 + ldr r0, _02339CC0 ; =ov29_0237CFB8 + ldrb r0, [r0] + cmp r0, #0 + beq _02339CB0 + bl GetMinimapData + add r0, r0, #0xe000 + ldrb r0, [r0, #0x447] + cmp r0, #0 + beq _02339CB0 + bl GetBottomScreenOption + cmp r0, #0 + beq _02339CB0 + ldrh r0, [sp, #4] + mov r2, #0x400 + rsb r2, r2, #0 + and r0, r0, r2 + strh r0, [sp, #4] + ldrh r0, [sp, #4] + ldrh r4, [sp] + ldrh r6, [sp, #2] + add r2, r2, #0x200 + orr r1, r0, #0xdd + ldr ip, _02339CBC ; =ov29_0235376C + and r2, r6, r2 + strh r2, [sp, #2] + ldrsh r0, [ip, #2] + orr r1, r1, #0x100 + bic r4, r4, #0x2000 + strh r4, [sp] + strh r1, [sp, #4] + mov r5, r0, lsl #2 + ldrh r0, [sp, #4] + ldrh r1, [sp] + ldrh lr, [sp, #6] + ldr r2, _02339CC8 ; =0xFFFF000F + bic r0, r0, #0xf000 + and r2, lr, r2 + orr r1, r1, #0x2000 + ldr r3, _02339CD0 ; =0x000001DD + strh r2, [sp, #6] + ldrh r6, [sp, #2] + add r5, r5, #8 + add r2, r3, #0x22 + and r2, r5, r2 + orr r2, r6, r2 + strh r2, [sp, #2] + strh r0, [sp, #4] + strh r1, [sp] + ldrsh r1, [ip, #4] + ldr r4, _02339CC4 ; =OBJ_GRAPHICS_CONTROLS_PTR + ldrh r2, [sp, #6] + ldr r0, [r4] + mov r1, r1, lsl #0x16 + orr r4, r2, r1, lsr #16 + add r1, sp, #0 + sub r2, r3, #0x9e + strh r4, [sp, #6] + bl AddSimpleObjToOam +_02339CB0: + add sp, sp, #8 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02339CB8: .word DUNGEON_PTR +_02339CBC: .word ov29_0235376C +_02339CC0: .word ov29_0237CFB8 +_02339CC4: .word OBJ_GRAPHICS_CONTROLS_PTR +_02339CC8: .word 0xFFFF000F +_02339CCC: .word 0x0000013F +_02339CD0: .word 0x000001DD + arm_func_end FlashLeaderIcon + + arm_func_start ov29_02339CD4 +ov29_02339CD4: ; 0x02339CD4 + ldr r0, _02339CE4 ; =ov29_0237CFB8 + mov r1, #0 + strb r1, [r0, #1] + bx lr + .align 2, 0 +_02339CE4: .word ov29_0237CFB8 + arm_func_end ov29_02339CD4 + + arm_func_start UpdateMinimap +UpdateMinimap: ; 0x02339CE8 + stmdb sp!, {r4, r5, r6, lr} + bl GetMinimapData + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + mov r6, #0 + add r0, r0, #0xe000 + mov r1, #1 + strb r1, [r0, #0x445] + mov r4, r6 +_02339D0C: + mov r5, r4 +_02339D10: + mov r0, r5 + mov r1, r6 + bl DrawMinimapTile + add r5, r5, #1 + cmp r5, #0x38 + blt _02339D10 + add r6, r6, #1 + cmp r6, #0x20 + blt _02339D0C + bl GetBottomScreenOption + cmp r0, #0 + beq _02339D54 + bl GetMinimapData + add r0, r0, #0xe000 + mov r1, #1 + strb r1, [r0, #0x447] + ldmia sp!, {r4, r5, r6, pc} +_02339D54: + ldr r0, _02339D78 ; =ov29_0235376C + ldrb r0, [r0, #1] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl GetMinimapData + add r0, r0, #0xe000 + mov r1, #1 + strb r1, [r0, #0x447] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02339D78: .word ov29_0235376C + arm_func_end UpdateMinimap + + arm_func_start ov29_02339D7C +ov29_02339D7C: ; 0x02339D7C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + cmp r0, #1 + mov r5, #0x10 + moveq r6, #0 + beq _02339D9C + cmp r1, #0 + movne r6, #0 + moveq r6, #5 +_02339D9C: + cmp r0, #1 + mov sl, #0x1140 + mov r8, #1 + bne _02339E6C + mov sb, #0 + mov fp, sb + b _02339E00 +_02339DB8: + mov r0, r8, lsl #0x10 + mov r7, fp + mov r4, r0, asr #0x10 +_02339DC4: + add r0, r7, #2 + add r1, sl, #1 + mov ip, r0, lsl #0x10 + mov r0, r1, lsl #0x10 + mov r2, sl + mov sl, r0, lsr #0x10 + mov r1, r4 + mov r3, #1 + mov r0, ip, asr #0x10 + bl ov29_02339F2C + add r7, r7, #1 + cmp r7, #0x1c + blt _02339DC4 + add r8, r8, #1 + add sb, sb, #1 +_02339E00: + cmp sb, r5 + blt _02339DB8 + mov sb, #0 + mov r4, #0x1000 + mov fp, #1 + mov r7, sb + b _02339E58 +_02339E1C: + mov r0, r8, lsl #0x10 + mov sl, r7 + mov r5, r0, asr #0x10 +_02339E28: + add r0, sl, #2 + mov r0, r0, lsl #0x10 + mov r1, r5 + mov r2, r4 + mov r3, fp + mov r0, r0, asr #0x10 + bl ov29_02339F2C + add sl, sl, #1 + cmp sl, #0x1c + blt _02339E28 + add r8, r8, #1 + add sb, sb, #1 +_02339E58: + cmp sb, r6 + blt _02339E1C + mov r0, #1 + bl ov29_02339F64 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02339E6C: + mov r7, #0 + mov fp, r7 + b _02339EC0 +_02339E78: + mov r0, r8, lsl #0x10 + mov sb, fp + mov r4, r0, asr #0x10 +_02339E84: + add r0, sb, #1 + add r1, sl, #1 + mov ip, r0, lsl #0x10 + mov r0, r1, lsl #0x10 + mov r2, sl + mov sl, r0, lsr #0x10 + mov r1, r4 + mov r3, #0 + mov r0, ip, asr #0x10 + bl ov29_02339F2C + add sb, sb, #1 + cmp sb, #0x1c + blt _02339E84 + add r8, r8, #1 + add r7, r7, #1 +_02339EC0: + cmp r7, r5 + blt _02339E78 + mov sb, #0 + mov r4, #0x1000 + mov fp, sb + mov r7, sb + b _02339F18 +_02339EDC: + mov r0, r8, lsl #0x10 + mov sl, r7 + mov r5, r0, asr #0x10 +_02339EE8: + add r0, sl, #1 + mov r0, r0, lsl #0x10 + mov r1, r5 + mov r2, r4 + mov r3, fp + mov r0, r0, asr #0x10 + bl ov29_02339F2C + add sl, sl, #1 + cmp sl, #0x1c + blt _02339EE8 + add r8, r8, #1 + add sb, sb, #1 +_02339F18: + cmp sb, r6 + blt _02339EDC + mov r0, #0 + bl ov29_02339F64 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end ov29_02339D7C + + arm_func_start ov29_02339F2C +ov29_02339F2C: ; 0x02339F2C + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr ip, _02339F60 ; =ov29_0235352C + str r1, [sp, #4] + ldr ip, [ip] + mov r1, #0xc + mla r1, r3, r1, ip + str r0, [sp] + ldr r0, [r1, #0x24] + add r1, sp, #0 + bl sub_0200B3FC + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02339F60: .word ov29_0235352C + arm_func_end ov29_02339F2C + + arm_func_start ov29_02339F64 +ov29_02339F64: ; 0x02339F64 + ldr r2, _02339F80 ; =ov29_0235352C + mov r1, #0xc + ldr r2, [r2] + ldr ip, _02339F84 ; =sub_0200B330 + mla r1, r0, r1, r2 + ldr r0, [r1, #0x24] + bx ip + .align 2, 0 +_02339F80: .word ov29_0235352C +_02339F84: .word sub_0200B330 + arm_func_end ov29_02339F64 + + arm_func_start ov29_02339F88 +ov29_02339F88: ; 0x02339F88 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetBottomScreenOption + cmp r0, #0 + beq _02339FAC + mov r1, r4 + mov r0, #0 + bl ov29_02339D7C + ldmia sp!, {r4, pc} +_02339FAC: + ldr r0, _02339FCC ; =ov29_0235376C + ldrb r0, [r0, #1] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r1, r4 + mov r0, #0 + bl ov29_02339D7C + ldmia sp!, {r4, pc} + .align 2, 0 +_02339FCC: .word ov29_0235376C + arm_func_end ov29_02339F88 + + arm_func_start ov29_02339FD0 +ov29_02339FD0: ; 0x02339FD0 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetTopScreenOption + cmp r0, #3 + ldmneia sp!, {r4, pc} + mov r1, r4 + mov r0, #1 + bl ov29_02339D7C + ldmia sp!, {r4, pc} + arm_func_end ov29_02339FD0 + + arm_func_start ov29_02339FF4 +ov29_02339FF4: ; 0x02339FF4 + stmdb sp!, {r4, lr} + mov r4, r0 + bl ov29_02339F88 + bl GetTopScreenOption + cmp r0, #3 + ldmneia sp!, {r4, pc} + mov r1, r4 + mov r0, #1 + bl ov29_02339D7C + ldmia sp!, {r4, pc} + arm_func_end ov29_02339FF4 + + arm_func_start ov29_0233A01C +ov29_0233A01C: ; 0x0233A01C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + cmp r0, #0 + movne r6, #0 + mov sb, #0 + mov sl, r1 + mov r5, #0x10 + moveq r6, #5 + mov r8, #1 + mov fp, sb + b _0233A080 +_0233A044: + mov r0, r8, lsl #0x10 + mov r7, fp + mov r4, r0, asr #0x10 +_0233A050: + add r0, r7, #1 + mov r0, r0, lsl #0x10 + mov r1, r4 + mov r2, #0x1000 + mov r3, sl + mov r0, r0, asr #0x10 + bl ov29_02339F2C + add r7, r7, #1 + cmp r7, #0x1c + blt _0233A050 + add r8, r8, #1 + add sb, sb, #1 +_0233A080: + cmp sb, r5 + blt _0233A044 + mov r7, #0 + mov fp, #0x1000 + mov r5, r7 + b _0233A0D4 +_0233A098: + mov r0, r8, lsl #0x10 + mov sb, r5 + mov r4, r0, asr #0x10 +_0233A0A4: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov r1, r4 + mov r2, fp + mov r3, sl + mov r0, r0, asr #0x10 + bl ov29_02339F2C + add sb, sb, #1 + cmp sb, #0x1c + blt _0233A0A4 + add r8, r8, #1 + add r7, r7, #1 +_0233A0D4: + cmp r7, r6 + blt _0233A098 + mov r0, sl + bl ov29_02339F64 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end ov29_0233A01C + + arm_func_start ov29_0233A0E8 +ov29_0233A0E8: ; 0x0233A0E8 + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r1, #1 + bne _0233A114 + bl GetTopScreenOption + cmp r0, #3 + ldmneia sp!, {r4, pc} + mov r0, r4 + mov r1, #1 + bl ov29_0233A01C + ldmia sp!, {r4, pc} +_0233A114: + cmp r1, #0 + ldmneia sp!, {r4, pc} + bl GetBottomScreenOption + cmp r0, #0 + beq _0233A138 + mov r0, r4 + mov r1, #0 + bl ov29_0233A01C + ldmia sp!, {r4, pc} +_0233A138: + ldr r0, _0233A158 ; =ov29_0235376C + ldrb r0, [r0, #1] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + mov r1, #0 + bl ov29_0233A01C + ldmia sp!, {r4, pc} + .align 2, 0 +_0233A158: .word ov29_0235376C + arm_func_end ov29_0233A0E8 + + arm_func_start ov29_0233A15C +ov29_0233A15C: ; 0x0233A15C + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetTopScreenOption + cmp r0, #3 + bne _0233A17C + mov r0, r4 + mov r1, #1 + bl ov29_0233A01C +_0233A17C: + bl GetBottomScreenOption + cmp r0, #0 + beq _0233A198 + mov r0, r4 + mov r1, #0 + bl ov29_0233A01C + ldmia sp!, {r4, pc} +_0233A198: + ldr r0, _0233A1B8 ; =ov29_0235376C + ldrb r0, [r0, #1] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + mov r0, r4 + mov r1, #0 + bl ov29_0233A01C + ldmia sp!, {r4, pc} + .align 2, 0 +_0233A1B8: .word ov29_0235376C + arm_func_end ov29_0233A15C + + arm_func_start ov29_0233A1BC +ov29_0233A1BC: ; 0x0233A1BC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r6, #0 + mov r7, r0 + mov r8, #0x1000 + mov r4, r6 +_0233A1D0: + mov r0, r6, lsl #0x10 + mov r5, r4 + mov sb, r0, asr #0x10 +_0233A1DC: + mov r0, r5, lsl #0x10 + mov r1, sb + mov r2, r8 + mov r3, r7 + mov r0, r0, asr #0x10 + bl ov29_02339F2C + add r5, r5, #1 + cmp r5, #0x1c + blt _0233A1DC + add r6, r6, #1 + cmp r6, #0x20 + blt _0233A1D0 + mov r0, r7 + bl ov29_02339F64 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end ov29_0233A1BC + + arm_func_start SetMinimapDataE447 +SetMinimapDataE447: ; 0x0233A218 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetMinimapData + add r0, r0, #0xe000 + strb r4, [r0, #0x447] + ldmia sp!, {r4, pc} + arm_func_end SetMinimapDataE447 + +#ifdef EUROPE + arm_func_start GetMinimapDataE447 +GetMinimapDataE447: ; 0x0233AE00 + stmdb sp!, {r3, lr} + bl GetMinimapData + add r0, r0, #0xe000 + ldrb r0, [r0, #0x447] + ldmia sp!, {r3, pc} + arm_func_end GetMinimapDataE447 +#endif + + arm_func_start SetMinimapDataE448 +SetMinimapDataE448: ; 0x0233A230 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetMinimapData + add r0, r0, #0xe000 + strb r4, [r0, #0x448] + ldmia sp!, {r4, pc} + arm_func_end SetMinimapDataE448 + + arm_func_start ov29_0233A248 +ov29_0233A248: ; 0x0233A248 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r1, r4 + mov r0, #0 + bl ov29_0233A0E8 + cmp r4, #0 + bne _0233A274 + bl GetMinimapData + add r0, r0, #0xe000 + mov r1, #0 + strb r1, [r0, #0x447] +_0233A274: + cmp r4, #1 + ldmneia sp!, {r4, pc} + bl GetMinimapData + add r0, r0, #0xe000 + mov r1, #0 + strb r1, [r0, #0x448] + ldmia sp!, {r4, pc} + arm_func_end ov29_0233A248 + + arm_func_start InitWeirdMinimapMatrix +InitWeirdMinimapMatrix: ; 0x0233A290 + stmdb sp!, {r3, r4, r5, lr} + bl GetMinimapData + add r1, r0, #0xe000 + ldrb r1, [r1, #0x446] + cmp r1, #0 + ldmeqia sp!, {r3, r4, r5, pc} + mov r4, #0 + mov r3, r4 + mov ip, r4 + mov r2, #0x1c +_0233A2B8: + mla r5, r4, r2, r0 + mov lr, ip +_0233A2C0: + add r1, r5, lr + add r1, r1, #0xe000 + add lr, lr, #1 + strb r3, [r1] + cmp lr, #0x38 + blt _0233A2C0 + add r4, r4, #1 + cmp r4, #0x20 + blt _0233A2B8 + add r0, r0, #0xe000 + strb r3, [r0, #0x446] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end InitWeirdMinimapMatrix + + arm_func_start InitMinimapDisplayTile +InitMinimapDisplayTile: ; 0x0233A2F0 + ldr r3, [r0] + ldmia r1, {r2, ip} + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0] + ldr r3, [r0, #4] + ldr r2, [r1, #8] + ldr ip, [r1, #0xc] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #4] + ldr r3, [r0, #8] + ldr r2, [r1, #0x10] + ldr ip, [r1, #0x14] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #8] + ldr r3, [r0, #0xc] + ldr r2, [r1, #0x18] + ldr ip, [r1, #0x1c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0xc] + ldr r3, [r0, #0x10] + ldr r2, [r1, #0x20] + ldr ip, [r1, #0x24] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x10] + ldr r3, [r0, #0x14] + ldr r2, [r1, #0x28] + ldr ip, [r1, #0x2c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x14] + ldr r3, [r0, #0x18] + ldr r2, [r1, #0x30] + ldr ip, [r1, #0x34] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x18] + ldr r3, [r0, #0x1c] + ldr r2, [r1, #0x38] + ldr ip, [r1, #0x3c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x1c] + ldr r3, [r0, #0x20] + ldr r2, [r1, #0x40] + ldr ip, [r1, #0x44] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x20] + ldr r3, [r0, #0x24] + ldr r2, [r1, #0x48] + ldr ip, [r1, #0x4c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x24] + ldr r3, [r0, #0x28] + ldr r2, [r1, #0x50] + ldr ip, [r1, #0x54] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x28] + ldr r3, [r0, #0x2c] + ldr r2, [r1, #0x58] + ldr ip, [r1, #0x5c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x2c] + ldr r3, [r0, #0x30] + ldr r2, [r1, #0x60] + ldr ip, [r1, #0x64] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x30] + ldr r3, [r0, #0x34] + ldr r2, [r1, #0x68] + ldr ip, [r1, #0x6c] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x34] + ldr r3, [r0, #0x38] + ldr r2, [r1, #0x70] + ldr ip, [r1, #0x74] + and r2, r3, r2 + orr r2, ip, r2 + str r2, [r0, #0x38] + ldr r3, [r0, #0x3c] + ldr r2, [r1, #0x78] + ldr ip, [r1, #0x7c] + and r1, r3, r2 + orr r1, ip, r1 + str r1, [r0, #0x3c] + bx lr + arm_func_end InitMinimapDisplayTile + + arm_func_start ov29_0233A470 +ov29_0233A470: ; 0x0233A470 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r4, #0 + add r2, r0, #0x21c0 + add r5, r0, #0xe000 + add ip, r2, #0xc000 + ldr r0, _0233A544 ; =ov29_0235377C + mov r6, r4 + b _0233A534 +_0233A490: + add lr, ip, r4, lsl #4 + add r2, lr, r1, lsl #2 + ldr r3, [r2, #4] + ldr sb, [ip, r4, lsl #4] + ldr r8, [r0, r1, lsl #2] + ldr r7, [r3] + add r2, sb, r8 + str r7, [sb, r8] + ldr r7, [r3, #4] + add r4, r4, #1 + str r7, [r2, #4] + ldr r7, [r3, #8] + str r7, [r2, #8] + ldr r7, [r3, #0xc] + str r7, [r2, #0xc] + ldr r7, [r3, #0x10] + str r7, [r2, #0x10] + ldr r7, [r3, #0x14] + str r7, [r2, #0x14] + ldr r7, [r3, #0x18] + str r7, [r2, #0x18] + ldr r7, [r3, #0x1c] + str r7, [r2, #0x1c] + ldr r7, [r3, #0x20] + str r7, [r2, #0x20] + ldr r7, [r3, #0x24] + str r7, [r2, #0x24] + ldr r7, [r3, #0x28] + str r7, [r2, #0x28] + ldr r7, [r3, #0x2c] + str r7, [r2, #0x2c] + ldr r7, [r3, #0x30] + str r7, [r2, #0x30] + ldr r7, [r3, #0x34] + str r7, [r2, #0x34] + ldr r7, [r3, #0x38] + str r7, [r2, #0x38] + ldr r3, [r3, #0x3c] + str r3, [r2, #0x3c] + ldr r2, [lr, #0xc] + strb r6, [r2] +_0233A534: + ldr r2, [r5, #0x440] + cmp r4, r2 + blt _0233A490 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0233A544: .word ov29_0235377C + arm_func_end ov29_0233A470 + + arm_func_start ov29_0233A548 +ov29_0233A548: ; 0x0233A548 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _0233A5E0 ; =MAP_COLOR_TABLE + ldr r7, _0233A5E4 ; =ov29_0235376C + mov r6, r1 + add r5, r2, r0, lsl #2 + mov r4, #0 +_0233A560: + cmp r4, #7 + bne _0233A5B0 + cmp r6, #0 + bne _0233A58C + add r0, r4, #0x100 + mov r1, r0, lsl #0x10 + mov r0, r5 + mov r2, r6 + mov r1, r1, asr #0x10 + bl ov29_0233A5E8 + b _0233A5D0 +_0233A58C: + ldr r1, [r7, #8] + add r0, r4, #0x100 + ldr r3, [r1, #4] + mov r1, r0, lsl #0x10 + mov r2, r6 + add r0, r3, r4, lsl #2 + mov r1, r1, asr #0x10 + bl ov29_0233A5E8 + b _0233A5D0 +_0233A5B0: + ldr r1, [r7, #8] + add r0, r4, #0x100 + ldr r3, [r1, #4] + mov r1, r0, lsl #0x10 + mov r2, r6 + add r0, r3, r4, lsl #2 + mov r1, r1, asr #0x10 + bl ov29_0233A5E8 +_0233A5D0: + add r4, r4, #1 + cmp r4, #0x10 + blt _0233A560 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0233A5E0: .word MAP_COLOR_TABLE +_0233A5E4: .word ov29_0235376C + arm_func_end ov29_0233A548 + + arm_func_start ov29_0233A5E8 +ov29_0233A5E8: ; 0x0233A5E8 + stmdb sp!, {r4, lr} + ldr ip, _0233A620 ; =ov29_0235352C + mov r3, #0xc + ldr ip, [ip] + mov lr, r0 + add r0, ip, #0x20 + mla r4, r2, r3, r0 + ldr r0, [r4, #8] + mov r2, r1 + mov r1, lr + bl sub_0200C008 + ldr r0, [r4, #8] + bl sub_0200A174 + ldmia sp!, {r4, pc} + .align 2, 0 +_0233A620: .word ov29_0235352C + arm_func_end ov29_0233A5E8 + + arm_func_start LoadFixedRoomDataVeneer +LoadFixedRoomDataVeneer: ; 0x0233A624 + ldr ip, _0233A62C ; =LoadFixedRoomData + bx ip + .align 2, 0 +_0233A62C: .word LoadFixedRoomData + arm_func_end LoadFixedRoomDataVeneer + + arm_func_start UnloadFixedRoomData +UnloadFixedRoomData: ; 0x0233A630 + stmdb sp!, {r3, lr} + bl ov29_02343DD8 + ldr r0, _0233A650 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x12000 +#ifdef JAPAN + str r1, [r0, #0xa00] +#else + str r1, [r0, #0xaa4] +#endif + ldmia sp!, {r3, pc} + .align 2, 0 +_0233A650: .word DUNGEON_PTR + arm_func_end UnloadFixedRoomData + + arm_func_start IsNormalFloor +IsNormalFloor: ; 0x0233A654 + stmdb sp!, {r3, lr} + bl IsHiddenStairsFloor + cmp r0, #0 + bne _0233A6C4 + bl IsGoldenChamber + cmp r0, #0 + bne _0233A6C4 + mov r0, #0xb + bl IsCurrentMissionType + cmp r0, #0 + bne _0233A6C4 + mov r0, #0xa + mov r1, #6 + bl IsCurrentMissionTypeExact + cmp r0, #0 + bne _0233A6C4 + mov r0, #0xc + bl IsCurrentMissionType + cmp r0, #0 + bne _0233A6C4 + ldr r0, _0233A6D4 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x4000 +#ifdef JAPAN + ldrb r0, [r0, #0x36] +#else + ldrb r0, [r0, #0xda] +#endif + cmp r0, #0 + beq _0233A6CC + cmp r0, #0xa5 + bhs _0233A6CC +_0233A6C4: + mov r0, #0 + ldmia sp!, {r3, pc} +_0233A6CC: + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0233A6D4: .word DUNGEON_PTR + arm_func_end IsNormalFloor + + arm_func_start GenerateFloor +GenerateFloor: ; 0x0233A6D8 +#ifdef JAPAN +#define GENERATE_FLOOR_OFFSET -0xA4 +#else +#define GENERATE_FLOOR_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x54 + ldr r2, _0233AE64 ; =DUNGEON_PTR + mov r8, #0 + ldr r3, [r2] + ldr r0, _0233AE68 ; =0x000286B2 + add r1, r3, #0x12000 + str r8, [r1, #0xaa4 + GENERATE_FLOOR_OFFSET] + ldr r1, [r2] + add sb, r3, r0 + add r0, r1, #0x3f00 + strh r8, [r0, #0xc2 + GENERATE_FLOOR_OFFSET] + bl LoadFixedRoomDataVeneer + bl ov29_02343DC4 + ldr r1, _0233AE64 ; =DUNGEON_PTR + ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldr r1, [r1] + mov r3, r8 + add r1, r1, #0x12000 + str r0, [r1, #0xaa4 + GENERATE_FLOOR_OFFSET] + strb r3, [r2, #3] + strb r3, [r2, #1] + strb r3, [r2, #7] + bl ResetHiddenStairsSpawn + bl IsOutlawMonsterHouseFloor + ldr r1, _0233AE64 ; =DUNGEON_PTR + ldr r3, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldr r2, [r1] + mov r1, sb + add r2, r2, #0xc4 + GENERATE_FLOOR_OFFSET + strb r0, [r3, #8] + add r0, r2, #0x4000 + bl GetHiddenStairsType + ldr r1, _0233AE64 ; =DUNGEON_PTR + ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldr r1, [r1] + str r0, [r2, #0x2c] + add r0, r1, #0x4000 + ldrsh r1, [r0, #0xd4 + GENERATE_FLOOR_OFFSET] + ldr r0, _0233AE70 ; =SECONDARY_TERRAIN_TYPES + ldrb r0, [r0, r1] + mov r1, #0xff + cmp r0, #2 + moveq r2, #1 + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + movne r2, r8 + strb r2, [r0, #4] + strb r1, [r0, #2] + mov r1, #0 + strb r1, [r0, #6] + ldrb r0, [sb, #7] + bl GetFinalKecleonShopSpawnChance + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + strh r0, [r1, #0xc] + ldrb r0, [sb, #8] + strh r0, [r1, #0x10] + ldrb r0, [r1, #8] + cmp r0, #0 + movne r0, #0x64 + strneh r0, [r1, #0x10] + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r1, #1 + strb r1, [r0] + sub r1, r1, #2 + str r1, [r0, #0x30] + str r1, [r0, #0x38] + str r1, [r0, #0x34] + str r1, [r0, #0x3c] + bl ResetFloor + bl IsNormalFloor + cmp r0, #0 + bne _0233A810 + ldr r0, _0233AE64 ; =DUNGEON_PTR + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x700 + strh r1, [r0, #0x86] + b _0233A828 +_0233A810: + ldrb r0, [sb, #6] + bl abs + ldr r1, _0233AE64 ; =DUNGEON_PTR + ldr r1, [r1] + add r1, r1, #0x700 + strh r0, [r1, #0x86] +_0233A828: + ldr r3, _0233AE64 ; =DUNGEON_PTR + mov r7, #0 + ldr r0, [r3] + ldr r1, _0233AE74 ; =0x00012AFA + add r0, r0, #0x4000 + strb r7, [r0, #0xc5 + GENERATE_FLOOR_OFFSET] + ldr r0, [r3] + ldr r2, _0233AE6C ; =FLOOR_GENERATION_STATUS + add r0, r0, #0x4000 + strb r7, [r0, #0xc6 + GENERATE_FLOOR_OFFSET] + ldr r0, [r3] + strh r7, [r0, r1] + ldr r0, [r3] + add r0, r0, #0x4000 + str r7, [r0, #0xcc + GENERATE_FLOOR_OFFSET] + ldrb r0, [sb, #0xc] + str r0, [r2, #0x18] + b _0233AD3C +_0233A870: + ldr r1, _0233AE64 ; =DUNGEON_PTR + mov r0, #0 + str r0, [sp] + ldr r0, [r1] + add r0, r0, #0xc4 + GENERATE_FLOOR_OFFSET + add r0, r0, #0x4000 + bl ResetImportantSpawnPositions + mov r6, #0 + mvn r5, #0 + ldr r4, _0233AE64 ; =DUNGEON_PTR + b _0233AC50 +_0233A89C: + ldr r0, [sp] + cmp r0, #0 + beq _0233A8C8 + ldr r0, [r4] + add r0, r0, #0x4000 + ldrb r0, [r0, #0xda + GENERATE_FLOOR_OFFSET] + bl IsNotFullFloorFixedRoom + cmp r0, #0 + beq _0233AC58 + mov r0, #0 + str r0, [sp] +_0233A8C8: + ldr r0, [r4] + cmp r6, #1 + add r0, r0, #0x4000 + strh r6, [r0, #0xde + GENERATE_FLOOR_OFFSET] + ldrge r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + movge r1, #0 + strge r1, [r0, #0x18] + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r1, #0 + strb r1, [r0, #5] + strh r5, [r0, #0x20] + strh r5, [r0, #0x22] + bl ResetFloor + ldr r0, [r4] + add r0, r0, #0xcc00 + strh r5, [r0, #0xe0 + GENERATE_FLOOR_OFFSET] + ldr r0, [r4] + add r0, r0, #0xcc00 + strh r5, [r0, #0xe2 + GENERATE_FLOOR_OFFSET] + ldr r0, [r4] + add r1, r0, #0x4000 + mov r0, #0 + strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] + ldr r0, [r4] + add r0, r0, #0x4000 + ldrb r0, [r0, #0xda + GENERATE_FLOOR_OFFSET] + cmp r0, #0 + beq _0233A954 + mov r1, sb + bl GenerateFixedRoom + cmp r0, #0 + bne _0233AC58 + mov r0, #1 + str r0, [sp] + b _0233AB78 +_0233A954: + mov r0, #2 + ldrb sl, [sb] + mov fp, #0x20 + str r0, [sp, #4] + str r0, [sp, #8] + b _0233A9DC +_0233A96C: + cmp sl, #8 + mov r0, #2 + beq _0233A998 + mov r1, #9 + bl DungeonRandRange + str r0, [sp, #8] + mov r0, #2 + mov r1, #8 + bl DungeonRandRange + str r0, [sp, #4] + b _0233A9B4 +_0233A998: + mov r1, #5 + bl DungeonRandRange + str r0, [sp, #8] + mov r0, #2 + mov r1, #4 + bl DungeonRandRange + str r0, [sp, #4] +_0233A9B4: + ldr r0, [sp, #8] + cmp r0, #6 + ldrle r0, [sp, #4] + cmple r0, #4 + ble _0233A9E4 + subs fp, fp, #1 + moveq r0, #4 + streq r0, [sp, #8] + streq r0, [sp, #4] + beq _0233A9E4 +_0233A9DC: + cmp fp, #0 + bne _0233A96C +_0233A9E4: + ldr r1, [sp, #8] + mov r0, #0x38 + bl _s32_div_f + cmp r0, #7 + movle r0, #1 + strle r0, [sp, #8] + ldr r1, [sp, #4] + mov r0, #0x20 + bl _s32_div_f + ldr r1, [r4] + cmp r0, #7 + add r2, r1, #0x4000 + mov r1, #0 + strb r1, [r2, #0xc4 + GENERATE_FLOOR_OFFSET] + ldr r1, [r4] + movle r0, #1 + add r2, r1, #0x4000 + mov r1, #0xff + strb r1, [r2, #0xc9 + GENERATE_FLOOR_OFFSET] + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + strle r0, [sp, #4] + and r0, sl, #0xf + cmp r0, #0xb + str sl, [r1, #0x28] + addls pc, pc, r0, lsl #2 + b _0233AAD4 +_0233AA4C: ; jump table + b _0233AAD4 ; case 0 + b _0233AA7C ; case 1 + b _0233AAEC ; case 2 + b _0233AB04 ; case 3 + b _0233AB14 ; case 4 + b _0233AB24 ; case 5 + b _0233AB3C ; case 6 + b _0233AB4C ; case 7 + b _0233AAD4 ; case 8 + b _0233AB58 ; case 9 + b _0233AB64 ; case 10 + b _0233AAA8 ; case 11 +_0233AA7C: + mov r0, #2 + bl DungeonRandInt + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r2, #1 + strb r2, [r1, #6] + add r1, r0, #2 + mov r0, #4 + mov r2, sb + bl GenerateStandardFloor + mov r8, #1 + b _0233AB78 +_0233AAA8: + mov r0, #2 + bl DungeonRandInt + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r2, #2 + strb r2, [r1, #6] + add r1, r0, #2 + mov r0, #4 + mov r2, sb + bl GenerateStandardFloor + mov r8, #1 + b _0233AB78 +_0233AAD4: + ldr r0, [sp, #8] + ldr r1, [sp, #4] + mov r2, sb + bl GenerateStandardFloor + mov r8, #1 + b _0233AB78 +_0233AAEC: + bl GenerateOneRoomMonsterHouseFloor + ldr r0, [r4] + add r1, r0, #0x4000 + mov r0, #1 + strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] + b _0233AB78 +_0233AB04: + mov r0, sb + bl GenerateOuterRingFloor + mov r8, #1 + b _0233AB78 +_0233AB14: + mov r0, sb + bl GenerateCrossroadsFloor + mov r8, #1 + b _0233AB78 +_0233AB24: + bl GenerateTwoRoomsWithMonsterHouseFloor + ldr r0, [r4] + add r1, r0, #0x4000 + mov r0, #1 + strb r0, [r1, #0xc4 + GENERATE_FLOOR_OFFSET] + b _0233AB78 +_0233AB3C: + mov r0, sb + bl GenerateLineFloor + mov r8, #1 + b _0233AB78 +_0233AB4C: + mov r0, sb + bl GenerateCrossFloor + b _0233AB78 +_0233AB58: + mov r0, sb + bl GenerateBeetleFloor + b _0233AB78 +_0233AB64: + ldr r0, [sp, #8] + ldr r1, [sp, #4] + mov r2, sb + bl GenerateOuterRoomsFloor + mov r8, #1 +_0233AB78: + bl ResetInnerBoundaryTileRows + bl EnsureImpassableTilesAreWalls + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #5] + cmp r0, #0 + bne _0233AC4C + mov sl, #0 + mov r2, sl +_0233AB98: + mov r1, #0 + add r0, sp, #0x14 + strb r1, [r0, r2] + add r2, r2, #1 + cmp r2, #0x40 + blt _0233AB98 + mov r0, r1 + str r0, [sp, #0xc] +_0233ABB8: + mov fp, #0 +_0233ABBC: + ldr r0, [sp, #0xc] + mov r1, fp + bl GetTile + str r0, [sp, #0x10] + bl GetTileTerrain + cmp r0, #1 + bne _0233ABFC + ldr r0, [sp, #0x10] + ldrb r2, [r0, #7] + cmp r2, #0xf0 + bhi _0233ABFC + cmp r2, #0x40 + movlo r1, #1 + addlo r0, sp, #0x14 + add sl, sl, #1 + strlob r1, [r0, r2] +_0233ABFC: + add fp, fp, #1 + cmp fp, #0x20 + blt _0233ABBC + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + cmp r0, #0x38 + blt _0233ABB8 + mov r1, #0 + mov r2, r1 +_0233AC24: + add r0, sp, #0x14 + ldrb r0, [r0, r2] + add r2, r2, #1 + cmp r0, #0 + addne r1, r1, #1 + cmp r2, #0x40 + blt _0233AC24 + cmp sl, #0x1e + cmpge r1, #2 + bge _0233AC58 +_0233AC4C: + add r6, r6, #1 +_0233AC50: + cmp r6, #0xa + blt _0233A89C +_0233AC58: + cmp r6, #0xa + bne _0233AC88 + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + mvn r1, #0 + strh r1, [r0, #0x20] + strh r1, [r0, #0x22] + bl GenerateOneRoomMonsterHouseFloor + ldr r0, _0233AE64 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x4000 + strb r1, [r0, #0xc4 + GENERATE_FLOOR_OFFSET] +_0233AC88: + bl FinalizeJunctions + cmp r8, #0 + beq _0233ACA0 + mov r1, sb + mov r0, #1 + bl GenerateSecondaryTerrainFormations +_0233ACA0: + bl DungeonRand100 + ldrb r1, [sb, #0x19] + cmp r0, r1 + movlt r0, #1 + movge r0, #0 + and r4, r0, #0xff + mov r0, sb + mov r1, r4 + bl MarkNonEnemySpawns + mov r0, sb + mov r1, r4 + bl MarkEnemySpawns + bl ResolveInvalidSpawns + ldr r0, _0233AE64 ; =DUNGEON_PTR + mvn r1, #0 + ldr r0, [r0] + add r0, r0, #0xcc00 + ldrsh r2, [r0, #0xe0 + GENERATE_FLOOR_OFFSET] + cmp r2, r1 + ldrnesh r0, [r0, #0xe2 + GENERATE_FLOOR_OFFSET] + cmpne r0, r1 + beq _0233AD38 + bl GetFloorType + cmp r0, #1 + beq _0233AD44 + ldr r0, _0233AE64 ; =DUNGEON_PTR + mvn r2, #0 + ldr r0, [r0] + add r1, r0, #0xcc00 + ldrsh r0, [r1, #0xe4 + GENERATE_FLOOR_OFFSET] + cmp r0, r2 + ldrnesh r1, [r1, #0xe6 + GENERATE_FLOOR_OFFSET] + cmpne r1, r2 + beq _0233AD38 + mov r2, #0 + bl StairsAlwaysReachable + cmp r0, #0 + bne _0233AD44 +_0233AD38: + add r7, r7, #1 +_0233AD3C: + cmp r7, #0xa + blt _0233A870 +_0233AD44: + cmp r7, #0xa + bne _0233AD98 + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + mvn r1, #0 + strh r1, [r0, #0x20] + strh r1, [r0, #0x22] + bl ResetFloor + bl GenerateOneRoomMonsterHouseFloor + ldr r0, _0233AE64 ; =DUNGEON_PTR + mov r1, #1 + ldr r0, [r0] + add r0, r0, #0x4000 + strb r1, [r0, #0xc4 + GENERATE_FLOOR_OFFSET] + bl FinalizeJunctions + mov r0, sb + mov r1, #0 + bl MarkNonEnemySpawns + mov r0, sb + mov r1, #0 + bl MarkEnemySpawns + bl ResolveInvalidSpawns +_0233AD98: + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldrsh r1, [r0, #0x20] + cmp r1, #0 + ldrgesh r0, [r0, #0x22] + cmpge r0, #0 + blt _0233ADCC + bl GetKecleonIdToSpawnByFloor + ldr r1, _0233AE6C ; =FLOOR_GENERATION_STATUS + mov r2, r0 + ldrsh r0, [r1, #0x20] + ldrsh r1, [r1, #0x22] + mov r3, #0 + bl MarkShopkeeperSpawn +_0233ADCC: + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x30] + cmp r0, #0 + ldrlt r0, _0233AE64 ; =DUNGEON_PTR + movlt r1, #0 + blt _0233ADF4 + mov r0, sb + bl ov29_023427E4 + ldr r0, _0233AE64 ; =DUNGEON_PTR + mov r1, #1 +_0233ADF4: + ldr r0, [r0] + mov r2, #0x38 + add r0, r0, #0x4000 + strb r1, [r0, #0xc6 + GENERATE_FLOOR_OFFSET] + mov r0, #0 + mov r1, r0 + mov r3, #0x20 + bl FlagHallwayJunctions + ldr r0, _0233AE6C ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #4] + cmp r0, #0 + beq _0233AE28 + bl ConvertSecondaryTerrainToChasms +_0233AE28: + ldr r0, _0233AE64 ; =DUNGEON_PTR + ldr r0, [r0] + add r0, r0, #0x4000 + ldrsh r0, [r0, #0xd4 + GENERATE_FLOOR_OFFSET] + sub r0, r0, #0x1a + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + bhi _0233AE58 + bl ConvertWallsToChasms +_0233AE58: + bl UnloadFixedRoomData + add sp, sp, #0x54 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233AE64: .word DUNGEON_PTR +_0233AE68: .word 0x000286B2 + GENERATE_FLOOR_OFFSET +_0233AE6C: .word FLOOR_GENERATION_STATUS +_0233AE70: .word SECONDARY_TERRAIN_TYPES +_0233AE74: .word 0x00012AFA + GENERATE_FLOOR_OFFSET + arm_func_end GenerateFloor + + arm_func_start GetTileTerrain +GetTileTerrain: ; 0x0233AE78 + ldrh r0, [r0] + and r0, r0, #3 + bx lr + arm_func_end GetTileTerrain + + arm_func_start DungeonRand100 +DungeonRand100: ; 0x0233AE84 + ldr ip, _0233AE90 ; =DungeonRandInt + mov r0, #0x64 + bx ip + .align 2, 0 +_0233AE90: .word DungeonRandInt + arm_func_end DungeonRand100 + + arm_func_start ClearHiddenStairs +ClearHiddenStairs: ; 0x0233AE94 + stmdb sp!, {r3, lr} + ldr r0, _0233AF04 ; =HIDDEN_STAIRS_SPAWN_BLOCKED + ldrb r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldr r1, _0233AF08 ; =FLOOR_GENERATION_STATUS + mvn r2, #0 + ldrsh r0, [r1, #0x1c] + cmp r0, r2 + ldrnesh r1, [r1, #0x1e] + cmpne r1, r2 + beq _0233AEFC + bl GetTileSafe + mov r2, #0 + strh r2, [r0] + ldr r1, _0233AF08 ; =FLOOR_GENERATION_STATUS + strh r2, [r0, #2] + ldrsh r0, [r1, #0x1c] + ldrsh r1, [r1, #0x1e] + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233AEFC: + bl ResetHiddenStairsSpawn + ldmia sp!, {r3, pc} + .align 2, 0 +_0233AF04: .word HIDDEN_STAIRS_SPAWN_BLOCKED +_0233AF08: .word FLOOR_GENERATION_STATUS + arm_func_end ClearHiddenStairs + + arm_func_start FlagHallwayJunctions +FlagHallwayJunctions: ; 0x0233AF0C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov fp, r1 + mov sb, r2 + mov r8, r3 + b _0233B01C +_0233AF24: + mov r7, fp + sub r6, sl, #1 + b _0233B010 +_0233AF30: + mov r0, sl + mov r1, r7 + mov r4, #0 + bl GetTileSafe + mov r5, r0 + ldrh r0, [r5] + bic r0, r0, #4 + strh r0, [r5] + ldrb r0, [r5, #7] + cmp r0, #0xff + ldreqh r0, [r5] + andeq r0, r0, #3 + cmpeq r0, #1 + bne _0233B00C + cmp sl, #0 + ble _0233AF90 + mov r0, r6 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, r4 + addeq r4, r0, #1 +_0233AF90: + cmp r7, #0 + ble _0233AFB4 + mov r0, sl + sub r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + addeq r4, r4, #1 +_0233AFB4: + cmp sl, #0x36 + bge _0233AFD8 + mov r1, r7 + add r0, sl, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + addeq r4, r4, #1 +_0233AFD8: + cmp sl, #0x1e + bge _0233AFFC + mov r0, sl + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + addeq r4, r4, #1 +_0233AFFC: + cmp r4, #3 + ldrgeh r0, [r5] + orrge r0, r0, #8 + strgeh r0, [r5] +_0233B00C: + add r7, r7, #1 +_0233B010: + cmp r7, r8 + blt _0233AF30 + add sl, sl, #1 +_0233B01C: + cmp sl, sb + blt _0233AF24 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end FlagHallwayJunctions + + arm_func_start GenerateStandardFloor +GenerateStandardFloor: ; 0x0233B028 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r5, r1 + mov r6, r0 + mov r4, r2 + add r0, sp, #0x44 + add r1, sp, #8 + mov r2, r6 + mov r3, r5 + bl GetGridPositions + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl InitDungeonGrid + ldrsb r3, [r4, #1] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl AssignRooms + add r1, sp, #8 + str r1, [sp] + ldrb r3, [r4, #0xd] + add r0, sp, #0x80 + mov r1, r6 + str r3, [sp, #4] + mov r2, r5 + add r3, sp, #0x44 + bl CreateRoomsAndAnchors + mov r0, r6 + bl DungeonRandInt + mov r7, r0 + mov r0, r5 + bl DungeonRandInt + stmia sp, {r0, r4} + mov r3, r7 + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl AssignGridCellConnections + add r1, sp, #8 + str r1, [sp] + mov r0, #0 + str r0, [sp, #4] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + add r3, sp, #0x44 + bl CreateGridCellConnections + add r1, sp, #8 + str r1, [sp] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + add r3, sp, #0x44 + bl EnsureConnectedGrid + ldrb r3, [r4, #9] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateMazeRoom + ldr r3, _0233B18C ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0xc] + mov r1, r6 + mov r2, r5 + bl GenerateKecleonShop + ldr r3, _0233B18C ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0x10] + mov r1, r6 + mov r2, r5 + bl GenerateMonsterHouse + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateExtraHallways + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateRoomImperfections + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateSecondaryStructures + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0233B18C: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateStandardFloor + + arm_func_start GenerateOuterRingFloor +GenerateOuterRingFloor: ; 0x0233B190 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2f4 + sub sp, sp, #0x1800 + mov r1, #5 + mov r2, #0x1c + add r3, r2, #0x33 + add r3, r3, r3, lsr #31 + mov r8, r3, asr #1 + mov fp, #0x33 + mov sl, #0x38 + mov r7, #2 + mov r6, #7 + mov r5, #0x10 + mov r3, #0x1e + str r2, [sp, #0x64] + add r4, r1, #0x1c + str r0, [sp, #8] + add r0, r4, r4, lsr #31 + mov sb, r0, asr #1 + mov r0, #0 + mov r4, #0x19 + str r0, [sp, #0x58] + str r1, [sp, #0x5c] + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + str fp, [sp, #0x6c] + str sl, [sp, #0x70] + str sb, [sp, #0x60] + str r8, [sp, #0x68] + str r7, [sp, #0x1c] + str r6, [sp, #0x20] + str r5, [sp, #0x24] + str r4, [sp, #0x28] + str r3, [sp, #0x2c] + bl InitDungeonGrid + mov r3, #0 + ldr r0, _0233B614 ; =0x000001C2 + add r1, sp, #0x94 + mov r4, r3 +_0233B230: + mla r2, r3, r0, r1 + strb r4, [r2, #0xa] + add r3, r3, #1 + strb r4, [r2, #0x64] + cmp r3, #6 + blt _0233B230 + add r2, sp, #0x94 + mov r1, #0 + mov r0, #0x1e +_0233B254: + mla r3, r4, r0, r2 + strb r1, [r3, #0xa] + add r4, r4, #1 + strb r1, [r3, #0x8d4] + cmp r4, #4 + blt _0233B254 + mov r7, #1 + ldr r1, _0233B614 ; =0x000001C2 + mov r3, r7 + mov r5, r7 + add r4, sp, #0x94 + mov r0, #0x1e +_0233B284: + mla r6, r7, r1, r4 + mov r8, r5 +_0233B28C: + mla r2, r8, r0, r6 + add r8, r8, #1 + strb r3, [r2, #0xa] + cmp r8, #3 + blt _0233B28C + add r7, r7, #1 + cmp r7, #5 + blt _0233B284 + mov sl, #0 + str sl, [sp, #0xc] +_0233B2B4: + add r1, sp, #0x94 + mov r0, #0x1e + mla r7, sl, r0, r1 + add r0, sp, #0x1c + add r0, r0, sl, lsl #2 + mov sb, #0 + str r0, [sp, #0x10] +_0233B2D0: + ldr r0, _0233B614 ; =0x000001C2 + mla r0, sb, r0, r7 + ldrb r0, [r0, #0xa] + cmp r0, #0 + add r0, sp, #0x58 + add r1, r0, sb, lsl #2 + beq _0233B3F8 + ldr r8, [r0, sb, lsl #2] + add r0, sp, #0x1c + ldr r1, [r1, #4] + ldr r4, [r0, sl, lsl #2] + sub r0, r1, r8 + sub r5, r0, #3 + ldr r0, [sp, #0x10] + ldr r1, [r0, #4] + mov r0, #5 + sub r1, r1, r4 + sub r6, r1, #3 + mov r1, r5 + bl DungeonRandRange + mov fp, r0 + mov r0, #4 + mov r1, r6 + bl DungeonRandRange + str r0, [sp, #0x14] + sub r0, r5, fp + bl DungeonRandInt + add r1, r8, #2 + add r8, r1, r0 + ldr r0, [sp, #0x14] + sub r0, r6, r0 + bl DungeonRandInt + add r1, r4, #2 + add r4, r1, r0 + ldr r0, [sp, #0x14] + add fp, r8, fp + add r5, r4, r0 + ldr r0, _0233B614 ; =0x000001C2 + mul r0, sb, r0 + strh r8, [r7, r0] + add r0, r7, r0 + strh fp, [r0, #4] + strh r4, [r0, #2] + strh r5, [r0, #6] + ldr r0, [sp, #0xc] + and r0, r0, #0xff + str r0, [sp, #0x18] + b _0233B3E0 +_0233B390: + mov r6, r4 + b _0233B3D4 +_0233B398: + mov r0, r8 + mov r1, r6 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r6 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r8 + bl GetTileSafe + ldr r1, [sp, #0x18] + add r6, r6, #1 + strb r1, [r0, #7] +_0233B3D4: + cmp r6, r5 + blt _0233B398 + add r8, r8, #1 +_0233B3E0: + cmp r8, fp + blt _0233B390 + ldr r0, [sp, #0xc] + add r0, r0, #1 + str r0, [sp, #0xc] + b _0233B4A0 +_0233B3F8: + ldr r2, [r0, sb, lsl #2] + ldr r1, [r1, #4] + add r0, r2, #1 + sub r1, r1, r2 + add r2, sp, #0x1c + ldr r3, [r2, sl, lsl #2] + ldr r2, [sp, #0x10] + sub r1, r1, #3 + ldr r2, [r2, #4] + add r1, r0, r1 + sub r2, r2, r3 + add r4, r3, #1 + sub r5, r2, #3 + bl DungeonRandRange + add r1, r4, r5 + mov r5, r0 + mov r0, r4 + bl DungeonRandRange + mov r4, r0 + ldr r0, _0233B614 ; =0x000001C2 + mul r0, sb, r0 + strh r5, [r7, r0] + add r1, r7, r0 + add r0, r5, #1 + strh r0, [r1, #4] + strh r4, [r1, #2] + add r0, r4, #1 + strh r0, [r1, #6] + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + mov r1, #0xff + strb r1, [r0, #7] +_0233B4A0: + add sb, sb, #1 + cmp sb, #6 + blt _0233B2D0 + add sl, sl, #1 + cmp sl, #4 + blt _0233B2B4 + mov r1, #1 + mov r0, #6 + strb r1, [sp, #0xaa] + strb r1, [sp, #0x26b] + strb r1, [sp, #0x26c] + strb r1, [sp, #0x42d] + strb r1, [sp, #0x42e] + strb r1, [sp, #0x5ef] + strb r1, [sp, #0x5f0] + strb r1, [sp, #0x7b1] + strb r1, [sp, #0x7b2] + strb r1, [sp, #0x973] + strb r1, [sp, #0xa8] + strb r1, [sp, #0xc5] + strb r1, [sp, #0xc6] + strb r1, [sp, #0xe3] + strb r1, [sp, #0xe4] + strb r1, [sp, #0x101] + strb r1, [sp, #0x104] + strb r1, [sp, #0x2c5] + strb r1, [sp, #0x2c6] + strb r1, [sp, #0x487] + strb r1, [sp, #0x488] + strb r1, [sp, #0x649] + strb r1, [sp, #0x64a] + strb r1, [sp, #0x80b] + strb r1, [sp, #0x80c] + strb r1, [sp, #0x9cd] + strb r1, [sp, #0x972] + strb r1, [sp, #0x98f] + strb r1, [sp, #0x990] + strb r1, [sp, #0x9ad] + strb r1, [sp, #0x9ae] + strb r1, [sp, #0x9cb] + bl DungeonRandInt + mov r4, r0 + mov r0, #4 + bl DungeonRandInt + mov r3, r4 + str r0, [sp] + ldr r4, [sp, #8] + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + str r4, [sp, #4] + bl AssignGridCellConnections + add r1, sp, #0x1c + str r1, [sp] + mov r0, #0 + str r0, [sp, #4] + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + add r3, sp, #0x58 + bl CreateGridCellConnections + add r1, sp, #0x1c + str r1, [sp] + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + add r3, sp, #0x58 + bl EnsureConnectedGrid + ldr r1, _0233B618 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x94 + ldrsh r3, [r1, #0xc] + mov r1, #6 + mov r2, #4 + bl GenerateKecleonShop + ldr r1, _0233B618 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x94 + ldrsh r3, [r1, #0x10] + mov r1, #6 + mov r2, #4 + bl GenerateMonsterHouse + ldr r0, [sp, #8] + mov r1, #6 + ldrb r3, [r0, #0x13] + add r0, sp, #0x94 + mov r2, #4 + bl GenerateExtraHallways + add r0, sp, #0x94 + mov r1, #6 + mov r2, #4 + bl GenerateRoomImperfections + add sp, sp, #0x2f4 + add sp, sp, #0x1800 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233B614: .word 0x000001C2 +_0233B618: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateOuterRingFloor + + arm_func_start GenerateCrossroadsFloor +GenerateCrossroadsFloor: ; 0x0233B61C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2f8 + sub sp, sp, #0x1800 + mov r1, #0 + mov r2, #0xb + str r0, [sp, #8] + mov fp, #0x16 + mov sl, #0x21 + mov sb, #0x2c + mov r8, #0x38 + mov r7, #1 + mov r6, #9 + mov r5, #0x10 + mov r4, #0x17 + mov r3, #0x1f + str r1, [sp, #0x5c] + str r2, [sp, #0x60] + add r0, sp, #0x98 + mov r1, #5 + mov r2, #4 + str fp, [sp, #0x64] + str sl, [sp, #0x68] + str sb, [sp, #0x6c] + str r8, [sp, #0x70] + str r7, [sp, #0x20] + str r6, [sp, #0x24] + str r5, [sp, #0x28] + str r4, [sp, #0x2c] + str r3, [sp, #0x30] + bl InitDungeonGrid + ldr r0, _0233BA74 ; =0x000001C2 + mov r4, #0 + add r2, sp, #0x98 + mov r1, r7 +_0233B6A4: + mla r3, r4, r0, r2 + strb r1, [r3, #0xa] + add r4, r4, #1 + strb r1, [r3, #0x64] + cmp r4, #5 + blt _0233B6A4 + mov r3, #0 + add r1, sp, #0x98 + mov r7, #1 + mov r0, #0x1e +_0233B6CC: + mla r2, r3, r0, r1 + strb r7, [r2, #0xa] + add r3, r3, #1 + strb r7, [r2, #0x712] + cmp r3, #4 + blt _0233B6CC + ldr r1, _0233BA74 ; =0x000001C2 + mov r4, #0 + mov r5, #1 + add r3, sp, #0x98 + mov r0, #0x1e +_0233B6F8: + mla r6, r7, r1, r3 + mov r8, r5 +_0233B700: + mla r2, r8, r0, r6 + add r8, r8, #1 + strb r4, [r2, #0xa] + cmp r8, #3 + blt _0233B700 + add r7, r7, #1 + cmp r7, #4 + blt _0233B6F8 + mov r0, #1 + mov sl, r4 + strb r0, [sp, #0xa0] + strb r0, [sp, #0x7a8] + strb r0, [sp, #0xfa] + strb r0, [sp, #0x802] +_0233B738: + add r1, sp, #0x98 + mov r0, #0x1e + mla r7, sl, r0, r1 + add r0, sp, #0x20 + add r0, r0, sl, lsl #2 + mov sb, #0 + str r0, [sp, #0x10] +_0233B754: + ldr r0, _0233BA74 ; =0x000001C2 + mla r1, sb, r0, r7 + ldrb r0, [r1, #8] + cmp r0, #0 + bne _0233B938 + ldrb r0, [r1, #0xa] + cmp r0, #0 + add r0, sp, #0x5c + add r1, r0, sb, lsl #2 + beq _0233B890 + ldr r8, [r0, sb, lsl #2] + add r0, sp, #0x20 + ldr r1, [r1, #4] + ldr r5, [r0, sl, lsl #2] + sub r0, r1, r8 + sub r6, r0, #3 + ldr r0, [sp, #0x10] + ldr r1, [r0, #4] + mov r0, #5 + sub r1, r1, r5 + sub fp, r1, #3 + mov r1, r6 + bl DungeonRandRange + str r0, [sp, #0x14] + mov r0, #4 + mov r1, fp + bl DungeonRandRange + str r0, [sp, #0x18] + ldr r0, [sp, #0x14] + sub r0, r6, r0 + bl DungeonRandInt + add r1, r8, #2 + add r8, r1, r0 + ldr r0, [sp, #0x18] + sub r0, fp, r0 + bl DungeonRandInt + add r1, r5, #2 + add r5, r1, r0 + ldr r0, [sp, #0x14] + add r0, r8, r0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x18] + add fp, r5, r0 + ldr r0, _0233BA74 ; =0x000001C2 + mul r0, sb, r0 + strh r8, [r7, r0] + add r1, r7, r0 + ldr r0, [sp, #0xc] + strh r0, [r1, #4] + strh r5, [r1, #2] + and r0, r4, #0xff + strh fp, [r1, #6] + str r0, [sp, #0x1c] + b _0233B87C +_0233B82C: + mov r6, r5 + b _0233B870 +_0233B834: + mov r0, r8 + mov r1, r6 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r6 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r8 + bl GetTileSafe + ldr r1, [sp, #0x1c] + add r6, r6, #1 + strb r1, [r0, #7] +_0233B870: + cmp r6, fp + blt _0233B834 + add r8, r8, #1 +_0233B87C: + ldr r0, [sp, #0xc] + cmp r8, r0 + blt _0233B82C + add r4, r4, #1 + b _0233B938 +_0233B890: + ldr r2, [r0, sb, lsl #2] + ldr r1, [r1, #4] + add r0, r2, #1 + sub r1, r1, r2 + add r2, sp, #0x20 + ldr r3, [r2, sl, lsl #2] + ldr r2, [sp, #0x10] + sub r1, r1, #3 + ldr r2, [r2, #4] + add r1, r0, r1 + sub r2, r2, r3 + add r5, r3, #1 + sub r6, r2, #3 + bl DungeonRandRange + add r1, r5, r6 + mov r6, r0 + mov r0, r5 + bl DungeonRandRange + mov r5, r0 + ldr r0, _0233BA74 ; =0x000001C2 + mul r0, sb, r0 + strh r6, [r7, r0] + add r1, r7, r0 + add r0, r6, #1 + strh r0, [r1, #4] + strh r5, [r1, #2] + add r0, r5, #1 + strh r0, [r1, #6] + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r5 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r6 + bl GetTileSafe + mov r1, #0xff + strb r1, [r0, #7] +_0233B938: + add sb, sb, #1 + cmp sb, #5 + blt _0233B754 + add sl, sl, #1 + cmp sl, #4 + blt _0233B738 + mov r7, #1 + ldr r2, _0233BA74 ; =0x000001C2 + mov r0, r7 + mov r5, #0 + add r4, sp, #0x98 + mov r1, #0x1e +_0233B968: + mla r6, r7, r2, r4 + mov r8, r5 +_0233B970: + mla r3, r8, r1, r6 + strb r0, [r3, #0x14] + add r8, r8, #1 + strb r0, [r3, #0x31] + cmp r8, #3 + blt _0233B970 + add r7, r7, #1 + cmp r7, #4 + blt _0233B968 + ldr r1, _0233BA74 ; =0x000001C2 + mov r4, #1 + mov r6, #0 + add r5, sp, #0x98 + mov r2, #0x1e +_0233B9A8: + mla r7, r0, r2, r5 + mov r8, r6 +_0233B9B0: + mla r3, r8, r1, r7 + strb r4, [r3, #0x16] + add r8, r8, #1 + strb r4, [r3, #0x1d7] + cmp r8, #4 + blt _0233B9B0 + add r0, r0, #1 + cmp r0, #3 + blt _0233B9A8 + add r1, sp, #0x20 + str r1, [sp] + add r0, sp, #0x98 + add r3, sp, #0x5c + mov r1, #5 + mov r2, #4 + str r4, [sp, #4] + bl CreateGridCellConnections + add r4, sp, #0x20 + add r0, sp, #0x98 + add r3, sp, #0x5c + mov r1, #5 + mov r2, #4 + str r4, [sp] + bl EnsureConnectedGrid + ldr r1, _0233BA78 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x98 + ldrsh r3, [r1, #0xc] + mov r1, #5 + mov r2, #4 + bl GenerateKecleonShop + ldr r1, _0233BA78 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x98 + ldrsh r3, [r1, #0x10] + mov r1, #5 + mov r2, #4 + bl GenerateMonsterHouse + ldr r0, [sp, #8] + mov r1, #5 + ldrb r3, [r0, #0x13] + add r0, sp, #0x98 + mov r2, #4 + bl GenerateExtraHallways + add r0, sp, #0x98 + mov r1, #5 + mov r2, #4 + bl GenerateRoomImperfections + add sp, sp, #0x2f8 + add sp, sp, #0x1800 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233BA74: .word 0x000001C2 +_0233BA78: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateCrossroadsFloor + + arm_func_start GenerateLineFloor +GenerateLineFloor: ; 0x0233BA7C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r7, #0 + mov r6, #0xb + mov lr, #0x16 + mov ip, #0x21 + mov r5, #0x2c + mov r3, #0x38 + mov r2, #4 + mov r1, #0xf + mov r4, r0 + str r2, [sp, #8] + str r1, [sp, #0xc] + add r0, sp, #0x80 + str r7, [sp, #0x44] + str r6, [sp, #0x48] + str lr, [sp, #0x4c] + str ip, [sp, #0x50] + str r5, [sp, #0x54] + str r3, [sp, #0x58] + mov r1, #5 + mov r2, #1 + bl InitDungeonGrid + ldrsb r3, [r4, #1] + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + bl AssignRooms + add r1, sp, #8 + str r1, [sp] + ldrb r2, [r4, #0xd] + add r0, sp, #0x80 + add r3, sp, #0x44 + str r2, [sp, #4] + mov r1, #5 + mov r2, #1 + bl CreateRoomsAndAnchors + mov r0, #5 + bl DungeonRandInt + mov r5, r0 + mov r0, #1 + bl DungeonRandInt + stmia sp, {r0, r4} + mov r3, r5 + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + bl AssignGridCellConnections + add r0, sp, #8 + mov r2, #1 + stmia sp, {r0, r2} + add r0, sp, #0x80 + mov r1, #5 + add r3, sp, #0x44 + bl CreateGridCellConnections + add r1, sp, #8 + str r1, [sp] + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + add r3, sp, #0x44 + bl EnsureConnectedGrid + ldr r3, _0233BBD8 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0xc] + mov r1, #5 + mov r2, #1 + bl GenerateKecleonShop + ldr r1, _0233BBD8 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r1, #0x10] + mov r1, #5 + mov r2, #1 + bl GenerateMonsterHouse + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + bl GenerateExtraHallways + add r0, sp, #0x80 + mov r1, #5 + mov r2, #1 + bl GenerateRoomImperfections + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0233BBD8: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateLineFloor + + arm_func_start GenerateCrossFloor +GenerateCrossFloor: ; 0x0233BBDC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r1, #3 + mov r8, #0xb + mov r4, r0 + mov r7, #0x16 + mov r6, #0x21 + mov r5, #0x2c + mov lr, #2 + mov ip, #0x14 + mov r3, #0x1e + add r0, sp, #0x80 + mov r2, r1 + str r8, [sp, #0x44] + str r7, [sp, #0x48] + str r6, [sp, #0x4c] + str r5, [sp, #0x50] + str lr, [sp, #8] + str r8, [sp, #0xc] + str ip, [sp, #0x10] + str r3, [sp, #0x14] + bl InitDungeonGrid + mov r5, #0 + ldr r1, _0233BD6C ; =0x000001C2 + mov r3, #1 + mov lr, r5 + add ip, sp, #0x80 + mov r0, #0x1e +_0233BC50: + mla r7, r5, r1, ip + mov r6, lr +_0233BC58: + mla r2, r6, r0, r7 + add r6, r6, #1 + strb r3, [r2, #0xa] + cmp r6, #3 + blt _0233BC58 + add r5, r5, #1 + cmp r5, #3 + blt _0233BC50 + add r0, sp, #8 + strb r3, [sp, #0x88] + strb r3, [sp, #0x40c] + mov r1, #3 + strb r3, [sp, #0xc4] + strb r3, [sp, #0x448] + str r0, [sp] + ldrb ip, [r4, #0xd] + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp, #4] + bl CreateRoomsAndAnchors + mov ip, #1 + mov r1, #3 + add r0, sp, #8 + strb ip, [sp, #0xb4] + strb ip, [sp, #0x275] + strb ip, [sp, #0x276] + strb ip, [sp, #0x437] + strb ip, [sp, #0x256] + strb ip, [sp, #0x273] + strb ip, [sp, #0x274] + strb ip, [sp, #0x291] + str r0, [sp] + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp, #4] + bl CreateGridCellConnections + mov r1, #3 + add ip, sp, #8 + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp] + bl EnsureConnectedGrid + ldr r1, _0233BD70 ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r1, #0xc] + mov r1, #3 + mov r2, r1 + bl GenerateKecleonShop + ldr r3, _0233BD70 ; =FLOOR_GENERATION_STATUS + mov r1, #3 + ldrsh r3, [r3, #0x10] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateMonsterHouse + mov r1, #3 + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateExtraHallways + mov r1, #3 + add r0, sp, #0x80 + mov r2, r1 + bl GenerateRoomImperfections + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0233BD6C: .word 0x000001C2 +_0233BD70: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateCrossFloor + + arm_func_start GenerateBeetleFloor +GenerateBeetleFloor: ; 0x0233BD74 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r1, #3 + mov r4, r0 + mov sb, #5 + mov r8, #0xf + mov r7, #0x23 + mov r6, #0x32 + mov r5, #2 + mov lr, #0xb + mov ip, #0x14 + mov r3, #0x1e + add r0, sp, #0x80 + mov r2, r1 + str sb, [sp, #0x44] + str r8, [sp, #0x48] + str r7, [sp, #0x4c] + str r6, [sp, #0x50] + str r5, [sp, #8] + str lr, [sp, #0xc] + str ip, [sp, #0x10] + str r3, [sp, #0x14] + bl InitDungeonGrid + mov r5, #0 + ldr r1, _0233BF28 ; =0x000001C2 + mov r3, #1 + mov lr, r5 + add ip, sp, #0x80 + mov r0, #0x1e +_0233BDEC: + mla r7, r5, r1, ip + mov r6, lr +_0233BDF4: + mla r2, r6, r0, r7 + add r6, r6, #1 + strb r3, [r2, #0xa] + cmp r6, #3 + blt _0233BDF4 + add r5, r5, #1 + cmp r5, #3 + blt _0233BDEC + add r0, sp, #8 + str r0, [sp] + ldrb ip, [r4, #0xd] + mov r1, #3 + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp, #4] + bl CreateRoomsAndAnchors + mov r3, #0 + add r0, sp, #0x80 + mov ip, #1 + mov r1, #0x1e +_0233BE48: + mla r2, r3, r1, r0 + strb ip, [r2, #0x16] + strb ip, [r2, #0x1d7] + strb ip, [r2, #0x1d8] + add r3, r3, #1 + strb ip, [r2, #0x399] + cmp r3, #3 + blt _0233BE48 + add r2, sp, #8 + str r2, [sp] + mov r1, #3 + add r3, sp, #0x44 + mov r2, r1 + str ip, [sp, #4] + bl CreateGridCellConnections + mov r0, #1 + add r3, sp, #0x80 + mov r2, r0 + mov r1, #0 + bl MergeRoomsVertically + add r3, sp, #0x80 + mov r0, #1 + mov r1, #0 + mov r2, #2 + bl MergeRoomsVertically + add r1, sp, #8 + str r1, [sp] + mov r1, #3 + add r0, sp, #0x80 + mov r2, r1 + add r3, sp, #0x44 + bl EnsureConnectedGrid + ldr r3, _0233BF2C ; =FLOOR_GENERATION_STATUS + mov r1, #3 + ldrsh r3, [r3, #0xc] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateKecleonShop + ldr r3, _0233BF2C ; =FLOOR_GENERATION_STATUS + mov r1, #3 + ldrsh r3, [r3, #0x10] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateMonsterHouse + mov r1, #3 + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r2, r1 + bl GenerateExtraHallways + mov r1, #3 + add r0, sp, #0x80 + mov r2, r1 + bl GenerateRoomImperfections + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0233BF28: .word 0x000001C2 +_0233BF2C: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateBeetleFloor + + arm_func_start MergeRoomsVertically +MergeRoomsVertically: ; 0x0233BF30 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov r5, #0x1e + add r4, r5, #0x1a4 + add r2, r1, r2 + mul r7, r0, r4 + mov sl, r3 + mul r8, r2, r5 + add fp, sl, r7 + ldrsh r0, [fp, r8] + mul r6, r1, r5 + str r0, [sp] + ldrsh r0, [fp, r6] + ldr r1, [sp] + cmp r0, r1 + add r1, sl, #4 + add r1, r1, r7 + strlt r0, [sp] + str r1, [sp, #0x14] + ldrsh r2, [r1, r8] + ldrsh sb, [r1, r6] + add r1, sl, #2 + add r1, r1, r7 + str r1, [sp, #0x10] + ldrsh r1, [r1, r6] + cmp sb, r2 + movle sb, r2 + str r1, [sp, #8] + add r1, sl, #6 + add r1, r1, r7 + str r1, [sp, #4] + ldr r2, [sp, #4] + ldr r1, [sp, #8] + ldrsh r2, [r2, r8] + str r2, [sp, #0xc] + bl GetTile + ldrb r0, [r0, #7] + ldr r5, [sp] + and r0, r0, #0xff + str r0, [sp, #0x18] + b _0233C01C +_0233BFD4: + ldr r4, [sp, #8] + b _0233C00C +_0233BFDC: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x18] + strb r1, [r0, #7] +_0233C00C: + ldr r0, [sp, #0xc] + cmp r4, r0 + blt _0233BFDC + add r5, r5, #1 +_0233C01C: + cmp r5, sb + blt _0233BFD4 + ldr r0, [sp] + add r3, sl, #0x12 + strh r0, [fp, r6] + ldr r0, [sp, #0x14] + add r2, sl, r7 + strh sb, [r0, r6] + ldr r1, [sp, #8] + ldr r0, [sp, #0x10] + strh r1, [r0, r6] + ldr r1, [sp, #0xc] + ldr r0, [sp, #4] + strh r1, [r0, r6] + add r0, r3, r7 + mov r3, #1 + strb r3, [r0, r8] + strb r3, [r0, r6] + add r0, r2, r8 + mov r1, #0 + strb r1, [r0, #0xb] + strb r3, [r0, #0x11] + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end MergeRoomsVertically + + arm_func_start GenerateOuterRoomsFloor +GenerateOuterRoomsFloor: ; 0x0233C07C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xae0 + sub sp, sp, #0x1000 + mov r5, r1 + mov r6, r0 + mov r4, r2 + add r0, sp, #0x44 + add r1, sp, #8 + mov r2, r6 + mov r3, r5 + bl GetGridPositions + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl InitDungeonGrid + mov sb, #0 + mov r3, #1 + mov r8, sb + add r7, sp, #0x80 + mov r0, #0x1e + ldr r1, _0233C308 ; =0x000001C2 + b _0233C0F8 +_0233C0D4: + mla fp, sb, r1, r7 + mov sl, r8 + b _0233C0EC +_0233C0E0: + mla r2, sl, r0, fp + strb r3, [r2, #0xa] + add sl, sl, #1 +_0233C0EC: + cmp sl, r5 + blt _0233C0E0 + add sb, sb, #1 +_0233C0F8: + cmp sb, r6 + blt _0233C0D4 + mov fp, #1 + sub r3, r5, #1 + sub r2, r6, #1 + mov r8, fp + mov lr, fp + add sb, sp, #0x80 + mov r0, #0x1e + ldr r1, _0233C308 ; =0x000001C2 + b _0233C148 +_0233C124: + mla sl, fp, r1, sb + mov ip, lr + b _0233C13C +_0233C130: + mla r7, ip, r0, sl + strb r8, [r7, #8] + add ip, ip, #1 +_0233C13C: + cmp ip, r3 + blt _0233C130 + add fp, fp, #1 +_0233C148: + cmp fp, r2 + blt _0233C124 + add r1, sp, #8 + str r1, [sp] + ldrb r7, [r4, #0xd] + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r1, r6 + mov r2, r5 + str r7, [sp, #4] + bl CreateRoomsAndAnchors + mov r2, #1 + add r3, sp, #0x80 + sub r1, r5, #1 + mov r0, #0x1e + mla r7, r1, r0, r3 + mov r8, #0 + sub r1, r6, #2 + sub r0, r6, #1 + mov fp, r2 + ldr sb, _0233C308 ; =0x000001C2 + b _0233C1D4 +_0233C1A0: + cmp r8, #0 + mulne ip, r8, sb + addne sl, r3, ip + strneb r2, [sl, #0x16] + addne sl, r7, ip + strneb r2, [sl, #0x16] + cmp r8, r1 + mullt ip, r8, sb + addlt sl, r3, ip + strltb fp, [sl, #0x1d7] + addlt sl, r7, ip + strltb fp, [sl, #0x1d7] + add r8, r8, #1 +_0233C1D4: + cmp r8, r0 + blt _0233C1A0 + ldr r2, _0233C308 ; =0x000001C2 + add r1, sp, #0x80 + mla r2, r0, r2, r1 + mov r0, #1 + mov ip, #0x1e + mov r3, #0 + sub sl, r5, #2 + sub lr, r5, #1 + mov r8, r0 + mov fp, ip + b _0233C23C +_0233C208: + cmp r3, #0 + mulne sb, r3, ip + addne r7, r1, sb + strneb r0, [r7, #0x13] + addne r7, r2, sb + strneb r0, [r7, #0x13] + cmp r3, sl + mullt sb, r3, fp + addlt r7, r1, sb + strltb r8, [r7, #0x14] + addlt r7, r2, sb + strltb r8, [r7, #0x14] + add r3, r3, #1 +_0233C23C: + cmp r3, lr + blt _0233C208 + add r7, sp, #8 + str r7, [sp] + mov r7, #0 + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r1, r6 + mov r2, r5 + str r7, [sp, #4] + bl CreateGridCellConnections + add r7, sp, #8 + add r0, sp, #0x80 + add r3, sp, #0x44 + mov r1, r6 + mov r2, r5 + str r7, [sp] + bl EnsureConnectedGrid + ldrb r3, [r4, #9] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateMazeRoom + ldr r3, _0233C30C ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0xc] + mov r1, r6 + mov r2, r5 + bl GenerateKecleonShop + ldr r3, _0233C30C ; =FLOOR_GENERATION_STATUS + add r0, sp, #0x80 + ldrsh r3, [r3, #0x10] + mov r1, r6 + mov r2, r5 + bl GenerateMonsterHouse + ldrb r3, [r4, #0x13] + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateExtraHallways + add r0, sp, #0x80 + mov r1, r6 + mov r2, r5 + bl GenerateRoomImperfections + mov r1, r6 + mov r2, r5 + add r0, sp, #0x80 + bl GenerateSecondaryStructures + add sp, sp, #0xae0 + add sp, sp, #0x1000 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233C308: .word 0x000001C2 +_0233C30C: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateOuterRoomsFloor + + arm_func_start IsNotFullFloorFixedRoom +IsNotFullFloorFixedRoom: ; 0x0233C310 + cmp r0, #0 + ble _0233C324 + cmp r0, #0xa5 + movlt r0, #0 + bxlt lr +_0233C324: + mov r0, #1 + bx lr + arm_func_end IsNotFullFloorFixedRoom + + arm_func_start GenerateFixedRoom +GenerateFixedRoom: ; 0x0233C32C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2f8 + sub sp, sp, #0x1800 + ldr r2, _0233C764 ; =DUNGEON_PTR + str r1, [sp, #0x10] + ldr r2, [r2] + mov sl, r0 + add r1, r2, #0x12000 +#ifdef JAPAN + ldr r1, [r1, #0xa00] +#else + ldr r1, [r1, #0xaa4] +#endif + ldr r1, [r1, sl, lsl #2] + ldrh r4, [r1] + ldrh r5, [r1, #2] + cmp r4, #0 + cmpne r5, #0 + bne _0233C374 + bl GenerateOneRoomMonsterHouseFloor + mov r0, #0 + b _0233C758 +_0233C374: + bl IsNotFullFloorFixedRoom + cmp r0, #0 + bne _0233C590 + ldr r0, _0233C764 ; =DUNGEON_PTR +#ifdef JAPAN + ldr r2, _0233C768 ; =HIDDEN_STAIRS_SPAWN_BLOCKED + ldr r4, [r0] + ldr r1, _0233C76C ; =FLOOR_GENERATION_STATUS + add r0, r4, #0x12000 + ldr r3, [r0, #0xa00] + add r4, r4, #0xcc00 + ldr r5, [r3, sl, lsl #2] + mov r3, #0 + ldrh r7, [r5] + ldrh r6, [r5, #2] + mov sb, #5 + add fp, r7, #5 + strh r7, [r4, #0x90] + strh r6, [r4, #0x92] + ldr r0, [r0, #0xa00] + ldr r0, [r0, sl, lsl #2] + add r0, r0, #6 + str r0, [r2, #4] + add r0, r6, #5 + strh r3, [r1, #0xa] + str r0, [sp, #0x1c] +#else + ldr r4, _0233C768 ; =HIDDEN_STAIRS_SPAWN_BLOCKED + ldr r0, [r0] + ldr r3, _0233C76C ; =FLOOR_GENERATION_STATUS + add r2, r0, #0x12000 + ldr r5, [r2, #0xaa4] + add r1, r0, #0xcd00 + ldr r6, [r5, sl, lsl #2] + add r0, r0, #0xcc00 + ldrh r7, [r6] + ldrh r6, [r6, #2] + mov r5, #0 + mov sb, #5 + strh r7, [r1, #0x34] + strh r6, [r1, #0x36] + ldr r1, [r2, #0xaa4] + add fp, r6, #5 + ldr r1, [r1, sl, lsl #2] + str r0, [sp, #0x1c] + add r1, r1, #6 + str r1, [r4, #4] + strh r5, [r3, #0xa] + add r4, r7, #5 +#endif + b _0233C450 +_0233C3E0: + mov r0, sb, lsl #0x10 + mov r8, #5 + mov r5, r0, asr #0x10 + b _0233C444 +_0233C3F0: + bl GetNextFixedRoomAction + str r0, [sp, #0x18] + mov r0, r8 + mov r1, sb + bl GetTileSafe + ldrh ip, [r0] + ldr r1, [sp, #0x18] + mov r2, r8 + orr ip, ip, #0x100 + strh ip, [r0] + mov ip, #0 + strb ip, [r0, #6] + mov ip, #1 + mov r3, sb + str ip, [sp] + bl PlaceFixedRoomTile + cmp r0, #0 +#ifdef JAPAN + strneh r8, [r4, #0x40] + strneh r5, [r4, #0x42] +#else + ldrne r0, [sp, #0x1c] + strneh r8, [r0, #0xe4] + strneh r5, [r0, #0xe6] +#endif + add r8, r8, #1 +_0233C444: +#ifdef JAPAN + cmp r8, fp +#else + cmp r8, r4 +#endif + blt _0233C3F0 + add sb, sb, #1 +_0233C450: +#ifdef JAPAN + ldr r0, [sp, #0x1c] + cmp sb, r0 +#else + cmp sb, fp +#endif + blt _0233C3E0 + mov r8, #0 + add r4, r6, #5 + ldr sb, _0233C76C ; =FLOOR_GENERATION_STATUS + add r5, r7, #5 + mov r6, r8 +_0233C46C: + mov r7, r6 +_0233C470: + cmp r7, #5 + blt _0233C490 + cmp r7, r5 + bge _0233C490 + cmp r8, #5 + blt _0233C490 + cmp r8, r4 + blt _0233C4D4 +_0233C490: + mov r0, r7 + mov r1, r8 + bl GetTileSafe + ldrh r1, [r0] + orr r1, r1, #0x10 + strh r1, [r0] + ldrb r1, [sb, #4] + cmp r1, #0 + ldrh r1, [r0] + biceq r1, r1, #3 + streqh r1, [r0] + beq _0233C4D4 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #3 + strh r1, [r0] +_0233C4D4: + add r7, r7, #1 + cmp r7, #0x38 + blt _0233C470 + add r8, r8, #1 + cmp r8, #0x20 + blt _0233C46C + cmp sl, #4 + bne _0233C534 + mov r5, #5 + mov r4, #2 +_0233C4FC: + mov r6, r4 +_0233C500: + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + add r6, r6, #1 + cmp r6, #5 + orr r1, r1, #0x10 + bic r1, r1, #3 + strh r1, [r0] + blt _0233C500 + add r5, r5, #1 + cmp r5, #0x10 + ble _0233C4FC +_0233C534: + bl IsCurrentTilesetBackground + cmp r0, #0 + beq _0233C584 + mov r6, #0 + mov r4, r6 +_0233C548: + mov r5, r4 +_0233C54C: + mov r0, r5 + mov r1, r6 + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + tst r1, #3 + ldreqh r1, [r0] + orreq r1, r1, #0x10 + streqh r1, [r0] + cmp r5, #0x38 + blt _0233C54C + add r6, r6, #1 + cmp r6, #0x20 + blt _0233C548 +_0233C584: + bl FinalizeJunctions + mov r0, #1 + b _0233C758 +_0233C590: + add r1, r4, #4 + mov r0, #0x38 + bl _s32_div_f + mov r6, r0 + cmp r6, #2 + add r1, r5, #4 + mov r0, #0x20 + movlt r6, #1 + bl _s32_div_f + mov r7, r0 + cmp r7, #2 + movlt r7, #1 + mov r1, #0 + str r1, [sp, #0x14] + add r0, sp, #0x20 + add r1, sp, #0x5c + mov r2, r6 + mov r3, r7 + ldr r8, [sp, #0x14] + bl GetGridPositions + add r0, sp, #0x98 + mov r1, r6 + mov r2, r7 + bl InitDungeonGrid + ldr r3, [sp, #0x10] + add r0, sp, #0x98 + ldrsb r3, [r3, #1] + mov r1, r6 + mov r2, r7 + bl AssignRooms + mov sb, #0 + mov r3, #1 + mov lr, sb + add fp, sp, #0x98 + mov r0, #0x1e + ldr r1, _0233C770 ; =0x000001C2 + b _0233C648 +_0233C624: + mla ip, sb, r1, fp + mov r8, lr + b _0233C63C +_0233C630: + mla r2, r8, r0, ip + strb r3, [r2, #0x1b] + add r8, r8, #1 +_0233C63C: + cmp r8, r7 + blt _0233C630 + add sb, sb, #1 +_0233C648: + cmp sb, r6 + blt _0233C624 + mov fp, #0 + b _0233C69C +_0233C658: + mov r0, r6 + bl DungeonRandInt + mov sb, r0 + mov r0, r7 + bl DungeonRandInt + mov r8, r0 + ldr r1, _0233C770 ; =0x000001C2 + add r0, sp, #0x98 + mla r1, sb, r1, r0 + mov r0, #0x1e + mla r0, r8, r0, r1 + ldrb r1, [r0, #0xa] + mla r0, r6, r8, sb + str r0, [sp, #0x14] + cmp r1, #0 + bne _0233C6A4 + add fp, fp, #1 +_0233C69C: + cmp fp, #0x40 + blt _0233C658 +_0233C6A4: + add r1, sp, #0x5c + str r1, [sp] + ldr r1, [sp, #0x14] + add r0, sp, #0x98 + stmib sp, {r1, r4} + add r3, sp, #0x20 + mov r1, r6 + mov r2, r7 + str r5, [sp, #0xc] + bl ov29_0234217C + cmp r6, #1 + cmpeq r7, #1 + beq _0233C738 + ldr r4, [sp, #0x10] + str r8, [sp] + add r0, sp, #0x98 + mov r1, r6 + mov r2, r7 + mov r3, sb + str r4, [sp, #4] + bl AssignGridCellConnections + add r4, sp, #0x5c + str r4, [sp] + mov r4, #1 + add r0, sp, #0x98 + add r3, sp, #0x20 + mov r1, r6 + mov r2, r7 + str r4, [sp, #4] + bl CreateGridCellConnections + add r0, sp, #0x5c + str r0, [sp] + mov r1, r6 + add r0, sp, #0x98 + mov r2, r7 + add r3, sp, #0x20 + bl EnsureConnectedGrid +_0233C738: + ldr r0, _0233C770 ; =0x000001C2 + add r2, sp, #0x98 + mla r0, sb, r0, r2 + mov r1, #0x1e + mla r0, r8, r1, r0 + mov r1, sl + bl ov29_02342594 + mov r0, #0 +_0233C758: + add sp, sp, #0x2f8 + add sp, sp, #0x1800 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233C764: .word DUNGEON_PTR +_0233C768: .word HIDDEN_STAIRS_SPAWN_BLOCKED +_0233C76C: .word FLOOR_GENERATION_STATUS +_0233C770: .word 0x000001C2 + arm_func_end GenerateFixedRoom + + arm_func_start GenerateOneRoomMonsterHouseFloor +GenerateOneRoomMonsterHouseFloor: ; 0x0233C774 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0xa60 + sub sp, sp, #0x1000 + mov r1, #1 + add r0, sp, #0 + mov r2, r1 + bl InitDungeonGrid + mov r5, #2 + mov r1, #1 + mov r0, #0 + mov r3, #0x36 + mov r2, #0x1e + strh r5, [sp] + strh r3, [sp, #4] + strh r5, [sp, #2] + strh r2, [sp, #6] + strb r1, [sp, #0xa] + strb r1, [sp, #0xb] + strb r0, [sp, #8] + mov r6, r0 + b _0233C818 +_0233C7C8: + ldrsh r4, [sp, #2] + b _0233C808 +_0233C7D0: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + strb r6, [r0, #7] + add r4, r4, #1 +_0233C808: + ldrsh r0, [sp, #6] + cmp r4, r0 + blt _0233C7D0 + add r5, r5, #1 +_0233C818: + ldrsh r0, [sp, #4] + cmp r5, r0 + blt _0233C7C8 + mov r1, #1 + add r0, sp, #0 + mov r2, r1 + rsb r3, r1, #0x3e8 + bl GenerateMonsterHouse + add sp, sp, #0xa60 + add sp, sp, #0x1000 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end GenerateOneRoomMonsterHouseFloor + + arm_func_start GenerateTwoRoomsWithMonsterHouseFloor +GenerateTwoRoomsWithMonsterHouseFloor: ; 0x0233C844 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2e4 + sub sp, sp, #0x1800 + mov r1, #2 + mov r5, #0x1c + mov r4, #0x36 + mov r3, #0x1e + str r5, [sp, #0x4c] + add r0, sp, #0x84 + mov r2, #1 + str r1, [sp, #0x48] + str r4, [sp, #0x50] + str r1, [sp, #0xc] + str r3, [sp, #0x10] + mov r5, #0 + bl InitDungeonGrid + mov r6, r5 +_0233C888: + add r1, sp, #0x48 + add r0, r1, r6, lsl #2 + ldr sb, [r1, r6, lsl #2] + ldr r1, [r0, #4] + ldr sl, [sp, #0xc] + ldr r0, [sp, #0x10] + sub r1, r1, sb + sub r7, r1, #3 + sub r0, r0, sl + sub r8, r0, #3 + mov r1, r7 + mov r0, #0xa + bl DungeonRandRange + mov r4, r0 + mov r1, r8 + mov r0, #0x10 + bl DungeonRandRange + mov fp, r0 + sub r0, r7, r4 + bl DungeonRandInt + add r1, sb, #1 + add r7, r1, r0 + sub r0, r8, fp + bl DungeonRandInt + ldr r1, _0233C9E4 ; =0x000001C2 + add r2, sl, #1 + add r8, r2, r0 + mul r1, r6, r1 + add r0, sp, #0x84 + add r2, r0, r1 + mov r0, #1 + strb r0, [r2, #0xa] + add r0, sp, #0x84 + strh r7, [r0, r1] + add r0, r7, r4 + strh r0, [r2, #4] + strh r8, [r2, #2] + add sb, r8, fp + str r0, [sp, #8] + strh sb, [r2, #6] + and r4, r5, #0xff + b _0233C97C +_0233C930: + mov sl, r8 + b _0233C970 +_0233C938: + mov r0, r7 + mov r1, sl + bl GetTileSafe + ldrh r2, [r0] + mov r1, sl + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r7 + bl GetTileSafe + strb r4, [r0, #7] + add sl, sl, #1 +_0233C970: + cmp sl, sb + blt _0233C938 + add r7, r7, #1 +_0233C97C: + ldr r0, [sp, #8] + cmp r7, r0 + blt _0233C930 + add r6, r6, #1 + cmp r6, #2 + add r5, r5, #1 + blt _0233C888 + mov r2, #1 + add r1, sp, #0xc + strb r2, [sp, #0x9a] + strb r2, [sp, #0x25b] + str r1, [sp] + mov r4, #0 + add r0, sp, #0x84 + add r3, sp, #0x48 + mov r1, #2 + str r4, [sp, #4] + bl CreateGridCellConnections + mov r2, #1 + add r0, sp, #0x84 + rsb r3, r2, #0x3e8 + mov r1, #2 + bl GenerateMonsterHouse + add sp, sp, #0x2e4 + add sp, sp, #0x1800 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233C9E4: .word 0x000001C2 + arm_func_end GenerateTwoRoomsWithMonsterHouseFloor + + arm_func_start GenerateExtraHallways +GenerateExtraHallways: ; 0x0233C9E8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + movs sl, r3 + str r0, [sp] + str r1, [sp, #4] + str r2, [sp, #8] + beq _0233CF70 + mov r5, #0 + b _0233CF68 +_0233CA0C: + ldr r0, [sp, #4] + bl DungeonRandInt + mov r4, r0 + ldr r0, [sp, #8] + bl DungeonRandInt + mov sb, r0 + ldr r1, _0233CF78 ; =0x000001C2 + ldr r0, [sp] + mla r1, r4, r1, r0 + mov r0, #0x1e + mla r6, sb, r0, r1 + ldrb r0, [r6, #0xa] + cmp r0, #0 + ldrneb r0, [r6, #0xb] + cmpne r0, #0 + beq _0233CF64 + ldrb r0, [r6, #8] + cmp r0, #0 + ldreqb r0, [r6, #0x10] + cmpeq r0, #0 + bne _0233CF64 + ldrsh r0, [r6] + ldrsh r1, [r6, #4] + bl DungeonRandRange + mov r8, r0 + ldrsh r0, [r6, #2] + ldrsh r1, [r6, #6] + bl DungeonRandRange + mov r7, r0 + mov r0, #4 + bl DungeonRandInt + mov r6, r0, lsl #1 + ldr r0, [sp, #8] + mov ip, #0 + sub fp, r0, #1 + ldr r0, [sp, #4] + mov r3, #2 + sub r2, r0, #1 + mov r1, #4 + mov r0, #6 + mov lr, ip +_0233CAB0: + cmp r6, #0 + bne _0233CAC0 + cmp sb, fp + movge r6, r3 +_0233CAC0: + cmp r6, #2 + bne _0233CAD0 + cmp r4, r2 + movge r6, r1 +_0233CAD0: + cmp r6, #4 + bne _0233CAE0 + cmp sb, #0 + movle r6, r0 +_0233CAE0: + cmp r6, #6 + bne _0233CAF0 + cmp r4, #0 + movle r6, lr +_0233CAF0: + add ip, ip, #1 + cmp ip, #3 + blt _0233CAB0 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrb sb, [r0, #7] + ldr r0, _0233CF7C ; =DIRECTIONS_XY + mov r4, r6, lsl #2 + add fp, r0, r6, lsl #2 +_0233CB18: + mov r0, r8 + mov r1, r7 + bl GetTile + ldrb r0, [r0, #7] + cmp sb, r0 + ldreq r0, _0233CF7C ; =DIRECTIONS_XY + ldreqsh r1, [r0, r4] + ldreqsh r0, [fp, #2] + addeq r8, r8, r1 + addeq r7, r7, r0 + beq _0233CB18 + ldr fp, _0233CF7C ; =DIRECTIONS_XY + mov sb, r6, lsl #2 + add r4, fp, r6, lsl #2 +_0233CB50: + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + ldreqsh r1, [fp, sb] + ldreqsh r0, [r4, #2] + addeq r8, r8, r1 + addeq r7, r7, r0 + beq _0233CB50 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #2 + beq _0233CF64 + sub sb, r8, #2 + mov r4, #0 + add r1, r7, #2 + sub r3, r7, #2 + add r0, r8, #2 + mov r2, #1 + b _0233CBFC +_0233CBB4: + mov fp, r3 + b _0233CBE8 +_0233CBBC: + cmp sb, #0 + blt _0233CBDC + cmp sb, #0x38 + bge _0233CBDC + cmp fp, #0 + blt _0233CBDC + cmp fp, #0x20 + blt _0233CBE4 +_0233CBDC: + mov r4, r2 + b _0233CBF0 +_0233CBE4: + add fp, fp, #1 +_0233CBE8: + cmp fp, r1 + ble _0233CBBC +_0233CBF0: + cmp r4, #0 + bne _0233CC04 + add sb, sb, #1 +_0233CBFC: + cmp sb, r0 + ble _0233CBB4 +_0233CC04: + cmp r4, #0 + bne _0233CF64 + add r0, r6, #2 + and r0, r0, #6 + ldr r1, _0233CF7C ; =DIRECTIONS_XY + mov r2, r0, lsl #2 + add r0, r1, r0, lsl #2 + ldrsh r2, [r1, r2] + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + sub r0, r6, #2 + and r0, r0, #6 + ldr r1, _0233CF7C ; =DIRECTIONS_XY + mov r2, r0, lsl #2 + add r0, r1, r0, lsl #2 + ldrsh r2, [r1, r2] + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + mov r0, #3 + bl DungeonRandInt + ldr r4, _0233CF7C ; =DIRECTIONS_XY + add sb, r0, #3 +_0233CC8C: + cmp r8, #1 + cmpgt r7, #1 + ble _0233CF64 + cmp r8, #0x37 + cmplt r7, #0x1f + bge _0233CF64 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + tst r0, #0x10 + bne _0233CF64 + mov r0, #1 + str r0, [sp, #0xc] + add r0, r8, #1 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CD38 + add r0, r8, #1 + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CD38 + mov r0, r8 + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #0 + streq r0, [sp, #0xc] +_0233CD38: + add r0, r8, #1 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CD94 + sub fp, r7, #1 + add r0, r8, #1 + mov r1, fp + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CD94 + mov r1, fp + mov r0, r8 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #0 + streq r0, [sp, #0xc] +_0233CD94: + sub fp, r8, #1 + mov r0, fp + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CDF0 + mov r0, fp + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CDF0 + mov r0, r8 + add r1, r7, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #0 + streq r0, [sp, #0xc] +_0233CDF0: + mov r0, fp + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CE4C + mov r0, fp + sub fp, r7, #1 + mov r1, fp + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233CE4C + mov r1, fp + mov r0, r8 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #0 + streq r0, [sp, #0xc] +_0233CE4C: + ldr r0, [sp, #0xc] + cmp r0, #0 + beq _0233CE7C + mov r0, r8 + mov r1, r7 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233CE7C: + add r0, r6, #2 + and r1, r0, #6 + mov r0, r1, lsl #2 + ldrsh r2, [r4, r0] + add r0, r4, r1, lsl #2 + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + sub r0, r6, #2 + and r1, r0, #6 + mov r0, r1, lsl #2 + ldrsh r2, [r4, r0] + add r0, r4, r1, lsl #2 + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233CF64 + subs sb, sb, #1 + bne _0233CF48 + mov r0, #3 + bl DungeonRandInt + add sb, r0, #3 + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x32 + addlt r6, r6, #2 + subge r6, r6, #2 + cmp r8, #0x20 + and r6, r6, #6 + blt _0233CF2C + ldr r0, _0233CF80 ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #6] + cmp r0, #1 + cmpeq r6, #2 + beq _0233CF64 +_0233CF2C: + cmp r8, #0x30 + blt _0233CF48 + ldr r0, _0233CF80 ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #6] + cmp r0, #2 + cmpeq r6, #2 + beq _0233CF64 +_0233CF48: + mov r0, r6, lsl #2 + ldrsh r1, [r4, r0] + add r0, r4, r6, lsl #2 + ldrsh r0, [r0, #2] + add r8, r8, r1 + add r7, r7, r0 + b _0233CC8C +_0233CF64: + add r5, r5, #1 +_0233CF68: + cmp r5, sl + blt _0233CA0C +_0233CF70: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233CF78: .word 0x000001C2 +_0233CF7C: .word DIRECTIONS_XY +_0233CF80: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateExtraHallways + + arm_func_start GetGridPositions +GetGridPositions: ; 0x0233CF84 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r4, #0 + mov sl, r0 + mov sb, r1 + mov r8, r2 + mov r7, r3 + mov r6, r4 + mov r5, #0x38 + b _0233CFC0 +_0233CFA8: + mov r0, r5 + mov r1, r8 + str r4, [sl, r6, lsl #2] + bl _s32_div_f + add r4, r4, r0 + add r6, r6, #1 +_0233CFC0: + cmp r6, r8 + blt _0233CFA8 + mov r6, #0 + str r4, [sl, r8, lsl #2] + mov r5, r6 + mov r4, #0x20 + b _0233CFF4 +_0233CFDC: + mov r0, r4 + mov r1, r7 + str r6, [sb, r5, lsl #2] + bl _s32_div_f + add r6, r6, r0 + add r5, r5, #1 +_0233CFF4: + cmp r5, r7 + blt _0233CFDC + str r6, [sb, r7, lsl #2] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end GetGridPositions + + arm_func_start InitDungeonGrid +InitDungeonGrid: ; 0x0233D004 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + add r5, r1, r1, lsl #1 + mov r4, r5, asr #1 + add r3, r1, r1, lsr #31 + add ip, r5, r4, lsr #30 + mov r7, #0 + b _0233D0F0 +_0233D020: + ldr r4, _0233D0FC ; =0x000001C2 + mov r8, #0 + mla sb, r7, r4, r0 + mov r5, #1 + mov r4, r8 + mov r6, r5 + mov lr, r8 + b _0233D0E4 +_0233D040: + ldr sl, _0233D100 ; =FLOOR_GENERATION_STATUS + ldrb sl, [sl, #6] + cmp sl, #1 + bne _0233D064 + cmp r7, r3, asr #1 + movge sl, #0x1e + mlage sl, r8, sl, sb + strgeb r6, [sl, #8] + bge _0233D08C +_0233D064: + cmp sl, #2 + bne _0233D080 + cmp r7, ip, asr #2 + movge sl, #0x1e + mlage sl, r8, sl, sb + strgeb r5, [sl, #8] + bge _0233D08C +_0233D080: + mov sl, #0x1e + mla sl, r8, sl, sb + strb r4, [sl, #8] +_0233D08C: + mov fp, #1 + strb fp, [sl, #0xa] + strb lr, [sl, #0xb] + strb lr, [sl, #0xf] + and fp, lr, #0xff + strb fp, [sl, #0xe] + strb fp, [sl, #0xc] + strb lr, [sl, #0x16] + strb fp, [sl, #0x15] + strb fp, [sl, #0x14] + strb fp, [sl, #0x13] + strb lr, [sl, #0x1a] + strb fp, [sl, #0x19] + strb fp, [sl, #0x18] + strb fp, [sl, #0x17] + strb lr, [sl, #9] + strb lr, [sl, #0x11] + strb lr, [sl, #0x10] + strb lr, [sl, #0x12] + strb lr, [sl, #0x1c] + strb lr, [sl, #0x1d] + add r8, r8, #1 +_0233D0E4: + cmp r8, r2 + blt _0233D040 + add r7, r7, #1 +_0233D0F0: + cmp r7, r1 + blt _0233D020 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233D0FC: .word 0x000001C2 +_0233D100: .word FLOOR_GENERATION_STATUS + arm_func_end InitDungeonGrid + + arm_func_start AssignRooms +AssignRooms: ; 0x0233D104 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x104 + mov sl, r0 + mov r4, r3 + mov r0, #3 + mov sb, r1 + mov r8, r2 + bl DungeonRandInt + cmp r4, #0 + rsblt r4, r4, #0 + addge r4, r4, r0 + mov r2, #0 + mov r1, #1 + add r0, sp, #4 + b _0233D148 +_0233D140: + strb r1, [r0, r2] + add r2, r2, #1 +_0233D148: + cmp r2, r4 + blt _0233D140 + mov r1, #0 + add r0, sp, #4 + b _0233D164 +_0233D15C: + strb r1, [r0, r2] + add r2, r2, #1 +_0233D164: + cmp r2, #0x100 + blt _0233D15C + mul r7, sb, r8 + mov r6, #0 + add r4, sp, #4 +_0233D178: + mov r0, r7 + bl DungeonRandInt + mov r5, r0 + mov r0, r7 + bl DungeonRandInt + add r6, r6, #1 + ldrb r2, [r4, r5] + ldrb r1, [r4, r0] + cmp r6, #0x40 + strb r1, [r4, r5] + strb r2, [r4, r0] + blt _0233D178 + ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS + mov fp, #0 + sub r1, sb, #1 + str fp, [r0, #0x14] + mov r3, fp + and r5, sb, #1 + add r0, r1, r1, lsr #31 + mov r2, fp + add lr, sp, #4 + b _0233D25C +_0233D1D0: + ldr r1, _0233D314 ; =0x000001C2 + mov r4, #0 + mla r6, r3, r1, sl + ldr r1, _0233D310 ; =FLOOR_GENERATION_STATUS + b _0233D250 +_0233D1E4: + mov r7, #0x1e + mla r7, r4, r7, r6 + ldrb ip, [r7, #8] + cmp ip, #0 + bne _0233D24C + ldr ip, [r1, #0x14] + cmp ip, #0x20 + strgeb r2, [r7, #0xa] + ldrb ip, [lr, fp] + cmp ip, #0 + beq _0233D240 + mov ip, #1 + strb ip, [r7, #0xa] + ldr ip, [r1, #0x14] + cmp r5, #0 + add ip, ip, #1 + str ip, [r1, #0x14] + beq _0233D248 + cmp r3, r0, asr #1 + cmpeq r4, #1 + moveq ip, #0 + streqb ip, [r7, #0xa] + b _0233D248 +_0233D240: + mov ip, #0 + strb ip, [r7, #0xa] +_0233D248: + add fp, fp, #1 +_0233D24C: + add r4, r4, #1 +_0233D250: + cmp r4, r8 + blt _0233D1E4 + add r3, r3, #1 +_0233D25C: + cmp r3, sb + blt _0233D1D0 + ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x14] + cmp r0, #2 + bge _0233D308 + mov r4, #0 + b _0233D2F4 +_0233D27C: + mov r0, #0 + str r0, [sp] + mov r6, r0 + b _0233D2DC +_0233D28C: + ldr r0, _0233D314 ; =0x000001C2 + mov r7, #0 + mla fp, r6, r0, sl + b _0233D2D0 +_0233D29C: + mov r0, #0x1e + mla r5, r7, r0, fp + ldrb r0, [r5, #8] + cmp r0, #0 + bne _0233D2CC + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x3c + movlt r0, #1 + strlt r0, [sp] + strltb r0, [r5, #0xa] + blt _0233D2E4 +_0233D2CC: + add r7, r7, #1 +_0233D2D0: + cmp r7, r8 + blt _0233D29C + add r6, r6, #1 +_0233D2DC: + cmp r6, sb + blt _0233D28C +_0233D2E4: + ldr r0, [sp] + cmp r0, #0 + bne _0233D2FC + add r4, r4, #1 +_0233D2F4: + cmp r4, #0xc8 + blt _0233D27C +_0233D2FC: + ldr r0, _0233D310 ; =FLOOR_GENERATION_STATUS + mov r1, #0 + strb r1, [r0] +_0233D308: + add sp, sp, #0x104 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233D310: .word FLOOR_GENERATION_STATUS +_0233D314: .word 0x000001C2 + arm_func_end AssignRooms + + arm_func_start CreateRoomsAndAnchors +CreateRoomsAndAnchors: ; 0x0233D318 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x30 + ldr r5, [sp, #0x5c] + str r0, [sp] + and r0, r5, #4 + str r0, [sp, #0x14] + ldr r0, [sp, #0x58] + mov r4, #0 + str r4, [sp, #0x1c] + str r1, [sp, #4] + str r2, [sp, #8] + str r3, [sp, #0xc] + str r0, [sp, #0x58] + b _0233D658 +_0233D350: + ldr r0, [sp] + mov r1, #0x1e + mla sb, r4, r1, r0 + ldr r0, [sp, #4] + mov sl, #0 + sub r0, r0, #1 + str r0, [sp, #0x28] + ldr r0, [sp, #8] + sub r0, r0, #1 + str r0, [sp, #0x2c] + ldr r0, [sp, #0x58] + add r0, r0, r4, lsl #2 + str r0, [sp, #0x20] + b _0233D648 +_0233D388: + ldr r0, [sp, #0xc] + ldr r3, [r0, sl, lsl #2] + ldr r0, [sp, #0x58] + add fp, r3, #2 + ldr r2, [r0, r4, lsl #2] + add r0, r2, #2 + str r0, [sp, #0x18] + ldr r0, [sp, #0xc] + add r0, r0, sl, lsl #2 + ldr r1, [r0, #4] + ldr r0, [sp, #0x20] + sub r1, r1, r3 + ldr r0, [r0, #4] + sub r5, r1, #4 + sub r0, r0, r2 + sub r6, r0, #3 + ldr r0, _0233D66C ; =0x000001C2 + mla r0, sl, r0, sb + str r0, [sp, #0x10] + ldrb r0, [r0, #8] + cmp r0, #0 + bne _0233D644 + ldr r0, [sp, #0x10] + ldrb r0, [r0, #0xa] + cmp r0, #0 + beq _0233D580 + mov r0, #5 + mov r1, r5 + bl DungeonRandRange + mov r7, r0 + mov r0, #4 + mov r1, r6 + bl DungeonRandRange + mov r8, r0 + orr r0, r7, #1 + cmp r0, r5 + movlt r7, r0 + orr r0, r8, #1 + cmp r0, r6 + movlt r8, r0 + add r0, r8, r8, lsl #1 + add r0, r0, r0, lsr #31 + cmp r7, r0, asr #1 + mov r0, r0, asr #1 + movgt r7, r0 + add r0, r7, r7, lsl #1 + add r0, r0, r0, lsr #31 + cmp r8, r0, asr #1 + mov r0, r0, asr #1 + movgt r8, r0 + sub r0, r5, r7 + bl DungeonRandInt + add r5, fp, r0 + sub r0, r6, r8 + bl DungeonRandInt + ldr r1, [sp, #0x18] + add fp, r5, r7 + add r6, r1, r0 + ldr r0, _0233D66C ; =0x000001C2 + add r7, r6, r8 + mul r0, sl, r0 + strh r5, [sb, r0] + add r0, sb, r0 + strh fp, [r0, #4] + strh r6, [r0, #2] + strh r7, [r0, #6] + ldr r0, [sp, #0x1c] + and r0, r0, #0xff + str r0, [sp, #0x24] + b _0233D4F0 +_0233D4A0: + mov r8, r6 + b _0233D4E4 +_0233D4A8: + mov r0, r5 + mov r1, r8 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r8 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + ldr r1, [sp, #0x24] + add r8, r8, #1 + strb r1, [r0, #7] +_0233D4E4: + cmp r8, r7 + blt _0233D4A8 + add r5, r5, #1 +_0233D4F0: + cmp r5, fp + blt _0233D4A0 + mov r5, #1 + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x50 + movlt r0, r5 + movge r0, #0 + and r6, r0, #0xff + ldr r0, _0233D670 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x18] + cmp r0, #0 + ldr r0, [sp, #0x14] + moveq r6, #0 + cmp r0, #0 + moveq r5, #0 + cmp r5, #0 + cmpne r6, #0 + beq _0233D550 + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x32 + movlt r5, #0 + movge r6, #0 +_0233D550: + cmp r5, #0 + ldrne r0, [sp, #0x10] + movne r1, #1 + strneb r1, [r0, #0x1c] + cmp r6, #0 + ldrne r0, [sp, #0x10] + movne r1, #1 + strneb r1, [r0, #0x1d] + ldr r0, [sp, #0x1c] + add r0, r0, #1 + str r0, [sp, #0x1c] + b _0233D644 +_0233D580: + mov r2, #2 + ldr r0, [sp, #0x28] + mov r8, r2 + cmp sl, #0 + moveq r2, #1 + cmp r4, #0 + moveq r8, #1 + cmp sl, r0 + mov r1, #4 + mov r7, r1 + ldr r0, [sp, #0x2c] + moveq r1, #2 + cmp r4, r0 + add r0, fp, r2 + add r2, fp, r5 + sub r1, r2, r1 + moveq r7, #2 + bl DungeonRandRange + ldr r1, [sp, #0x18] + add r1, r1, r6 + mov r6, r0 + ldr r0, [sp, #0x18] + sub r1, r1, r7 + add r0, r0, r8 + bl DungeonRandRange + mov r5, r0 + ldr r0, _0233D66C ; =0x000001C2 + mul r0, sl, r0 + strh r6, [sb, r0] + add r1, sb, r0 + add r0, r6, #1 + strh r0, [r1, #4] + strh r5, [r1, #2] + add r0, r5, #1 + strh r0, [r1, #6] + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r5 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #1 + strh r2, [r0] + mov r0, r6 + bl GetTileSafe + mov r1, #0xfe + strb r1, [r0, #7] +_0233D644: + add sl, sl, #1 +_0233D648: + ldr r0, [sp, #4] + cmp sl, r0 + blt _0233D388 + add r4, r4, #1 +_0233D658: + ldr r0, [sp, #8] + cmp r4, r0 + blt _0233D350 + add sp, sp, #0x30 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233D66C: .word 0x000001C2 +_0233D670: .word FLOOR_GENERATION_STATUS + arm_func_end CreateRoomsAndAnchors + + arm_func_start GenerateSecondaryStructures +GenerateSecondaryStructures: ; 0x0233D674 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2c + mov sl, r0 + mov r0, #0 + str r1, [sp] + str r2, [sp, #4] + str r0, [sp, #0x20] + b _0233E03C +_0233D694: + ldr r0, [sp, #0x20] + mov r1, #0x1e + mul r7, r0, r1 + mov r0, #0 + add r6, sl, r7 + str r0, [sp, #0x24] + b _0233E020 +_0233D6B0: + ldr r1, [sp, #0x24] + ldr r0, _0233E054 ; =0x000001C2 + mul sb, r1, r0 + add r8, r6, sb + ldrb r0, [r8, #8] + cmp r0, #0 + ldreqb r0, [r8, #0xe] + cmpeq r0, #0 + ldreqb r0, [r8, #0x12] + cmpeq r0, #0 + bne _0233E014 + ldrb r0, [r8, #0xa] + cmp r0, #0 + beq _0233E014 + ldrb r0, [r8, #0x1c] + cmp r0, #0 + bne _0233E014 + ldrb r0, [r8, #0x1d] + cmp r0, #0 + beq _0233E014 + mov r0, #6 + bl DungeonRandInt + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0233E014 +_0233D714: ; jump table + b _0233E014 ; case 0 + b _0233DE94 ; case 1 + b _0233DDC8 ; case 2 + b _0233DC9C ; case 3 + b _0233D938 ; case 4 + b _0233D72C ; case 5 +_0233D72C: + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x18] + cmp r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + add r0, sl, sb + add r0, r0, r7 + bl SetSpawnFlag5 + mov r0, #2 + bl DungeonRandInt + cmp r0, #0 + mov r0, #0 + beq _0233D850 + str r0, [sp, #0x10] + mov r4, r8 + ldrsh r1, [r6, sb] + ldrsh r0, [r4, #4] + ldrsh r5, [r4, #2] + add r0, r1, r0 + add r0, r0, r0, lsr #31 + mov fp, r0, asr #1 + b _0233D7AC +_0233D78C: + mov r0, fp + mov r1, r5 + bl IsNextToHallway + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x10] + bne _0233D7B8 + add r5, r5, #1 +_0233D7AC: + ldrsh r0, [r4, #6] + cmp r5, r0 + blt _0233D78C +_0233D7B8: + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _0233E014 + ldrsh r5, [r4, #2] + b _0233D7F4 +_0233D7CC: + mov r0, fp + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] +_0233D7F4: + ldrsh r0, [r4, #6] + cmp r5, r0 + blt _0233D7CC + ldrsh sb, [r4] + b _0233D83C +_0233D808: + ldrsh r5, [r4, #2] + b _0233D82C +_0233D810: + mov r0, sb + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + orr r1, r1, #0x80 + strh r1, [r0] +_0233D82C: + ldrsh r0, [r4, #6] + cmp r5, r0 + blt _0233D810 + add sb, sb, #1 +_0233D83C: + cmp sb, fp + blt _0233D808 + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233D850: + str r0, [sp, #0x14] + mov r4, r8 + ldrsh r1, [r4, #2] + ldrsh r0, [r4, #6] + ldrsh r5, [r6, sb] + add r0, r1, r0 + add r0, r0, r0, lsr #31 + mov fp, r0, asr #1 + b _0233D894 +_0233D874: + mov r0, r5 + mov r1, fp + bl IsNextToHallway + cmp r0, #0 + movne r0, #1 + strne r0, [sp, #0x14] + bne _0233D8A0 + add r5, r5, #1 +_0233D894: + ldrsh r0, [r4, #4] + cmp r5, r0 + blt _0233D874 +_0233D8A0: + ldr r0, [sp, #0x14] + cmp r0, #0 + bne _0233E014 + ldrsh r5, [r4] + b _0233D8DC +_0233D8B4: + mov r0, r5 + mov r1, fp + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] +_0233D8DC: + ldrsh r0, [r4, #4] + cmp r5, r0 + blt _0233D8B4 + ldrsh sb, [r4, #2] + b _0233D924 +_0233D8F0: + ldrsh r5, [r4] + b _0233D914 +_0233D8F8: + mov r0, r5 + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + add r5, r5, #1 + orr r1, r1, #0x80 + strh r1, [r0] +_0233D914: + ldrsh r0, [r4, #4] + cmp r5, r0 + blt _0233D8F8 + add sb, sb, #1 +_0233D924: + cmp sb, fp + blt _0233D8F0 + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233D938: + mov r1, r8 + ldrsh r4, [r6, sb] + ldrsh r3, [r1, #4] + sub r0, r3, r4 + cmp r0, #6 + ldrgesh r2, [r1, #2] + ldrgesh r1, [r1, #6] + subge r0, r1, r2 + cmpge r0, #6 + blt _0233E014 + add r0, r4, r3 + add r0, r0, r0, lsr #31 + mov r5, r0, asr #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + add r1, r2, r1 + ldr r0, [r0, #0x18] + add r1, r1, r1, lsr #31 + mov r4, r1, asr #1 + cmp r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + add r0, sl, sb + add r0, r0, r7 + bl SetSpawnFlag5 + sub r0, r4, #2 + str r0, [sp, #0xc] + sub r0, r5, #2 + ldr r1, [sp, #0xc] + str r0, [sp, #8] + bl GetTileSafe + ldrh r2, [r0] + sub fp, r5, #1 + ldr r1, [sp, #0xc] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0] + ldr r1, [sp, #0xc] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0] + ldr r1, [sp, #0xc] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r1, [r0] + sub sb, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #6 + strh r1, [r0] + ldr r0, [sp, #8] + mov r1, sb + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + ldr r0, [sp, #8] + bl GetTileSafe + ldrh r2, [r0] + add r1, r4, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + ldr r0, [sp, #8] + bl GetTileSafe + ldrh r2, [r0] + add r1, r4, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + ldr r0, [sp, #8] + bl GetTileSafe + ldrh r2, [r0] + add r1, r4, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + mov r0, fp + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] + ldrh r2, [r0] + add r1, r4, #1 + orr r2, r2, #4 + strh r2, [r0] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0] + ldr r1, [sp, #0xc] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r2, [r0] + mov r1, sb + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r2, [r0] + add r1, r4, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #6 + strh r2, [r0] + add r0, r5, #1 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r2, [r0] + mov r1, sb + orr r2, r2, #6 + strh r2, [r0] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, sb + orr r2, r2, #4 + strh r2, [r0, #2] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, sb + orr r2, r2, #0x40 + strh r2, [r0, #2] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r4 + orr r2, r2, #2 + strh r2, [r0, #2] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r4 + orr r2, r2, #2 + strh r2, [r0, #2] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, sb + orr r2, r2, #2 + strh r2, [r0, #2] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, sb + orr r2, r2, #0x10 + strh r2, [r0, #2] + mov r0, r5 + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r4 + orr r2, r2, #0x10 + strh r2, [r0, #2] + mov r0, fp + bl GetTileSafe + ldrh r2, [r0, #2] + mov r1, r4 + orr r2, r2, #0x10 + strh r2, [r0, #2] + mov r0, r5 + bl GetTileSafe + ldrh r1, [r0, #2] + orr r1, r1, #0x10 + strh r1, [r0, #2] + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233DC9C: + mov r4, r8 + ldrsh r3, [r6, sb] + ldrsh r2, [r4, #4] + sub r0, r2, r3 + cmp r0, #5 + ldrgesh r1, [r4, #6] + ldrgesh r0, [r4, #2] + subge r0, r1, r0 + cmpge r0, #5 + blt _0233E014 + add r0, r3, #2 + sub r1, r2, #3 + bl DungeonRandRange + ldrsh r1, [r4, #6] + str r0, [sp, #0x28] + mov r5, r0 + ldrsh r0, [r4, #2] + sub r1, r1, #3 + add r0, r0, #2 + bl DungeonRandRange + str r0, [sp, #0x18] + ldrsh r0, [r4] + ldrsh r1, [r4, #4] + add r0, r0, #2 + sub r1, r1, #3 + bl DungeonRandRange + str r0, [sp, #0x1c] + ldrsh r0, [r4, #2] + ldrsh r1, [r4, #6] + add r0, r0, #2 + sub r1, r1, #3 + bl DungeonRandRange + mov fp, r0 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x18] + cmp r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + add r0, sl, sb + add r0, r0, r7 + bl SetSpawnFlag5 + ldr r1, [sp, #0x28] + ldr r0, [sp, #0x1c] + cmp r1, r0 + movgt r5, r0 + movgt r0, r1 + strgt r0, [sp, #0x1c] + ldr r0, [sp, #0x18] + cmp r0, fp + strgt fp, [sp, #0x18] + movgt fp, r0 + b _0233DDB0 +_0233DD74: + ldr r4, [sp, #0x18] + b _0233DDA4 +_0233DD7C: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] +_0233DDA4: + cmp r4, fp + ble _0233DD7C + add r5, r5, #1 +_0233DDB0: + ldr r0, [sp, #0x1c] + cmp r5, r0 + ble _0233DD74 + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233DDC8: + mov r2, r8 + ldrsh r1, [r2, #4] + ldrsh r0, [r6, sb] + sub r0, r1, r0 + tst r0, #1 + beq _0233E014 + ldrsh r1, [r2, #6] + ldrsh r0, [r2, #2] + sub r0, r1, r0 + tst r0, #1 + ldrne r0, _0233E058 ; =FLOOR_GENERATION_STATUS + ldrne r0, [r0, #0x18] + cmpne r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + add r0, sl, sb + add r0, r0, r7 + bl SetSpawnFlag5 + mov r5, #0 +_0233DE1C: + ldrsh r1, [r8, #4] + ldrsh r0, [r8] + sub r0, r1, r0 + bl DungeonRandInt + mov r4, r0 + ldrsh r1, [r8, #6] + ldrsh r0, [r8, #2] + sub r0, r1, r0 + bl DungeonRandInt + mov r2, r0 + add r0, r4, r2 + tst r0, #1 + beq _0233DE7C + ldrsh r0, [r8] + ldrsh r1, [r8, #2] + add r0, r0, r4 + add r1, r1, r2 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] +_0233DE7C: + add r5, r5, #1 + cmp r5, #0x40 + blt _0233DE1C + mov r0, #1 + strb r0, [r8, #9] + b _0233E014 +_0233DE94: + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x18] + cmp r0, #0 + beq _0233E014 + sub r1, r0, #1 + ldr r0, _0233E058 ; =FLOOR_GENERATION_STATUS + str r1, [r0, #0x18] + mov r0, r8 + ldrsh r2, [r0, #4] + ldrsh r1, [r6, sb] + sub r3, r2, r1 + tst r3, #1 + beq _0233DEDC + ldrsh r2, [r0, #6] + ldrsh r1, [r0, #2] + sub r1, r2, r1 + tst r1, #1 + bne _0233DFF4 +_0233DEDC: + cmp r3, #5 + ldrsh r4, [r0] + ldrsh r3, [r0, #4] + ldrsh r2, [r0, #6] + ldrsh r1, [r0, #2] + add r0, r4, r3 + add r0, r0, r0, lsr #31 + mov r4, r0, asr #1 + add r0, r1, r2 + add r0, r0, r0, lsr #31 + mov r5, r0, asr #1 + subge r0, r2, r1 + cmpge r0, #5 + blt _0233DFCC + add r0, r4, #1 + mov r1, r5 + bl GetTileSafe + ldrh r2, [r0] + add r1, r5, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #2 + strh r2, [r0] + mov r0, r4 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r5 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #2 + strh r2, [r0] + sub r0, r4, #1 + bl GetTileSafe + ldrh r2, [r0] + sub r1, r5, #1 + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #2 + strh r2, [r0] + mov r0, r4 + bl GetTileSafe + mov r1, r5 + ldrh r2, [r0] + bic r2, r2, #3 + strh r2, [r0] + ldrh r2, [r0] + orr r2, r2, #2 + strh r2, [r0] + mov r0, r4 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] + b _0233E00C +_0233DFCC: + mov r0, r4 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] + b _0233E00C +_0233DFF4: + add r4, sl, sb + add r0, r4, r7 + bl SetSpawnFlag5 + add r0, r4, r7 + mov r1, #1 + bl GenerateMaze +_0233E00C: + mov r0, #1 + strb r0, [r8, #9] +_0233E014: + ldr r0, [sp, #0x24] + add r0, r0, #1 + str r0, [sp, #0x24] +_0233E020: + ldr r1, [sp, #0x24] + ldr r0, [sp] + cmp r1, r0 + blt _0233D6B0 + ldr r0, [sp, #0x20] + add r0, r0, #1 + str r0, [sp, #0x20] +_0233E03C: + ldr r1, [sp, #0x20] + ldr r0, [sp, #4] + cmp r1, r0 + blt _0233D694 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233E054: .word 0x000001C2 +_0233E058: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateSecondaryStructures + + arm_func_start AssignGridCellConnections +AssignGridCellConnections: ; 0x0233E05C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + ldr r4, [sp, #0x3c] + mov r8, r1 + mov r1, r4 + ldrb r1, [r1, #5] + mov sb, r0 + mov r0, #4 + str r4, [sp, #0x3c] + mov fp, r2 + mov r7, r3 + ldr r5, [sp, #0x38] + str r1, [sp, #4] + bl DungeonRandInt + mov r6, r0 + mov sl, #0 + b _0233E208 +_0233E0A0: + mov r0, #8 + bl DungeonRandInt + mov r4, r0 + mov r0, #4 + bl DungeonRandInt + mov lr, #1 + cmp r4, #4 + movlt r6, r0 + sub r1, r8, #1 + sub r0, fp, #1 + mov ip, lr + mov r3, #0 +_0233E0D0: + and r2, r6, #3 + mov r4, r3 + cmp r2, #3 + addls pc, pc, r2, lsl #2 + b _0233E130 +_0233E0E4: ; jump table + b _0233E0F4 ; case 0 + b _0233E104 ; case 1 + b _0233E114 ; case 2 + b _0233E124 ; case 3 +_0233E0F4: + cmp r7, r1 + movlt r4, ip + addge r6, r6, #1 + b _0233E130 +_0233E104: + cmp r5, #0 + movgt r4, lr + addle r6, r6, #1 + b _0233E130 +_0233E114: + cmp r7, #0 + movgt r4, #1 + addle r6, r6, #1 + b _0233E130 +_0233E124: + cmp r5, r0 + movlt r4, #1 + addge r6, r6, #1 +_0233E130: + cmp r4, #0 + beq _0233E0D0 + and r0, r6, #3 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0233E204 +_0233E148: ; jump table + b _0233E158 ; case 0 + b _0233E184 ; case 1 + b _0233E1B0 ; case 2 + b _0233E1DC ; case 3 +_0233E158: + ldr r0, _0233E438 ; =0x000001C2 + mov r1, #0x1e + mla r0, r7, r0, sb + mla r1, r5, r1, r0 + ldrb r0, [r1, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r1, #0x16] + streqb r0, [r1, #0x1d7] + addeq r7, r7, #1 + b _0233E204 +_0233E184: + ldr r0, _0233E438 ; =0x000001C2 + mov r1, #0x1e + mla r0, r7, r0, sb + mla r1, r5, r1, r0 + ldrb r0, [r1, #-0x16] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r1, #0x13] + streqb r0, [r1, #-0xa] + subeq r5, r5, #1 + b _0233E204 +_0233E1B0: + ldr r0, _0233E438 ; =0x000001C2 + mov r1, #0x1e + mla r0, r7, r0, sb + mla r1, r5, r1, r0 + ldrb r0, [r1, #-0x1ba] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r1, #0x15] + streqb r0, [r1, #-0x1ac] + subeq r7, r7, #1 + b _0233E204 +_0233E1DC: + ldr r0, _0233E438 ; =0x000001C2 + mov r1, #0x1e + mla r0, r7, r0, sb + mla r1, r5, r1, r0 + ldrb r0, [r1, #0x26] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r1, #0x14] + streqb r0, [r1, #0x31] + addeq r5, r5, #1 +_0233E204: + add sl, sl, #1 +_0233E208: + ldr r0, [sp, #4] + cmp sl, r0 + blt _0233E0A0 + ldr r0, [sp, #0x3c] + ldrb r0, [r0, #0xb] + cmp r0, #0 + bne _0233E430 +_0233E224: + sub r0, r8, #1 + mov r6, #0 + str r0, [sp, #8] + sub r0, fp, #1 + str r6, [sp] + str r0, [sp, #0xc] + b _0233E41C +_0233E240: + ldr r0, _0233E438 ; =0x000001C2 + mov r7, #0 + mla sl, r6, r0, sb + b _0233E410 +_0233E250: + mov r1, #0x1e + mla r5, r7, r1, sl + ldrb r1, [r5, #8] + mov r0, #0 + cmp r1, #0 + ldreqb r1, [r5, #0xa] + cmpeq r1, #0 + bne _0233E40C + ldrb r1, [r5, #0x13] + cmp r1, #0 + ldrb r1, [r5, #0x14] + addne r0, r0, #1 + cmp r1, #0 + ldrb r1, [r5, #0x15] + addne r0, r0, #1 + cmp r1, #0 + ldrb r1, [r5, #0x16] + addne r0, r0, #1 + cmp r1, #0 + addne r0, r0, #1 + cmp r0, #1 + bne _0233E40C + mov r4, #0 + mov r0, #4 + bl DungeonRandInt + mov r1, r4 + b _0233E370 +_0233E2BC: + and r2, r0, #3 + mov r4, #0 + cmp r2, #3 + addls pc, pc, r2, lsl #2 + b _0233E364 +_0233E2D0: ; jump table + b _0233E2E0 ; case 0 + b _0233E304 ; case 1 + b _0233E324 ; case 2 + b _0233E344 ; case 3 +_0233E2E0: + ldr r2, [sp, #8] + cmp r6, r2 + bge _0233E2FC + ldrb r2, [r5, #0x16] + cmp r2, #0 + moveq r4, #1 + beq _0233E364 +_0233E2FC: + add r0, r0, #1 + b _0233E364 +_0233E304: + cmp r7, #0 + ble _0233E31C + ldrb r2, [r5, #0x13] + cmp r2, #0 + moveq r4, #1 + beq _0233E364 +_0233E31C: + add r0, r0, #1 + b _0233E364 +_0233E324: + cmp r6, #0 + ble _0233E33C + ldrb r2, [r5, #0x15] + cmp r2, #0 + moveq r4, #1 + beq _0233E364 +_0233E33C: + add r0, r0, #1 + b _0233E364 +_0233E344: + ldr r2, [sp, #0xc] + cmp r7, r2 + bge _0233E360 + ldrb r2, [r5, #0x14] + cmp r2, #0 + moveq r4, #1 + beq _0233E364 +_0233E360: + add r0, r0, #1 +_0233E364: + cmp r4, #0 + bne _0233E378 + add r1, r1, #1 +_0233E370: + cmp r1, #8 + blt _0233E2BC +_0233E378: + cmp r4, #0 + beq _0233E40C + and r0, r0, #3 + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0233E40C +_0233E390: ; jump table + b _0233E3A0 ; case 0 + b _0233E3BC ; case 1 + b _0233E3D8 ; case 2 + b _0233E3F4 ; case 3 +_0233E3A0: + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r5, #0x16] + streqb r0, [r5, #0x1d7] + streq r0, [sp] + b _0233E40C +_0233E3BC: + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r5, #0x13] + streqb r0, [r5, #-0xa] + streq r0, [sp] + b _0233E40C +_0233E3D8: + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r5, #0x15] + streqb r0, [r5, #-0x1ac] + streq r0, [sp] + b _0233E40C +_0233E3F4: + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + moveq r0, #1 + streqb r0, [r5, #0x14] + streqb r0, [r5, #0x31] + streq r0, [sp] +_0233E40C: + add r7, r7, #1 +_0233E410: + cmp r7, fp + blt _0233E250 + add r6, r6, #1 +_0233E41C: + cmp r6, r8 + blt _0233E240 + ldr r0, [sp] + cmp r0, #0 + bne _0233E224 +_0233E430: + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233E438: .word 0x000001C2 + arm_func_end AssignGridCellConnections + + arm_func_start CreateGridCellConnections +CreateGridCellConnections: ; 0x0233E43C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x48 + str r0, [sp, #0xc] + str r1, [sp, #0x10] + str r2, [sp, #0x14] + mov sb, r3 + ldr r8, [sp, #0x70] + mov r5, #0 + b _0233E510 +_0233E460: + ldr r1, _0233ED30 ; =0x000001C2 + ldr r0, [sp, #0xc] + mov r6, #0 + mla r7, r5, r1, r0 + ldr r0, [sp, #0x10] + mov r3, r6 + sub r1, r0, #1 + ldr r0, [sp, #0x14] + mov r2, r6 + sub r0, r0, #1 + mov ip, r6 + mov lr, r6 + mov r4, r6 + b _0233E500 +_0233E498: + mov sl, #0x1e + mla sl, r6, sl, r7 + ldrb fp, [sl, #8] + cmp fp, #0 + strneb r4, [sl, #0x17] + strneb r4, [sl, #0x18] + strneb r4, [sl, #0x19] + strneb r4, [sl, #0x1a] + bne _0233E4FC + cmp r5, #0 + strleb r3, [sl, #0x15] + cmp r6, #0 + strleb r2, [sl, #0x13] + cmp r5, r1 + strgeb ip, [sl, #0x16] + cmp r6, r0 + strgeb lr, [sl, #0x14] + ldrb fp, [sl, #0x13] + strb fp, [sl, #0x17] + ldrb fp, [sl, #0x14] + strb fp, [sl, #0x18] + ldrb fp, [sl, #0x15] + strb fp, [sl, #0x19] + ldrb fp, [sl, #0x16] + strb fp, [sl, #0x1a] +_0233E4FC: + add r6, r6, #1 +_0233E500: + ldr sl, [sp, #0x14] + cmp r6, sl + blt _0233E498 + add r5, r5, #1 +_0233E510: + ldr r0, [sp, #0x10] + cmp r5, r0 + blt _0233E460 + mov r6, #0 + b _0233E800 +_0233E524: + ldr r1, _0233ED30 ; =0x000001C2 + ldr r0, [sp, #0xc] + mov r7, #0 + mla r4, r6, r1, r0 + add r0, sb, r6, lsl #2 + str r0, [sp, #0x2c] + b _0233E7F0 +_0233E540: + mov r0, #0x1e + mla r5, r7, r0, r4 + ldrb r0, [r5, #8] + cmp r0, #0 + bne _0233E7EC + ldrb r0, [r5, #0xa] + cmp r0, #0 + ldreqsh fp, [r5] + ldreqsh sl, [r5, #2] + beq _0233E598 + ldrsh r0, [r5] + ldrsh r1, [r5, #4] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + mov fp, r0 + ldrsh r0, [r5, #2] + ldrsh r1, [r5, #6] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + mov sl, r0 +_0233E598: + ldrb r0, [r5, #0x17] + cmp r0, #0 + beq _0233E624 + ldrb r0, [r5, #-0x16] + cmp r0, #0 + bne _0233E60C + ldrb r0, [r5, #-0x14] + cmp r0, #0 + ldreqsh r2, [r5, #-0x1e] + beq _0233E5D8 + ldrsh r0, [r5, #-0x1e] + ldrsh r1, [r5, #-0x1a] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + mov r2, r0 +_0233E5D8: + mov r0, #1 + str r0, [sp] + mov r0, #0x1e + mla r3, r7, r0, r4 + ldr r1, [sb, r6, lsl #2] + mov r0, fp + str r1, [sp, #4] + ldr r1, [r8, r7, lsl #2] + str r1, [sp, #8] + ldrsh r1, [r3, #2] + ldrsh r3, [r3, #-0x18] + sub r3, r3, #1 + bl CreateHallway +_0233E60C: + mov r0, #0 + strb r0, [r5, #0x17] + strb r0, [r5, #-6] + mov r0, #1 + strb r0, [r5, #0xb] + strb r0, [r5, #-0x13] +_0233E624: + ldrb r0, [r5, #0x18] + cmp r0, #0 + beq _0233E6B8 + ldrb r0, [r5, #0x26] + cmp r0, #0 + bne _0233E6A0 + ldrb r0, [r5, #0x28] + cmp r0, #0 + ldreqsh r2, [r5, #0x1e] + beq _0233E664 + ldrsh r0, [r5, #0x1e] + ldrsh r1, [r5, #0x22] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + mov r2, r0 +_0233E664: + mov r1, #1 + str r1, [sp] + mov r0, fp + mov r1, #0x1e + ldr fp, [sb, r6, lsl #2] + mla r1, r7, r1, r4 + add r3, r8, r7, lsl #2 + str fp, [sp, #4] + ldr r3, [r3, #4] + sub r3, r3, #1 + str r3, [sp, #8] + ldrsh fp, [r1, #6] + ldrsh r3, [r1, #0x20] + sub r1, fp, #1 + bl CreateHallway +_0233E6A0: + mov r0, #0 + strb r0, [r5, #0x18] + strb r0, [r5, #0x35] + mov r0, #1 + strb r0, [r5, #0xb] + strb r0, [r5, #0x29] +_0233E6B8: + ldrb r0, [r5, #0x19] + cmp r0, #0 + beq _0233E750 + ldrb r0, [r5, #-0x1ba] + cmp r0, #0 + bne _0233E738 + ldrb r0, [r5, #-0x1b8] + cmp r0, #0 + sub r0, r5, #0x100 + ldreqsh r3, [r0, #-0xc0] + beq _0233E6FC + ldrsh r1, [r0, #-0xbc] + ldrsh r2, [r0, #-0xc0] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + mov r3, r0 +_0233E6FC: + mov r0, #0 + str r0, [sp] + mov r0, #0x1e + mul r0, r7, r0 + ldr fp, [sb, r6, lsl #2] + add r1, r4, r0 + str fp, [sp, #4] + ldr fp, [r8, r7, lsl #2] + sub r2, r1, #0x100 + str fp, [sp, #8] + ldrsh r2, [r2, #-0xc2] + ldrsh r0, [r4, r0] + mov r1, sl + sub r2, r2, #1 + bl CreateHallway +_0233E738: + mov r0, #0 + strb r0, [r5, #0x19] + strb r0, [r5, #-0x1a8] + mov r0, #1 + strb r0, [r5, #0xb] + strb r0, [r5, #-0x1b7] +_0233E750: + ldrb r0, [r5, #0x1a] + cmp r0, #0 + beq _0233E7EC + ldrb r0, [r5, #0x1ca] + cmp r0, #0 + bne _0233E7D4 + ldrb r0, [r5, #0x1cc] + cmp r0, #0 + add r0, r5, #0x100 + ldreqsh r3, [r0, #0xc4] + beq _0233E794 + ldrsh r1, [r0, #0xc8] + ldrsh r2, [r0, #0xc4] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + mov r3, r0 +_0233E794: + mov r0, #0 + str r0, [sp] + mov r0, #0x1e + ldr r2, [sp, #0x2c] + mov r1, sl + ldr sl, [r2, #4] + mla r0, r7, r0, r4 + sub sl, sl, #1 + str sl, [sp, #4] + ldr sl, [r8, r7, lsl #2] + add r2, r0, #0x100 + str sl, [sp, #8] + ldrsh r0, [r0, #4] + ldrsh r2, [r2, #0xc2] + sub r0, r0, #1 + bl CreateHallway +_0233E7D4: + mov r0, #0 + strb r0, [r5, #0x1a] + strb r0, [r5, #0x1db] + mov r0, #1 + strb r0, [r5, #0xb] + strb r0, [r5, #0x1cd] +_0233E7EC: + add r7, r7, #1 +_0233E7F0: + ldr r0, [sp, #0x14] + cmp r7, r0 + blt _0233E540 + add r6, r6, #1 +_0233E800: + ldr r0, [sp, #0x10] + cmp r6, r0 + blt _0233E524 + ldrb r0, [sp, #0x74] + cmp r0, #0 + bne _0233ED28 + mov r7, #0 + b _0233ED1C +_0233E820: + ldr r1, _0233ED30 ; =0x000001C2 + ldr r0, [sp, #0xc] + mov r8, #0 + mla r0, r7, r1, r0 + str r0, [sp, #0x20] + ldr r0, [sp, #0x14] + sub r0, r0, #2 + str r0, [sp, #0x40] + ldr r0, [sp, #0x10] + sub r0, r0, #2 + str r0, [sp, #0x38] + b _0233ED0C +_0233E850: + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #5 + bge _0233ED08 + ldr r0, [sp, #0x20] + mov r1, #0x1e + mla r6, r8, r1, r0 + ldrb r0, [r6, #8] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #0xb] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x12] + cmp r0, #0 + ldreqb r0, [r6, #9] + cmpeq r0, #0 + bne _0233ED08 + ldrb r0, [r6, #0xa] + cmp r0, #0 + beq _0233ED08 + mov r0, #4 + bl DungeonRandInt + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0233ED08 +_0233E8B8: ; jump table + b _0233E8C8 ; case 0 + b _0233E9DC ; case 1 + b _0233EAE4 ; case 2 + b _0233EBFC ; case 3 +_0233E8C8: + cmp r7, #1 + blt _0233ED08 + ldrb r0, [r6, #-0x1b7] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #-0x1ba] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #-0x1b8] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #-0x1b9] + cmp r0, #0 + ldreqb r0, [r6, #-0x1b0] + cmpeq r0, #0 + bne _0233ED08 + sub r1, r6, #0x100 + ldrsh r0, [r1, #-0xc2] + ldrsh fp, [r1, #-0xc0] + ldrsh r1, [r6, #2] + str r0, [sp, #0x28] + sub r0, r6, #0x100 + ldrsh sb, [r0, #-0xbc] + ldrsh r2, [r6, #6] + cmp fp, r1 + movge fp, r1 + cmp sb, r2 + ldrsh r0, [r6] + ldrsh sl, [r6, #4] + movle sb, r2 + bl GetTile + ldrb r0, [r0, #7] + ldr r5, [sp, #0x28] + and r0, r0, #0xff + str r0, [sp, #0x30] + b _0233E99C +_0233E958: + mov r4, fp + b _0233E990 +_0233E960: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x30] + strb r1, [r0, #7] +_0233E990: + cmp r4, sb + blt _0233E960 + add r5, r5, #1 +_0233E99C: + cmp r5, sl + blt _0233E958 + ldr r0, [sp, #0x28] + sub r1, r6, #0x100 + strh r0, [r1, #-0xc2] + strh sl, [r1, #-0xbe] + strh fp, [r1, #-0xc0] + strh sb, [r1, #-0xbc] + mov r0, #1 + strb r0, [r6, #0x12] + strb r0, [r6, #-0x1b0] + mov r0, #0 + strb r0, [r6, #0xb] + mov r0, #1 + strb r0, [r6, #0x11] + b _0233ED08 +_0233E9DC: + cmp r8, #1 + blt _0233ED08 + ldrb r0, [r6, #-0x13] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #-0x16] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #-0x14] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #-0x15] + cmp r0, #0 + ldreqb r0, [r6, #-0xc] + cmpeq r0, #0 + bne _0233ED08 + ldrsh r1, [r6, #-0x1c] + ldrsh r0, [r6] + ldrsh fp, [r6, #-0x1e] + str r1, [sp, #0x24] + ldrsh r1, [r6, #4] + ldrsh sb, [r6, #-0x1a] + cmp fp, r0 + movge fp, r0 + cmp sb, r1 + movle sb, r1 + ldrsh r1, [r6, #2] + ldrsh sl, [r6, #6] + bl GetTile + ldrb r0, [r0, #7] + mov r5, fp + and r0, r0, #0xff + str r0, [sp, #0x34] + b _0233EAA8 +_0233EA64: + ldr r4, [sp, #0x24] + b _0233EA9C +_0233EA6C: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x34] + strb r1, [r0, #7] +_0233EA9C: + cmp r4, sl + blt _0233EA6C + add r5, r5, #1 +_0233EAA8: + cmp r5, sb + blt _0233EA64 + strh fp, [r6, #-0x1e] + ldr r0, [sp, #0x24] + strh sb, [r6, #-0x1a] + strh r0, [r6, #-0x1c] + strh sl, [r6, #-0x18] + mov r0, #1 + strb r0, [r6, #0x12] + strb r0, [r6, #-0xc] + mov r0, #0 + strb r0, [r6, #0xb] + mov r0, #1 + strb r0, [r6, #0x11] + b _0233ED08 +_0233EAE4: + ldr r0, [sp, #0x38] + cmp r7, r0 + bgt _0233ED08 + ldrb r0, [r6, #0x1cd] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x1ca] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #0x1cc] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x1cb] + cmp r0, #0 + ldreqb r0, [r6, #0x1d4] + cmpeq r0, #0 + bne _0233ED08 + add r0, r6, #0x100 + ldrsh sl, [r6] + ldrsh r0, [r0, #0xc4] + str r0, [sp, #0x1c] + ldrsh r1, [r6, #2] + mov r0, r0 + cmp r1, r0 + strlt r1, [sp, #0x1c] + add r0, r6, #0x100 + ldrsh fp, [r0, #0xc6] + ldrsh r0, [r0, #0xc8] + ldrsh sb, [r6, #6] + cmp sb, r0 + movle sb, r0 + mov r0, sl + bl GetTile + ldrb r0, [r0, #7] + mov r5, sl + and r0, r0, #0xff + str r0, [sp, #0x3c] + b _0233EBC0 +_0233EB7C: + ldr r4, [sp, #0x1c] + b _0233EBB4 +_0233EB84: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x3c] + strb r1, [r0, #7] +_0233EBB4: + cmp r4, sb + blt _0233EB84 + add r5, r5, #1 +_0233EBC0: + cmp r5, fp + blt _0233EB7C + strh sl, [r6] + strh fp, [r6, #4] + ldr r0, [sp, #0x1c] + strh r0, [r6, #2] + strh sb, [r6, #6] + mov r0, #1 + strb r0, [r6, #0x1d4] + strb r0, [r6, #0x12] + mov r0, #0 + strb r0, [r6, #0x1cd] + mov r0, #1 + strb r0, [r6, #0x1d3] + b _0233ED08 +_0233EBFC: + ldr r0, [sp, #0x40] + cmp r8, r0 + bgt _0233ED08 + ldrb r0, [r6, #0x29] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x26] + cmp r0, #0 + bne _0233ED08 + ldrb r0, [r6, #0x28] + cmp r0, #0 + beq _0233ED08 + ldrb r0, [r6, #0x27] + cmp r0, #0 + ldreqb r0, [r6, #0x30] + cmpeq r0, #0 + bne _0233ED08 + ldrsh r0, [r6, #0x1e] + str r0, [sp, #0x18] + ldrsh r0, [r6] + ldr r1, [sp, #0x18] + cmp r0, r1 + strlt r0, [sp, #0x18] + ldrsh sl, [r6, #2] + ldrsh r1, [r6, #0x22] + ldrsh sb, [r6, #4] + ldrsh fp, [r6, #0x24] + cmp sb, r1 + movle sb, r1 + mov r1, sl + bl GetTile + ldrb r0, [r0, #7] + ldr r5, [sp, #0x18] + and r0, r0, #0xff + str r0, [sp, #0x44] + b _0233ECD0 +_0233EC8C: + mov r4, sl + b _0233ECC4 +_0233EC94: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + ldr r1, [sp, #0x44] + strb r1, [r0, #7] +_0233ECC4: + cmp r4, fp + blt _0233EC94 + add r5, r5, #1 +_0233ECD0: + cmp r5, sb + blt _0233EC8C + ldr r0, [sp, #0x18] + strh r0, [r6] + strh sb, [r6, #4] + strh sl, [r6, #2] + strh fp, [r6, #6] + mov r0, #1 + strb r0, [r6, #0x30] + strb r0, [r6, #0x12] + mov r0, #0 + strb r0, [r6, #0x29] + mov r0, #1 + strb r0, [r6, #0x2f] +_0233ED08: + add r8, r8, #1 +_0233ED0C: + ldr r0, [sp, #0x14] + cmp r8, r0 + blt _0233E850 + add r7, r7, #1 +_0233ED1C: + ldr r0, [sp, #0x10] + cmp r7, r0 + blt _0233E820 +_0233ED28: + add sp, sp, #0x48 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233ED30: .word 0x000001C2 + arm_func_end CreateGridCellConnections + + arm_func_start GenerateRoomImperfections +GenerateRoomImperfections: ; 0x0233ED34 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x34 + str r0, [sp] + str r1, [sp, #4] + str r2, [sp, #8] + mov fp, #0 + b _0233F100 +_0233ED50: + ldr r1, _0233F114 ; =0x000001C2 + ldr r0, [sp] + mov sl, #0 + mla r0, fp, r1, r0 + str r0, [sp, #0xc] + mvn r0, #0 + str r0, [sp, #0x30] + b _0233F0F0 +_0233ED70: + ldr r0, [sp, #0xc] + mov r1, #0x1e + mla sb, sl, r1, r0 + ldrb r0, [sb, #8] + cmp r0, #0 + ldreqb r0, [sb, #0x11] + cmpeq r0, #0 + ldreqb r0, [sb, #0x12] + cmpeq r0, #0 + bne _0233F0EC + ldrb r0, [sb, #0xb] + cmp r0, #0 + ldrneb r0, [sb, #0xa] + cmpne r0, #0 + beq _0233F0EC + ldrb r0, [sb, #9] + cmp r0, #0 + ldreqb r0, [sb, #0x10] + cmpeq r0, #0 + bne _0233F0EC + ldrb r0, [sb, #0x1c] + cmp r0, #0 + beq _0233F0EC + mov r0, #0x64 + bl DungeonRandInt + cmp r0, #0x3c + blt _0233F0EC + ldrsh r3, [sb, #4] + ldrsh r2, [sb] + ldrsh r1, [sb, #6] + ldrsh r0, [sb, #2] + sub r2, r3, r2 + sub r0, r1, r0 + add r1, r2, r0 + mov r0, r1, asr #1 + add r0, r1, r0, lsr #30 + movs r0, r0, asr #2 + str r0, [sp, #0x24] + moveq r0, #1 + streq r0, [sp, #0x24] + mov r0, #0 + str r0, [sp, #0x2c] + b _0233F0DC +_0233EE1C: + mov r4, #0 +_0233EE20: + mov r0, #4 + bl DungeonRandInt + str r0, [sp, #0x20] + cmp r0, #3 + addls pc, pc, r0, lsl #2 + b _0233EE48 +_0233EE38: ; jump table + b _0233EE48 ; case 0 + b _0233EE70 ; case 1 + b _0233EE9C ; case 2 + b _0233EECC ; case 3 +_0233EE48: + cmp r4, #0 + movne r0, #1 + strne r0, [sp, #0x28] + movne r5, #0 + moveq r0, #0 + ldrsh r8, [sb] + ldrsh r7, [sb, #2] + streq r0, [sp, #0x28] + moveq r5, #1 + b _0233EEF4 +_0233EE70: + ldrsh r0, [sb, #4] + cmp r4, #0 + movne r5, #1 + sub r8, r0, #1 + movne r0, #0 + strne r0, [sp, #0x28] + ldreq r0, [sp, #0x30] + ldrsh r7, [sb, #2] + streq r0, [sp, #0x28] + moveq r5, #0 + b _0233EEF4 +_0233EE9C: + ldrsh r0, [sb, #6] + cmp r4, #0 + ldrsh r1, [sb, #4] + sub r7, r0, #1 + ldrne r0, [sp, #0x30] + movne r5, #0 + strne r0, [sp, #0x28] + moveq r0, #0 + sub r8, r1, #1 + streq r0, [sp, #0x28] + ldreq r5, [sp, #0x30] + b _0233EEF4 +_0233EECC: + ldrsh r0, [sb, #6] + cmp r4, #0 + ldrne r5, [sp, #0x30] + sub r7, r0, #1 + movne r0, #0 + strne r0, [sp, #0x28] + moveq r0, #1 + ldrsh r8, [sb] + streq r0, [sp, #0x28] + moveq r5, #0 +_0233EEF4: + mov r6, #0 + b _0233F0BC +_0233EEFC: + ldrsh r0, [sb] + cmp r8, r0 + blt _0233F0C4 + ldrsh r0, [sb, #4] + cmp r8, r0 + bge _0233F0C4 + ldrsh r0, [sb, #2] + cmp r7, r0 + blt _0233F0C4 + ldrsh r0, [sb, #6] + cmp r7, r0 + bge _0233F0C4 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233F0AC + mov r5, #0 + b _0233F014 +_0233EF50: + ldr r0, _0233F118 ; =DIRECTIONS_XY + mov r1, r5, lsl #2 + ldrsh r2, [r0, r1] + add r0, r0, r5, lsl #2 + ldrsh r1, [r0, #2] + add r0, r8, r2 + str r0, [sp, #0x1c] + mov r0, #0 + str r0, [sp, #0x10] + add r0, r7, r1 + str r0, [sp, #0x18] + ldr r6, [sp, #0x30] + b _0233EFFC +_0233EF84: + ldr r0, [sp, #0x30] + str r0, [sp, #0x14] + b _0233EFE0 +_0233EF90: + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x14] + add r0, r1, r0 + ldr r1, [sp, #0x18] + add r1, r1, r6 + bl GetTile + ldrh r1, [r0] + and r1, r1, #3 + cmp r1, #1 + bne _0233EFD4 + ldrb r0, [r0, #7] + cmp r0, #0xff + moveq r0, #1 + streq r0, [sp, #0x10] + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _0233EFEC +_0233EFD4: + ldr r0, [sp, #0x14] + add r0, r0, #1 + str r0, [sp, #0x14] +_0233EFE0: + ldr r0, [sp, #0x14] + cmp r0, #1 + ble _0233EF90 +_0233EFEC: + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _0233F004 + add r6, r6, #1 +_0233EFFC: + cmp r6, #1 + ble _0233EF84 +_0233F004: + ldr r0, [sp, #0x10] + cmp r0, #0 + bne _0233F01C + add r5, r5, #1 +_0233F014: + cmp r5, #8 + blt _0233EF50 +_0233F01C: + cmp r5, #8 + bne _0233F0C4 + ldr r1, _0233F11C ; =CORNER_CARDINAL_NEIGHBOR_IS_OPEN + ldr r0, [sp, #0x20] + mov r5, #0 + add r6, r1, r0, lsl #3 + b _0233F080 +_0233F038: + ldr r0, _0233F118 ; =DIRECTIONS_XY + mov r1, r5, lsl #2 + ldrsh r2, [r0, r1] + add r0, r0, r5, lsl #2 + ldrsh r1, [r0, #2] + add r0, r8, r2 + add r1, r7, r1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + moveq r0, #1 + movne r0, #0 + and r1, r0, #0xff + ldrb r0, [r5, r6] + cmp r1, r0 + bne _0233F088 + add r5, r5, #2 +_0233F080: + cmp r5, #8 + blt _0233F038 +_0233F088: + cmp r5, #8 + bne _0233F0C4 + mov r0, r8 + mov r1, r7 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + b _0233F0C4 +_0233F0AC: + ldr r0, [sp, #0x28] + add r7, r7, r5 + add r8, r8, r0 + add r6, r6, #1 +_0233F0BC: + cmp r6, #0xa + blt _0233EEFC +_0233F0C4: + add r4, r4, #1 + cmp r4, #2 + blt _0233EE20 + ldr r0, [sp, #0x2c] + add r0, r0, #1 + str r0, [sp, #0x2c] +_0233F0DC: + ldr r1, [sp, #0x2c] + ldr r0, [sp, #0x24] + cmp r1, r0 + blt _0233EE1C +_0233F0EC: + add sl, sl, #1 +_0233F0F0: + ldr r0, [sp, #8] + cmp sl, r0 + blt _0233ED70 + add fp, fp, #1 +_0233F100: + ldr r0, [sp, #4] + cmp fp, r0 + blt _0233ED50 + add sp, sp, #0x34 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233F114: .word 0x000001C2 +_0233F118: .word DIRECTIONS_XY +_0233F11C: .word CORNER_CARDINAL_NEIGHBOR_IS_OPEN + arm_func_end GenerateRoomImperfections + + arm_func_start CreateHallway +CreateHallway: ; 0x0233F120 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldrb r6, [sp, #0x28] + mov sl, r0 + ldr r0, [sp, #0x30] + mov sb, r1 + cmp r6, #0 + mov r8, r2 + mov r7, r3 + mov r4, sl + mov r5, sb + ldr fp, [sp, #0x2c] + str r0, [sp, #0x30] + mov r6, #0 + beq _0233F328 + b _0233F1C4 +_0233F15C: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F1AC + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F1B4 +_0233F1AC: + cmp sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F1B4: + ldr r0, [sp, #0x30] + cmp sb, r0 + addlt sb, sb, #1 + subge sb, sb, #1 +_0233F1C4: + ldr r0, [sp, #0x30] + cmp sb, r0 + bne _0233F15C + mov r6, #0 + b _0233F240 +_0233F1D8: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F228 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F234 +_0233F228: + cmp sl, r4 + cmpeq sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F234: + cmp sl, r8 + addlt sl, sl, #1 + subge sl, sl, #1 +_0233F240: + cmp sl, r8 + bne _0233F1D8 + mov r6, #0 + b _0233F2B8 +_0233F250: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F2A0 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F2AC +_0233F2A0: + cmp sl, r4 + cmpeq sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F2AC: + cmp sb, r7 + addlt sb, sb, #1 + subge sb, sb, #1 +_0233F2B8: + cmp sb, r7 + bne _0233F250 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F2C4: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F314 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F31C +_0233F314: + cmp sl, r4 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F31C: + cmp sl, fp + addlt sl, sl, #1 + subge sl, sl, #1 +_0233F328: + cmp sl, fp + bne _0233F2C4 + mov r6, #0 + b _0233F3A0 +_0233F338: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F388 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F394 +_0233F388: + cmp sl, r4 + cmpeq sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F394: + cmp sb, r7 + addlt sb, sb, #1 + subge sb, sb, #1 +_0233F3A0: + cmp sb, r7 + bne _0233F338 + mov r6, #0 + b _0233F418 +_0233F3B0: + cmp r6, #0x38 + add r6, r6, #1 + ldmgeia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + mov r0, sl + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _0233F400 + mov r0, sl + mov r1, sb + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233F40C +_0233F400: + cmp sl, r4 + cmpeq sb, r5 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0233F40C: + cmp sl, r8 + addlt sl, sl, #1 + subge sl, sl, #1 +_0233F418: + cmp sl, r8 + bne _0233F3B0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end CreateHallway + + arm_func_start EnsureConnectedGrid +EnsureConnectedGrid: ; 0x0233F424 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2c + str r0, [sp, #0xc] + mov r7, r1 + mov fp, r2 + mov r6, r3 + ldr r5, [sp, #0x50] + mov r8, #0 + b _0233F818 +_0233F448: + ldr r1, _0233F8FC ; =0x000001C2 + ldr r0, [sp, #0xc] + mov r4, #0 + mla sb, r8, r1, r0 + sub r0, fp, #1 + str r0, [sp, #0x20] + add r0, r6, r8, lsl #2 + str r0, [sp, #0x28] + sub r0, r7, #1 + str r0, [sp, #0x24] + b _0233F80C +_0233F474: + mov r0, #0x1e + mla sl, r4, r0, sb + ldrb r0, [sl, #8] + cmp r0, #0 + ldreqb r0, [sl, #0x11] + cmpeq r0, #0 + ldreqb r0, [sl, #0xb] + cmpeq r0, #0 + bne _0233F808 + ldrb r0, [sl, #0xa] + cmp r0, #0 + beq _0233F7CC + ldrb r0, [sl, #9] + cmp r0, #0 + bne _0233F7CC + ldrsh r0, [sl] + ldrsh r1, [sl, #4] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + str r0, [sp, #0x1c] + ldrsh r0, [sl, #2] + ldrsh r1, [sl, #6] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + str r0, [sp, #0x18] + cmp r4, #0 + ble _0233F590 + ldrb r0, [sl, #-0x16] + cmp r0, #0 + ldreqb r0, [sl, #-0xc] + cmpeq r0, #0 + bne _0233F590 + ldrb r0, [sl, #-0x13] + cmp r0, #0 + beq _0233F590 + ldrb r0, [sl, #-0x14] + cmp r0, #0 + ldrsh r0, [sl, #-0x1e] + streq r0, [sp, #0x14] + beq _0233F544 + ldrsh r1, [sl, #-0x1a] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + str r0, [sp, #0x14] + ldrsh r0, [sl, #-0x1c] + ldrsh r1, [sl, #-0x18] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange +_0233F544: + mov r1, #1 + str r1, [sp] + mov r1, #0x1e + mla sl, r4, r1, sb + ldr r1, [r6, r8, lsl #2] + ldr r0, [sp, #0x1c] + str r1, [sp, #4] + ldr r1, [r5, r4, lsl #2] + ldr r2, [sp, #0x14] + str r1, [sp, #8] + ldrsh r3, [sl, #-0x18] + ldrsh r1, [sl, #2] + sub r3, r3, #1 + bl CreateHallway + mov r0, #1 + strb r0, [sl, #0xb] + strb r0, [sl, #0x13] + strb r0, [sl, #-0xa] + b _0233F808 +_0233F590: + ldr r0, [sp, #0x20] + cmp r4, r0 + bge _0233F64C + ldrb r0, [sl, #0x26] + cmp r0, #0 + ldreqb r0, [sl, #0x30] + cmpeq r0, #0 + bne _0233F64C + ldrb r0, [sl, #0x29] + cmp r0, #0 + beq _0233F64C + ldrb r0, [sl, #0x28] + cmp r0, #0 + ldrsh r0, [sl, #0x1e] + streq r0, [sp, #0x10] + beq _0233F5F8 + ldrsh r1, [sl, #0x22] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange + str r0, [sp, #0x10] + ldrsh r0, [sl, #0x20] + ldrsh r1, [sl, #0x24] + add r0, r0, #1 + sub r1, r1, #1 + bl DungeonRandRange +_0233F5F8: + mov r1, #1 + str r1, [sp] + mov r1, #0x1e + mla sl, r4, r1, sb + ldr r3, [r6, r8, lsl #2] + add r1, r5, r4, lsl #2 + str r3, [sp, #4] + ldr r1, [r1, #4] + ldr r0, [sp, #0x1c] + sub r1, r1, #1 + str r1, [sp, #8] + ldrsh r1, [sl, #6] + ldrsh r3, [sl, #0x20] + ldr r2, [sp, #0x10] + sub r1, r1, #1 + bl CreateHallway + mov r0, #1 + strb r0, [sl, #0xb] + strb r0, [sl, #0x14] + strb r0, [sl, #0x31] + b _0233F808 +_0233F64C: + cmp r8, #0 + ble _0233F708 + ldrb r0, [sl, #-0x1ba] + cmp r0, #0 + ldreqb r0, [sl, #-0x1b0] + cmpeq r0, #0 + bne _0233F708 + ldrb r0, [sl, #-0x1b7] + cmp r0, #0 + beq _0233F708 + ldrb r0, [sl, #-0x1b8] + cmp r0, #0 + sub r0, sl, #0x100 + ldreqsh r3, [r0, #-0xc0] + beq _0233F6B8 + ldrsh r1, [r0, #-0xbe] + ldrsh r2, [r0, #-0xc2] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + sub r0, sl, #0x100 + ldrsh r1, [r0, #-0xbc] + ldrsh r2, [r0, #-0xc0] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + mov r3, r0 +_0233F6B8: + mov r0, #0 + str r0, [sp] + mov r0, #0x1e + mul r0, r4, r0 + ldr ip, [r6, r8, lsl #2] + add sl, sb, r0 + str ip, [sp, #4] + ldr ip, [r5, r4, lsl #2] + sub r2, sl, #0x100 + str ip, [sp, #8] + ldrsh r2, [r2, #-0xc2] + ldrsh r0, [sb, r0] + ldr r1, [sp, #0x18] + sub r2, r2, #1 + bl CreateHallway + mov r0, #1 + strb r0, [sl, #0xb] + strb r0, [sl, #0x15] + strb r0, [sl, #-0x1ac] + b _0233F808 +_0233F708: + ldr r0, [sp, #0x24] + cmp r8, r0 + bge _0233F808 + ldrb r0, [sl, #0x1ca] + cmp r0, #0 + ldreqb r0, [sl, #0x1d4] + cmpeq r0, #0 + bne _0233F808 + ldrb r0, [sl, #0x1cd] + cmp r0, #0 + beq _0233F808 + ldrb r0, [sl, #0x1cc] + cmp r0, #0 + add r0, sl, #0x100 + ldreqsh r3, [r0, #0xc4] + beq _0233F778 + ldrsh r1, [r0, #0xc6] + ldrsh r2, [r0, #0xc2] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + add r0, sl, #0x100 + ldrsh r1, [r0, #0xc8] + ldrsh r2, [r0, #0xc4] + sub r1, r1, #1 + add r0, r2, #1 + bl DungeonRandRange + mov r3, r0 +_0233F778: + mov r0, #0 + str r0, [sp] + mov r0, #0x1e + mla sl, r4, r0, sb + ldr r0, [sp, #0x28] + ldr r1, [sp, #0x18] + ldr r2, [r0, #4] + add r0, sl, #0x100 + sub r2, r2, #1 + str r2, [sp, #4] + ldr r2, [r5, r4, lsl #2] + str r2, [sp, #8] + ldrsh r2, [r0, #0xc2] + ldrsh r0, [sl, #4] + sub r0, r0, #1 + bl CreateHallway + mov r0, #1 + strb r0, [sl, #0xb] + strb r0, [sl, #0x16] + strb r0, [sl, #0x1d7] + b _0233F808 +_0233F7CC: + ldrsh r0, [sl] + ldrsh r1, [sl, #2] + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0, #2] + bic r1, r1, #1 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #2 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #4 + strh r1, [r0, #2] +_0233F808: + add r4, r4, #1 +_0233F80C: + cmp r4, fp + blt _0233F474 + add r8, r8, #1 +_0233F818: + cmp r8, r7 + blt _0233F448 + mov r8, #0 + b _0233F8EC +_0233F828: + ldr r1, _0233F8FC ; =0x000001C2 + ldr r0, [sp, #0xc] + mov sb, #0 + mla sl, r8, r1, r0 + b _0233F8E0 +_0233F83C: + mov r0, #0x1e + mla r5, sb, r0, sl + ldrb r0, [r5, #8] + cmp r0, #0 + ldreqb r0, [r5, #0x11] + cmpeq r0, #0 + ldreqb r0, [r5, #0xb] + cmpeq r0, #0 + ldreqb r0, [r5, #0xf] + cmpeq r0, #0 + bne _0233F8DC + ldrsh r6, [r5] + b _0233F8D0 +_0233F870: + ldrsh r4, [r5, #2] + b _0233F8C0 +_0233F878: + mov r0, r6 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + add r4, r4, #1 + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0, #2] + bic r1, r1, #2 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #1 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #4 + strh r1, [r0, #2] + mov r1, #0xff + strb r1, [r0, #7] +_0233F8C0: + ldrsh r0, [r5, #6] + cmp r4, r0 + blt _0233F878 + add r6, r6, #1 +_0233F8D0: + ldrsh r0, [r5, #4] + cmp r6, r0 + blt _0233F870 +_0233F8DC: + add sb, sb, #1 +_0233F8E0: + cmp sb, fp + blt _0233F83C + add r8, r8, #1 +_0233F8EC: + cmp r8, r7 + blt _0233F828 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233F8FC: .word 0x000001C2 + arm_func_end EnsureConnectedGrid + + arm_func_start SetTerrainObstacleChecked +SetTerrainObstacleChecked: ; 0x0233F900 + ldrh r3, [r0] + cmp r1, #0 + bic r1, r3, #3 + strh r1, [r0] + bxeq lr + ldrb r1, [r0, #7] + cmp r1, r2 + bxne lr + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + strh r1, [r0] + bx lr + arm_func_end SetTerrainObstacleChecked + + arm_func_start FinalizeJunctions +FinalizeJunctions: ; 0x0233F93C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r4, #0 +_0233F944: + sub r5, r4, #1 + mov r6, #0 + mov r7, #0xff +_0233F950: + mov r0, r4 + mov r1, r6 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _0233FAFC + mov r0, r4 + mov r1, r6 + bl GetTile + ldrb r0, [r0, #7] + cmp r0, #0xff + bne _0233FAD4 + cmp r4, #0 + ble _0233F9D4 + mov r0, r5 + mov r1, r6 + bl GetTileSafe + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233F9D4 + ldrh r1, [r0] + orr r2, r1, #8 + and r1, r2, #3 + strh r2, [r0] + cmp r1, #2 + bne _0233F9D4 + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233F9D4: + cmp r6, #0 + ble _0233FA28 + mov r0, r4 + sub r1, r6, #1 + bl GetTileSafe + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233FA28 + ldrh r1, [r0] + orr r1, r1, #8 + orr r2, r1, #8 + and r1, r2, #3 + strh r2, [r0] + cmp r1, #2 + bne _0233FA28 + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233FA28: + cmp r6, #0x1f + bge _0233FA7C + mov r0, r4 + add r1, r6, #1 + bl GetTileSafe + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233FA7C + ldrh r1, [r0] + orr r1, r1, #8 + orr r2, r1, #8 + and r1, r2, #3 + strh r2, [r0] + cmp r1, #2 + bne _0233FA7C + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] +_0233FA7C: + cmp r4, #0x37 + bge _0233FAFC + mov r1, r6 + add r0, r4, #1 + bl GetTileSafe + ldrb r1, [r0, #7] + cmp r1, #0xff + beq _0233FAFC + ldrh r1, [r0] + orr r1, r1, #8 + orr r2, r1, #8 + and r1, r2, #3 + strh r2, [r0] + cmp r1, #2 + bne _0233FAFC + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #1 + strh r1, [r0] + b _0233FAFC +_0233FAD4: + mov r0, r4 + mov r1, r6 + bl GetTile + ldrb r0, [r0, #7] + cmp r0, #0xfe + bne _0233FAFC + mov r0, r4 + mov r1, r6 + bl GetTileSafe + strb r7, [r0, #7] +_0233FAFC: + add r6, r6, #1 + cmp r6, #0x20 + blt _0233F950 + add r4, r4, #1 + cmp r4, #0x38 + blt _0233F944 + bl ov29_0233FB1C + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end FinalizeJunctions + + arm_func_start ov29_0233FB1C +ov29_0233FB1C: ; 0x0233FB1C +#ifdef JAPAN +#define OV29_0233FB1C_OFFSET 0x5C +#else +#define OV29_0233FB1C_OFFSET 0 +#endif + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r0, _0233FBE4 ; =DUNGEON_PTR + mov r1, #0 + ldr r6, [r0] + mov r7, r1 +_0233FB30: + add r0, r6, r1, lsl #1 +#ifdef JAPAN + add r0, r0, #0xf100 +#else + add r0, r0, #0xf200 +#endif + add r1, r1, #1 + strh r7, [r0, #0x68 + OV29_0233FB1C_OFFSET] + cmp r1, #0x20 + blt _0233FB30 +_0233FB48: + mov r0, r7, lsl #0x10 + mov r5, #0 + mov r4, r0, asr #0x10 +_0233FB54: + mov r0, r7 + mov r1, r5 + bl GetTile + ldrh r0, [r0] + tst r0, #8 + beq _0233FBC8 + mov r0, r7 + mov r1, r5 + bl GetTile + ldrb r2, [r0, #7] + cmp r2, #0 + blt _0233FBC8 + cmp r2, #0x20 + addlt r0, r6, r2, lsl #1 +#ifdef JAPAN + addlt r1, r0, #0xf100 +#else + addlt r1, r0, #0xf200 +#endif + ldrltsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] + cmplt r0, #0x20 + bge _0233FBC8 + add r2, r6, r2, lsl #7 + add r0, r2, r0, lsl #2 + add r0, r0, #0xf200 +#ifdef JAPAN + strh r4, [r0, #4] +#else + strh r4, [r0, #0xa8] +#endif + ldrsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] + add r0, r2, r0, lsl #2 + add r0, r0, #0xf200 +#ifdef JAPAN + strh r5, [r0, #6] +#else + strh r5, [r0, #0xaa] +#endif + ldrsh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] + add r0, r0, #1 + strh r0, [r1, #0x68 + OV29_0233FB1C_OFFSET] +_0233FBC8: + add r5, r5, #1 + cmp r5, #0x20 + blt _0233FB54 + add r7, r7, #1 + cmp r7, #0x38 + blt _0233FB48 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0233FBE4: .word DUNGEON_PTR + arm_func_end ov29_0233FB1C + + arm_func_start GenerateKecleonShop +GenerateKecleonShop: ; 0x0233FBE8 +#ifdef JAPAN +#define GENERATE_KECLEON_SHOP_OFFSET -0xA4 +#else +#define GENERATE_KECLEON_SHOP_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x44 + ldr r5, _0233FF8C ; =DUNGEON_PTR + ldr r4, _0233FF90 ; =FLOOR_GENERATION_STATUS + mvn r7, #0 + ldr r6, [r5] + strh r7, [r4, #0x20] + strh r7, [r4, #0x22] + ldrb r4, [r4, #1] + mov sl, r0 + str r1, [sp] + str r2, [sp, #4] + mov r5, r3 + cmp r4, #0 + bne _0233FF84 + bl GetFloorType + cmp r0, #2 + cmpne r5, #0 + beq _0233FF84 + mov r0, #0x64 + bl DungeonRandInt + cmp r5, r0 + ble _0233FF84 + mov r4, #0 + add r2, sp, #0x26 + add r1, sp, #8 +_0233FC50: + mov r0, r4, lsl #0x10 + mov r3, r4, lsl #1 + mov r0, r0, asr #0x10 + add r4, r4, #1 + strh r0, [r2, r3] + strh r0, [r1, r3] + cmp r4, #0xf + blt _0233FC50 + mov r7, #0xf + mov r8, #0 + mov r5, r7 + add r4, sp, #0x26 +_0233FC80: + mov r0, r7 + bl DungeonRandInt + mov sb, r0 + mov r0, r5 + bl DungeonRandInt + mov r3, sb, lsl #1 + mov r1, r0, lsl #1 + add r8, r8, #1 + ldrsh r2, [r4, r3] + ldrsh r0, [r4, r1] + cmp r8, #0xc8 + strh r0, [r4, r3] + strh r2, [r4, r1] + blt _0233FC80 + mov r7, #0xf + mov r8, #0 + mov r5, r7 + add r4, sp, #8 +_0233FCC8: + mov r0, r7 + bl DungeonRandInt + mov sb, r0 + mov r0, r5 + bl DungeonRandInt + mov r3, sb, lsl #1 + mov r1, r0, lsl #1 + add r8, r8, #1 + ldrsh r2, [r4, r3] + ldrsh r0, [r4, r1] + cmp r8, #0xc8 + strh r0, [r4, r3] + strh r2, [r4, r1] + blt _0233FCC8 + mov r4, #0 + b _0233FF7C +_0233FD08: + add r0, sp, #0x26 + mov r1, r4, lsl #1 + ldrsh r1, [r0, r1] + ldr r0, [sp] + cmp r1, r0 + bge _0233FF78 + ldr r0, _0233FF94 ; =0x000001C2 + mov r5, #0 + mul fp, r1, r0 + add sb, sl, fp + b _0233FF70 +_0233FD34: + mov r1, r5, lsl #1 + add r0, sp, #8 + ldrsh r1, [r0, r1] + ldr r0, [sp, #4] + cmp r1, r0 + bge _0233FF6C + mov r0, #0x1e + mul r7, r1, r0 + add r8, sb, r7 + ldrb r0, [r8, #8] + cmp r0, #0 + ldreqb r0, [r8, #0x11] + cmpeq r0, #0 + ldreqb r0, [r8, #0x12] + cmpeq r0, #0 + bne _0233FF6C + ldrb r0, [r8, #0xb] + cmp r0, #0 + ldrneb r0, [r8, #0xa] + cmpne r0, #0 + beq _0233FF6C + ldrb r0, [r8, #9] + cmp r0, #0 + ldreqb r0, [r8, #0x10] + cmpeq r0, #0 + ldreqb r0, [r8, #0x1d] + cmpeq r0, #0 + bne _0233FF6C + ldrsh r1, [r8, #4] + ldrsh r0, [r8] + sub r0, r1, r0 + bl abs + cmp r0, #5 + blt _0233FF6C + ldrsh r1, [r8, #6] + ldrsh r0, [r8, #2] + sub r0, r1, r0 + bl abs + cmp r0, #4 + blt _0233FF6C + ldr r0, _0233FF90 ; =FLOOR_GENERATION_STATUS + add r1, sl, fp + mov r3, #1 + strb r3, [r0, #3] + add r2, r1, r7 + strb r3, [r2, #0xc] + ldrsh r1, [sb, r7] + add r1, r1, #1 + str r1, [r0, #0x30] + ldrsh r1, [r2, #4] + sub r1, r1, #1 + str r1, [r0, #0x38] + ldrsh r1, [r2, #2] + add r3, r1, #1 + str r3, [r0, #0x34] + ldrsh r1, [r2, #6] + sub r2, r1, #1 + sub r1, r2, r3 + cmp r1, #3 + str r2, [r0, #0x3c] + addlt r1, r2, #1 + strlt r1, [r0, #0x3c] + ldr r1, _0233FF98 ; =0x0000270F + add r0, r6, #0xc000 + str r1, [r0, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] + str r1, [r0, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] + rsb r2, r1, #0 + str r2, [r0, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] + ldr r1, _0233FF90 ; =FLOOR_GENERATION_STATUS + str r2, [r0, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] + ldr r4, [r1, #0x30] + b _0233FED8 +_0233FE54: + ldr sl, _0233FF90 ; =FLOOR_GENERATION_STATUS + add r8, r6, #0xc000 + ldr r5, [sl, #0x34] + b _0233FEC8 +_0233FE64: + mov r0, r4 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + orr r1, r1, #0x20 + strh r1, [r0] + ldrh r1, [r0, #2] + bic r1, r1, #8 + strh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #1 + strh r1, [r0, #2] + ldr r0, [r8, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] + cmp r0, r4 + strgt r4, [r8, #0xd14 + GENERATE_KECLEON_SHOP_OFFSET] + ldr r0, [r8, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] + cmp r0, r5 + strgt r5, [r8, #0xd18 + GENERATE_KECLEON_SHOP_OFFSET] + ldr r0, [r8, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] + cmp r0, r4 + strlt r4, [r8, #0xd1c + GENERATE_KECLEON_SHOP_OFFSET] + ldr r0, [r8, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] + cmp r0, r5 + strlt r5, [r8, #0xd20 + GENERATE_KECLEON_SHOP_OFFSET] + add r5, r5, #1 +_0233FEC8: + ldr r0, [sl, #0x3c] + cmp r5, r0 + blt _0233FE64 + add r4, r4, #1 +_0233FED8: + ldr r0, _0233FF90 ; =FLOOR_GENERATION_STATUS + ldr r0, [r0, #0x38] + cmp r4, r0 + blt _0233FE54 + add r4, sb, r7 + ldrsh r5, [sb, r7] + b _0233FF28 +_0233FEF4: + ldrsh r6, [r4, #2] + b _0233FF18 +_0233FEFC: + mov r0, r5 + mov r1, r6 + bl GetTileSafe + ldrh r1, [r0, #2] + add r6, r6, #1 + orr r1, r1, #0x10 + strh r1, [r0, #2] +_0233FF18: + ldrsh r0, [r4, #6] + cmp r6, r0 + blt _0233FEFC + add r5, r5, #1 +_0233FF28: + ldrsh r0, [r4, #4] + cmp r5, r0 + blt _0233FEF4 + ldr r1, _0233FF90 ; =FLOOR_GENERATION_STATUS + ldr r2, [r1, #0x30] + ldr r0, [r1, #0x38] + add r0, r2, r0 + add r0, r0, r0, lsr #31 + mov r0, r0, asr #1 + strh r0, [r1, #0x20] + ldr r2, [r1, #0x34] + ldr r0, [r1, #0x3c] + add r0, r2, r0 + add r0, r0, r0, lsr #31 + mov r0, r0, asr #1 + strh r0, [r1, #0x22] + b _0233FF84 +_0233FF6C: + add r5, r5, #1 +_0233FF70: + cmp r5, #0xf + blt _0233FD34 +_0233FF78: + add r4, r4, #1 +_0233FF7C: + cmp r4, #0xf + blt _0233FD08 +_0233FF84: + add sp, sp, #0x44 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0233FF8C: .word DUNGEON_PTR +_0233FF90: .word FLOOR_GENERATION_STATUS +_0233FF94: .word 0x000001C2 +_0233FF98: .word 0x0000270F + arm_func_end GenerateKecleonShop + + arm_func_start GenerateMonsterHouse +GenerateMonsterHouse: ; 0x0233FF9C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x100 + ldr r4, _02340218 ; =DUNGEON_PTR + movs r5, r3 + mov sl, r0 + mov sb, r1 + mov r8, r2 + ldr r6, [r4] + beq _02340210 + mov r0, #0x64 + bl DungeonRandInt + cmp r5, r0 + ble _02340210 + ldr r0, _0234021C ; =FLOOR_GENERATION_STATUS + ldrb r0, [r0, #3] + cmp r0, #0 + bne _02340210 + bl IsOutlawMonsterHouseFloor + cmp r0, #0 + bne _0233FFF8 + bl IsDestinationFloorWithMonster + cmp r0, #0 + bne _02340210 +_0233FFF8: + bl GetFloorType + cmp r0, #0 + bne _02340210 + mov r5, #0 + mov r2, r5 + mov r1, r5 + b _02340088 +_02340014: + ldr r0, _02340220 ; =0x000001C2 + mov r3, r1 + mla r4, r2, r0, sl + mov r7, #0x1e + b _0234007C +_02340028: + mla r0, r3, r7, r4 + ldrb fp, [r0, #8] + cmp fp, #0 + ldreqb fp, [r0, #0x11] + cmpeq fp, #0 + bne _02340078 + ldrb fp, [r0, #0xb] + cmp fp, #0 + ldrneb fp, [r0, #0xa] + cmpne fp, #0 + beq _02340078 + ldrb fp, [r0, #0xc] + cmp fp, #0 + ldreqb fp, [r0, #0xf] + cmpeq fp, #0 + ldreqb fp, [r0, #0x10] + cmpeq fp, #0 + ldreqb r0, [r0, #9] + cmpeq r0, #0 + addeq r5, r5, #1 +_02340078: + add r3, r3, #1 +_0234007C: + cmp r3, r8 + blt _02340028 + add r2, r2, #1 +_02340088: + cmp r2, sb + blt _02340014 + cmp r5, #0 + beq _02340210 + mov r1, #0 + mov r7, r1 + add r0, sp, #0 +_023400A4: + strb r7, [r0, r1] + add r1, r1, #1 + cmp r1, #0x100 + blt _023400A4 + mov r0, #1 + strb r0, [sp] + add fp, sp, #0 +_023400C0: + mov r0, r5 + bl DungeonRandInt + mov r4, r0 + mov r0, r5 + bl DungeonRandInt + add r7, r7, #1 + ldrb r2, [fp, r4] + ldrb r1, [fp, r0] + cmp r7, #0x40 + strb r1, [fp, r4] + strb r2, [fp, r0] + blt _023400C0 + mov r7, #0 + mov r4, r7 + add fp, sp, #0 + b _02340208 +_02340100: + ldr r0, _02340220 ; =0x000001C2 + mov r5, #0 + mul r3, r4, r0 + add r2, sl, r3 + mov lr, #0x1e + b _023401FC +_02340118: + mul r1, r5, lr + add r0, r2, r1 + ldrb ip, [r0, #8] + cmp ip, #0 + ldreqb ip, [r0, #0x11] + cmpeq ip, #0 + bne _023401F8 + ldrb ip, [r0, #0xb] + cmp ip, #0 + ldrneb ip, [r0, #0xa] + cmpne ip, #0 + beq _023401F8 + ldrb ip, [r0, #0xc] + cmp ip, #0 + ldreqb ip, [r0, #0xf] + cmpeq ip, #0 + ldreqb ip, [r0, #0x10] + cmpeq ip, #0 + ldreqb r0, [r0, #9] + cmpeq r0, #0 + bne _023401F8 + ldrb r0, [fp, r7] + cmp r0, #0 + beq _023401F4 + ldr r0, _0234021C ; =FLOOR_GENERATION_STATUS + add r2, sl, r3 + mov r3, #1 + strb r3, [r0, #1] + add r7, r2, r1 + strb r3, [r7, #0xe] + ldrsh r5, [r2, r1] + add r6, r6, #0x4000 + b _023401E4 +_0234019C: + ldrsh r4, [r7, #2] + b _023401D4 +_023401A4: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r2, [r0] + mov r1, r4 + orr r2, r2, #0x40 + strh r2, [r0] + mov r0, r5 + bl GetTile + ldrb r0, [r0, #7] + add r4, r4, #1 +#ifdef JAPAN + strb r0, [r6, #0x25] +#else + strb r0, [r6, #0xc9] +#endif +_023401D4: + ldrsh r0, [r7, #6] + cmp r4, r0 + blt _023401A4 + add r5, r5, #1 +_023401E4: + ldrsh r0, [r7, #4] + cmp r5, r0 + blt _0234019C + b _02340210 +_023401F4: + add r7, r7, #1 +_023401F8: + add r5, r5, #1 +_023401FC: + cmp r5, r8 + blt _02340118 + add r4, r4, #1 +_02340208: + cmp r4, sb + blt _02340100 +_02340210: + add sp, sp, #0x100 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02340218: .word DUNGEON_PTR +_0234021C: .word FLOOR_GENERATION_STATUS +_02340220: .word 0x000001C2 + arm_func_end GenerateMonsterHouse + + arm_func_start GenerateMazeRoom +GenerateMazeRoom: ; 0x02340224 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x100 + ldr r7, _02340450 ; =DUNGEON_PTR + movs r8, r3 + mov r6, r0 + mov r5, r1 + mov r4, r2 + ldr r7, [r7] + beq _02340448 + mov r0, #0x64 + bl DungeonRandInt + cmp r8, r0 + ble _02340448 + add r0, r7, #0x4000 +#ifdef JAPAN + ldrsh r0, [r0, #0x3a] +#else + ldrsh r0, [r0, #0xde] +#endif + cmp r0, #0 + bge _02340448 + mov sb, #0 + mov r1, sb + b _02340310 +_02340274: + ldr r0, _02340454 ; =0x000001C2 + mov r2, #0 + mla r3, r1, r0, r6 + mov r7, #0x1e + b _02340304 +_02340288: + mla r0, r2, r7, r3 + ldrb r8, [r0, #8] + cmp r8, #0 + ldreqb r8, [r0, #0x11] + cmpeq r8, #0 + bne _02340300 + ldrb r8, [r0, #0xb] + cmp r8, #0 + ldrneb r8, [r0, #0xa] + cmpne r8, #0 + beq _02340300 + ldrb r8, [r0, #0xc] + cmp r8, #0 + ldreqb r8, [r0, #0xf] + cmpeq r8, #0 + ldreqb r8, [r0, #0xe] + cmpeq r8, #0 + ldreqb r8, [r0, #9] + cmpeq r8, #0 + bne _02340300 + ldrsh sl, [r0, #4] + ldrsh r8, [r0] + sub r8, sl, r8 + tst r8, #1 + beq _02340300 + ldrsh r8, [r0, #6] + ldrsh r0, [r0, #2] + sub r0, r8, r0 + tst r0, #1 + addne sb, sb, #1 +_02340300: + add r2, r2, #1 +_02340304: + cmp r2, r4 + blt _02340288 + add r1, r1, #1 +_02340310: + cmp r1, r5 + blt _02340274 + cmp sb, #0 + beq _02340448 + mov r1, #0 + mov sl, r1 + add r0, sp, #0 +_0234032C: + strb sl, [r0, r1] + add r1, r1, #1 + cmp r1, #0x100 + blt _0234032C + mov r0, #1 + strb r0, [sp] + add r7, sp, #0 +_02340348: + mov r0, sb + bl DungeonRandInt + mov r8, r0 + mov r0, sb + bl DungeonRandInt + add sl, sl, #1 + ldrb r2, [r7, r8] + ldrb r1, [r7, r0] + cmp sl, #0x40 + strb r1, [r7, r8] + strb r2, [r7, r0] + blt _02340348 + mov r7, #0 + mov r2, r7 + b _02340440 +_02340384: + ldr r0, _02340454 ; =0x000001C2 + mov r3, #0 + mla r1, r2, r0, r6 + add sl, sp, #0 + mov r8, #0x1e + b _02340434 +_0234039C: + mla r0, r3, r8, r1 + ldrb sb, [r0, #8] + cmp sb, #0 + ldreqb sb, [r0, #0x11] + cmpeq sb, #0 + bne _02340430 + ldrb sb, [r0, #0xb] + cmp sb, #0 + ldrneb sb, [r0, #0xa] + cmpne sb, #0 + beq _02340430 + ldrb sb, [r0, #0xc] + cmp sb, #0 + ldreqb sb, [r0, #0xf] + cmpeq sb, #0 + ldreqb sb, [r0, #0xe] + cmpeq sb, #0 + ldreqb sb, [r0, #9] + cmpeq sb, #0 + bne _02340430 + ldrsh ip, [r0, #4] + ldrsh sb, [r0] + sub sb, ip, sb + tst sb, #1 + beq _02340430 + ldrsh ip, [r0, #6] + ldrsh sb, [r0, #2] + sub sb, ip, sb + tst sb, #1 + beq _02340430 + ldrb sb, [sl, r7] + cmp sb, #0 + beq _0234042C + mov r1, #0 + bl GenerateMaze + b _02340448 +_0234042C: + add r7, r7, #1 +_02340430: + add r3, r3, #1 +_02340434: + cmp r3, r4 + blt _0234039C + add r2, r2, #1 +_02340440: + cmp r2, r5 + blt _02340384 +_02340448: + add sp, sp, #0x100 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02340450: .word DUNGEON_PTR +_02340454: .word 0x000001C2 + arm_func_end GenerateMazeRoom + + arm_func_start GenerateMaze +GenerateMaze: ; 0x02340458 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x10 + ldr r2, _023406D0 ; =FLOOR_GENERATION_STATUS + mov r3, #1 + mov r5, r0 + strb r3, [r2, #7] + strb r3, [r5, #0x10] + mov r4, r1 + ldrsh r0, [r5] + ldrsh r1, [r5, #2] + bl GetTile + ldrsh r1, [r5] + ldrb r7, [r0, #7] + add r6, r1, #1 + b _023404DC +_02340494: + ldrsh r1, [r5, #2] + mov r0, r6 + sub r1, r1, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _023404D8 + ldrsh r3, [r5, #2] + ldrsh r2, [r5, #4] + mov r0, r6 + sub r1, r3, #1 + str r2, [sp] + ldrsh r2, [r5, #6] + stmib sp, {r2, r4, r7} + ldrsh r2, [r5] + bl GenerateMazeLine +_023404D8: + add r6, r6, #2 +_023404DC: + ldrsh r0, [r5, #4] + sub r0, r0, #1 + cmp r6, r0 + blt _02340494 + ldrsh r0, [r5, #2] + add r6, r0, #1 + b _02340538 +_023404F8: + ldrsh r0, [r5, #4] + mov r1, r6 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _02340534 + ldrsh r0, [r5, #4] + mov r1, r6 + str r0, [sp] + ldrsh r2, [r5, #6] + stmib sp, {r2, r4, r7} + ldrsh r2, [r5] + ldrsh r3, [r5, #2] + bl GenerateMazeLine +_02340534: + add r6, r6, #2 +_02340538: + ldrsh r0, [r5, #6] + sub r0, r0, #1 + cmp r6, r0 + blt _023404F8 + ldrsh r0, [r5] + add r6, r0, #1 + b _02340594 +_02340554: + ldrsh r1, [r5, #6] + mov r0, r6 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _02340590 + ldrsh r1, [r5, #6] + ldrsh r2, [r5, #4] + mov r0, r6 + str r2, [sp] + stmib sp, {r1, r4, r7} + ldrsh r2, [r5] + ldrsh r3, [r5, #2] + bl GenerateMazeLine +_02340590: + add r6, r6, #2 +_02340594: + ldrsh r0, [r5, #4] + sub r0, r0, #1 + cmp r6, r0 + blt _02340554 + ldrsh r0, [r5, #2] + add r6, r0, #1 + b _023405F8 +_023405B0: + ldrsh r0, [r5] + mov r1, r6 + sub r0, r0, #1 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _023405F4 + ldrsh r2, [r5] + ldrsh r3, [r5, #4] + mov r1, r6 + sub r0, r2, #1 + str r3, [sp] + ldrsh r3, [r5, #6] + stmib sp, {r3, r4, r7} + ldrsh r3, [r5, #2] + bl GenerateMazeLine +_023405F4: + add r6, r6, #2 +_023405F8: + ldrsh r0, [r5, #6] + sub r0, r0, #1 + cmp r6, r0 + blt _023405B0 + ldrsh r0, [r5] + add r8, r0, #3 + b _023406B8 +_02340614: + ldrsh r0, [r5, #2] + sub r6, r8, #1 + add sb, r0, #3 + b _023406A4 +_02340624: + mov r0, r8 + mov r1, sb + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _023406A0 + cmp r4, #0 + mov r0, r6 + mov r1, sb + beq _0234066C + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #2 + b _02340678 +_0234066C: + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 +_02340678: + strh r1, [r0] + ldrsh r2, [r5, #4] + mov r0, r8 + mov r1, sb + str r2, [sp] + ldrsh r2, [r5, #6] + stmib sp, {r2, r4, r7} + ldrsh r2, [r5] + ldrsh r3, [r5, #2] + bl GenerateMazeLine +_023406A0: + add sb, sb, #2 +_023406A4: + ldrsh r0, [r5, #6] + sub r0, r0, #3 + cmp sb, r0 + blt _02340624 + add r8, r8, #2 +_023406B8: + ldrsh r0, [r5, #4] + sub r0, r0, #3 + cmp r8, r0 + blt _02340614 + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_023406D0: .word FLOOR_GENERATION_STATUS + arm_func_end GenerateMaze + + arm_func_start GenerateMazeLine +GenerateMazeLine: ; 0x023406D4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + ldr r4, [sp, #0x34] + ldr fp, [sp, #0x30] + ldr r7, [sp, #0x38] + ldr r6, [sp, #0x3c] + str r4, [sp, #0x34] + mov sb, r0 + mov r8, r1 + str r2, [sp] + str r3, [sp, #4] +_02340700: + mov r0, #4 + bl DungeonRandInt + mov r4, r0 + mov r0, sb + mov r1, r8 + mov sl, #0 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + mvn r0, #1 + str r0, [sp, #8] +_02340730: + and r5, r4, #3 + cmp r5, #3 + addls pc, pc, r5, lsl #2 + b _02340774 +_02340740: ; jump table + b _02340750 ; case 0 + b _0234075C ; case 1 + b _02340768 ; case 2 + b _02340774 ; case 3 +_02340750: + mov r0, #2 + mov r2, #0 + b _0234077C +_0234075C: + mov r0, #0 + ldr r2, [sp, #8] + b _0234077C +_02340768: + ldr r0, [sp, #8] + mov r2, #0 + b _0234077C +_02340774: + mov r0, #0 + mov r2, #2 +_0234077C: + ldr r1, [sp] + add r0, sb, r0 + cmp r1, r0 + bgt _023407C4 + cmp fp, r0 + ble _023407C4 + add r1, r8, r2 + ldr r2, [sp, #4] + cmp r2, r1 + bgt _023407C4 + ldr r2, [sp, #0x34] + cmp r2, r1 + ble _023407C4 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + beq _023407D8 +_023407C4: + add r4, r4, #1 + add sl, sl, #1 + cmp sl, #4 + blt _02340730 + b _02340874 +_023407D8: + cmp r5, #3 + addls pc, pc, r5, lsl #2 + b _02340700 +_023407E4: ; jump table + b _023407F4 ; case 0 + b _02340814 ; case 1 + b _02340834 ; case 2 + b _02340854 ; case 3 +_023407F4: + mov r1, r8 + add r0, sb, #1 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + add sb, sb, #2 + b _02340700 +_02340814: + mov r0, sb + sub r1, r8, #1 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + sub r8, r8, #2 + b _02340700 +_02340834: + mov r1, r8 + sub r0, sb, #1 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + sub sb, sb, #2 + b _02340700 +_02340854: + mov r0, sb + add r1, r8, #1 + bl GetTileSafe + mov r1, r7 + and r2, r6, #0xff + bl SetTerrainObstacleChecked + add r8, r8, #2 + b _02340700 +_02340874: + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + arm_func_end GenerateMazeLine + + arm_func_start SetSpawnFlag5 +SetSpawnFlag5: ; 0x0234087C + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldrsh r5, [r6] + b _023408C0 +_0234088C: + ldrsh r4, [r6, #2] + b _023408B0 +_02340894: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0, #2] + add r4, r4, #1 + orr r1, r1, #0x20 + strh r1, [r0, #2] +_023408B0: + ldrsh r0, [r6, #6] + cmp r4, r0 + blt _02340894 + add r5, r5, #1 +_023408C0: + ldrsh r0, [r6, #4] + cmp r5, r0 + blt _0234088C + ldmia sp!, {r4, r5, r6, pc} + arm_func_end SetSpawnFlag5 + + arm_func_start IsNextToHallway +IsNextToHallway: ; 0x023408D0 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mvn r5, #0 + mov sl, r0 + mov sb, r1 + mov r4, r5 + b _02340964 +_023408E8: + adds r8, sl, r5 + bmi _02340960 + cmp r8, #0x38 + bge _0234096C + mov r6, r4 + b _02340958 +_02340900: + adds r7, sb, r6 + bmi _02340954 + cmp r7, #0x20 + bge _02340960 + cmp r5, #0 + cmpne r6, #0 + bne _02340954 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #1 + bne _02340954 + mov r0, r8 + mov r1, r7 + bl GetTile + ldrb r0, [r0, #7] + cmp r0, #0xff + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02340954: + add r6, r6, #1 +_02340958: + cmp r6, #1 + ble _02340900 +_02340960: + add r5, r5, #1 +_02340964: + cmp r5, #1 + ble _023408E8 +_0234096C: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end IsNextToHallway + + arm_func_start ResolveInvalidSpawns +ResolveInvalidSpawns: ; 0x02340974 + stmdb sp!, {r3, r4, r5, lr} + mov r5, #0 +_0234097C: + mov r4, #0 +_02340980: + mov r0, r5 + mov r1, r4 + bl GetTileSafe + ldrh r1, [r0] + and r1, r1, #3 + cmp r1, #1 + beq _023409BC + ldrh r1, [r0] + tst r1, #0x110 + ldrneh r1, [r0, #2] + bicne r1, r1, #2 + strneh r1, [r0, #2] + ldrh r1, [r0, #2] + bic r1, r1, #4 + strh r1, [r0, #2] +_023409BC: + ldrh r1, [r0, #2] + tst r1, #1 + beq _023409E0 + ldrh r1, [r0] + orr r1, r1, #0x200 + strh r1, [r0] + ldrh r1, [r0, #2] + bic r1, r1, #4 + strh r1, [r0, #2] +_023409E0: + ldrh r1, [r0, #2] + add r4, r4, #1 + tst r1, #2 + bicne r1, r1, #4 + strneh r1, [r0, #2] + cmp r4, #0x20 + blt _02340980 + add r5, r5, #1 + cmp r5, #0x38 + blt _0234097C + ldmia sp!, {r3, r4, r5, pc} + arm_func_end ResolveInvalidSpawns + + arm_func_start ConvertSecondaryTerrainToChasms +ConvertSecondaryTerrainToChasms: ; 0x02340A0C + stmdb sp!, {r4, r5, r6, lr} + mov r6, #0 + mov r4, r6 +_02340A18: + mov r5, r4 +_02340A1C: + mov r0, r6 + mov r1, r5 + bl GetTile + ldrh r0, [r0] + and r0, r0, #3 + cmp r0, #2 + bne _02340A5C + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] + ldrh r1, [r0] + orr r1, r1, #3 + strh r1, [r0] +_02340A5C: + add r5, r5, #1 + cmp r5, #0x20 + blt _02340A1C + add r6, r6, #1 + cmp r6, #0x38 + blt _02340A18 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end ConvertSecondaryTerrainToChasms + + arm_func_start EnsureImpassableTilesAreWalls +EnsureImpassableTilesAreWalls: ; 0x02340A78 + stmdb sp!, {r4, r5, r6, lr} + mov r6, #0 + mov r4, r6 +_02340A84: + mov r5, r4 +_02340A88: + mov r0, r6 + mov r1, r5 + bl GetTile + ldrh r0, [r0] + tst r0, #0x10 + beq _02340AB8 + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + bic r1, r1, #3 + strh r1, [r0] +_02340AB8: + add r5, r5, #1 + cmp r5, #0x20 + blt _02340A88 + add r6, r6, #1 + cmp r6, #0x38 + blt _02340A84 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end EnsureImpassableTilesAreWalls + + arm_func_start InitializeTile +InitializeTile: ; 0x02340AD4 + mov r2, #0 + strh r2, [r0] + strh r2, [r0, #2] + mov r1, #0xff + strb r1, [r0, #7] + strh r2, [r0, #4] + strb r2, [r0, #8] + strb r2, [r0, #9] + strb r2, [r0, #0xa] + strb r2, [r0, #0xb] + strb r2, [r0, #6] + str r2, [r0, #0xc] + str r2, [r0, #0x10] + bx lr + arm_func_end InitializeTile + + arm_func_start ResetFloor +ResetFloor: ; 0x02340B0C +#ifdef JAPAN +#define RESET_FLOOR_OFFSET -0xA4 +#else +#define RESET_FLOOR_OFFSET 0 +#endif + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r6, #0 + mov r4, r6 +_02340B18: + mov r5, r4 + sub r7, r6, #1 +_02340B20: + mov r0, r6 + mov r1, r5 + bl GetTileSafe + bl InitializeTile + sub r8, r5, #1 + mov r0, r6 + mov r1, r8 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r1, r8 + add r0, r6, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r1, r8 + add r0, r6, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + add r0, r6, #1 + add r1, r5, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r0, r6 + add r1, r5, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r0, r7 + add r1, r5, #1 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r0, r7 + mov r1, r5 + bl PosIsOutOfBounds + cmp r0, #0 + bne _02340BD4 + mov r0, r7 + mov r1, r8 + bl PosIsOutOfBounds + cmp r0, #0 + beq _02340BEC +_02340BD4: + mov r0, r6 + mov r1, r5 + bl GetTileSafe + ldrh r1, [r0] + orr r1, r1, #0x10 + strh r1, [r0] +_02340BEC: + add r5, r5, #1 + cmp r5, #0x20 + blt _02340B20 + add r6, r6, #1 + cmp r6, #0x38 + blt _02340B18 + ldr r6, _02340CA8 ; =DUNGEON_PTR + mov sb, #0 + ldr r0, [r6] + mvn r1, #0 + add r0, r0, #0xcc00 + strh r1, [r0, #0xe4 + RESET_FLOOR_OFFSET] + ldr r0, [r6] + mov r7, sb + add r0, r0, #0xcc00 + strh r1, [r0, #0xe6 + RESET_FLOOR_OFFSET] + mov r4, #0x14 + mov r5, #0xa0 +_02340C34: + mul r8, sb, r5 + mov sl, r7 +_02340C3C: + ldr r0, [r6] +#ifdef JAPAN + add r0, r0, #0xbc + add r0, r0, #0xcc00 +#else + add r0, r0, #0xd60 + add r0, r0, #0xc000 +#endif + add r0, r0, r8 + mla r0, sl, r4, r0 + bl InitializeTile + add sl, sl, #1 + cmp sl, #8 + blt _02340C3C + add sb, sb, #1 + cmp sb, #8 + blt _02340C34 + ldr r1, _02340CA8 ; =DUNGEON_PTR + mov r3, #0 + ldr r0, [r1] + mov r2, r3 + add r0, r0, #0x3f00 + strh r3, [r0, #0xc0 + RESET_FLOOR_OFFSET] +_02340C84: + ldr r0, [r1] + add r0, r0, r3, lsl #2 + add r0, r0, #0x12000 + ldr r0, [r0, #0xcc8 + RESET_FLOOR_OFFSET] + add r3, r3, #1 + str r2, [r0] + cmp r3, #0x40 + blt _02340C84 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02340CA8: .word DUNGEON_PTR + arm_func_end ResetFloor diff --git a/include/overlay_29_022E0A04.h b/include/overlay_29_022E0A04.h new file mode 100644 index 00000000..e371010f --- /dev/null +++ b/include/overlay_29_022E0A04.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022E0A04_H +#define PMDSKY_OVERLAY_29_022E0A04_H + +#include "dungeon.h" +#include "util.h" + +void SetDungeonEscapeFields(u32 tracker, bool8 end_floor); +u32 GetSuccessfulExitTracker(void); + +#endif diff --git a/include/overlay_29_022ED01C.h b/include/overlay_29_022ED01C.h new file mode 100644 index 00000000..898c9f65 --- /dev/null +++ b/include/overlay_29_022ED01C.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_OVERLAY_29_022ED01C_H +#define PMDSKY_OVERLAY_29_022ED01C_H + +#include "dungeon.h" +#include "util.h" + +void SetForcedLossReason(enum forced_loss_reason reason); +enum forced_loss_reason GetForcedLossReason(void); + +#endif diff --git a/include/overlay_29_022ED868.h b/include/overlay_29_022ED868.h new file mode 100644 index 00000000..6b28b12c --- /dev/null +++ b/include/overlay_29_022ED868.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_022ED868_H +#define PMDSKY_OVERLAY_29_022ED868_H + +#include "dungeon.h" +#include "util.h" + +s32 AreLateGameTrapsEnabledWrapper(void); + +#endif diff --git a/include/overlay_29_02338850.h b/include/overlay_29_02338850.h new file mode 100644 index 00000000..70f1e102 --- /dev/null +++ b/include/overlay_29_02338850.h @@ -0,0 +1,12 @@ +#ifndef PMDSKY_OVERLAY_29_02338850_H +#define PMDSKY_OVERLAY_29_02338850_H + +#include "dungeon.h" +#include "util.h" + +enum hidden_stairs_type GetHiddenStairsField(void); +void SetHiddenStairsField(enum hidden_stairs_type value); +enum hidden_stairs_type GetHiddenFloorField(void); +void SetHiddenFloorField(enum hidden_stairs_type value); + +#endif diff --git a/include/overlay_29_02339118.h b/include/overlay_29_02339118.h new file mode 100644 index 00000000..ceea70dc --- /dev/null +++ b/include/overlay_29_02339118.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_OVERLAY_29_02339118_H +#define PMDSKY_OVERLAY_29_02339118_H + +#include "dungeon.h" +#include "util.h" + +struct minimap_display_data* GetMinimapData(void); + +#endif diff --git a/main.lsf b/main.lsf index 29796e8a..53e87bce 100644 --- a/main.lsf +++ b/main.lsf @@ -753,6 +753,8 @@ Overlay OVY_29 Object asm/overlay_29_022E0378.o Object src/run_dungeon_1.o Object asm/overlay_29_022E08A0.o + Object src/overlay_29_022E0A04.o + Object asm/overlay_29_022E0A18.o Object src/overlay_29_022E1610.o Object asm/overlay_29_022E1618.o Object src/dungeon_util_1.o @@ -791,6 +793,10 @@ Overlay OVY_29 Object asm/overlay_29_022EC62C.o Object src/overlay_29_022ECDC0.o Object asm/overlay_29_022ECDE4.o + Object src/overlay_29_022ED01C.o + Object asm/overlay_29_022ED030.o + Object src/overlay_29_022ED868.o + Object asm/overlay_29_022ED888.o Object src/trap.o Object asm/overlay_29_022EDCBC.o Object src/overlay_29_022EE348.o @@ -1018,6 +1024,10 @@ Overlay OVY_29 Object src/overlay_29_02338560.o Object src/overlay_29_02338604.o Object asm/overlay_29_0233861C.o + Object src/overlay_29_02338850.o + Object asm/overlay_29_023388B0.o + Object src/overlay_29_02339118.o + Object asm/overlay_29_02339138.o Object src/overlay_29_02340CAC.o Object asm/overlay_29_02340CE4.o Object src/dungeon_generation.o diff --git a/src/overlay_29_022E0A04.c b/src/overlay_29_022E0A04.c new file mode 100644 index 00000000..0f0cd9a6 --- /dev/null +++ b/src/overlay_29_022E0A04.c @@ -0,0 +1,17 @@ +#include "overlay_29_022E0A04.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +s32 AreLateGameTrapsEnabled(enum fixed_room_id fixed_room_id); + +void SetDungeonEscapeFields(u32 tracker, bool8 end_floor) +{ + DUNGEON_PTR->successful_exit_tracker = tracker; + DUNGEON_PTR->end_floor_no_death_check_flag = end_floor; +} + +u32 GetSuccessfulExitTracker(void) +{ + return DUNGEON_PTR->successful_exit_tracker; +} diff --git a/src/overlay_29_022ED01C.c b/src/overlay_29_022ED01C.c new file mode 100644 index 00000000..f6f36498 --- /dev/null +++ b/src/overlay_29_022ED01C.c @@ -0,0 +1,16 @@ +#include "overlay_29_022ED01C.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +s32 AreLateGameTrapsEnabled(enum fixed_room_id fixed_room_id); + +void SetForcedLossReason(enum forced_loss_reason reason) +{ + DUNGEON_PTR->forced_loss_reason = reason; +} + +enum forced_loss_reason GetForcedLossReason(void) +{ + return DUNGEON_PTR->forced_loss_reason; +} diff --git a/src/overlay_29_022ED868.c b/src/overlay_29_022ED868.c new file mode 100644 index 00000000..50b311b2 --- /dev/null +++ b/src/overlay_29_022ED868.c @@ -0,0 +1,11 @@ +#include "overlay_29_022ED868.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +s32 AreLateGameTrapsEnabled(enum fixed_room_id fixed_room_id); + +s32 AreLateGameTrapsEnabledWrapper(void) +{ + return AreLateGameTrapsEnabled(DUNGEON_PTR->gen_info.fixed_room_id); +} diff --git a/src/overlay_29_02338850.c b/src/overlay_29_02338850.c new file mode 100644 index 00000000..267dbcfd --- /dev/null +++ b/src/overlay_29_02338850.c @@ -0,0 +1,26 @@ +#include "overlay_29_02338850.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +s32 AreLateGameTrapsEnabled(enum fixed_room_id fixed_room_id); + +enum hidden_stairs_type GetHiddenStairsField(void) +{ + return DUNGEON_PTR->gen_info.hidden_stairs_type; +} + +void SetHiddenStairsField(enum hidden_stairs_type value) +{ + DUNGEON_PTR->gen_info.hidden_stairs_type = value; +} + +enum hidden_stairs_type GetHiddenFloorField(void) +{ + return DUNGEON_PTR->gen_info.hidden_floor_type; +} + +void SetHiddenFloorField(enum hidden_stairs_type value) +{ + DUNGEON_PTR->gen_info.hidden_floor_type = value; +} diff --git a/src/overlay_29_02339118.c b/src/overlay_29_02339118.c new file mode 100644 index 00000000..d84d6b54 --- /dev/null +++ b/src/overlay_29_02339118.c @@ -0,0 +1,13 @@ +#include "overlay_29_02339118.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR; + +s32 AreLateGameTrapsEnabled(enum fixed_room_id fixed_room_id); + +struct minimap_display_data* GetMinimapData(void) +{ + struct dungeon *dungeon = DUNGEON_PTR; + + return dungeon != NULL ? &dungeon->minimap_display_data : NULL; +}