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; +}