StairsAlwaysReachable

This commit is contained in:
DizzyEggg 2024-11-15 13:17:41 +01:00
parent 799ea6a5c6
commit cf71f88356
6 changed files with 971 additions and 554 deletions

View File

@ -5,460 +5,6 @@
.text
thumb_func_start sub_8050C30
sub_8050C30:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
ldr r4, _08050F3C
add sp, r4
mov r8, r0
mov r9, r1
lsls r2, 24
lsrs r2, 24
movs r0, 0xE0
lsls r0, 3
add r0, sp
str r2, [r0]
movs r7, 0
mov r1, r8
lsls r1, 5
movs r2, 0xE2
lsls r2, 3
add r2, sp
str r1, [r2]
_08050C5C:
movs r6, 0
lsls r2, r7, 5
adds r3, r7, 0x1
mov r10, r3
mov r5, sp
adds r4, r2, r5
_08050C68:
adds r0, r7, 0
adds r1, r6, 0
bl GetTileSafe
adds r2, r0, 0
ldrh r0, [r2]
movs r3, 0x3
ands r3, r0
movs r0, 0
strb r0, [r4]
movs r0, 0xE0
lsls r0, 3
add r0, sp
ldr r0, [r0]
cmp r0, 0
beq _08050C92
ldrh r0, [r2]
ldr r5, _08050F40
adds r1, r5, 0
ands r0, r1
strh r0, [r2]
_08050C92:
cmp r3, 0x1
beq _08050CA8
ldrh r1, [r2]
movs r0, 0x4
ands r0, r1
cmp r0, 0
bne _08050CA8
ldrb r0, [r4]
movs r1, 0x1
orrs r0, r1
strb r0, [r4]
_08050CA8:
cmp r3, 0x2
bne _08050CBE
ldrh r1, [r2]
movs r0, 0x4
ands r0, r1
cmp r0, 0
bne _08050CBE
ldrb r0, [r4]
movs r1, 0x2
orrs r0, r1
strb r0, [r4]
_08050CBE:
adds r4, 0x1
adds r6, 0x1
cmp r6, 0x1F
ble _08050C68
mov r7, r10
cmp r7, 0x37
ble _08050C5C
movs r1, 0xE2
lsls r1, 3
add r1, sp
ldr r0, [r1]
add r0, r9
mov r3, sp
adds r2, r3, r0
ldrb r1, [r2]
movs r0, 0x50
orrs r0, r1
strb r0, [r2]
ldr r0, _08050F44
ldr r1, [r0]
ldr r5, _08050F48
adds r0, r1, r5
movs r2, 0
ldrsh r0, [r0, r2]
cmp r0, r8
beq _08050CF4
b _08050F36
_08050CF4:
ldr r3, _08050F4C
adds r0, r1, r3
movs r5, 0
ldrsh r0, [r0, r5]
cmp r0, r9
beq _08050D02
b _08050F36
_08050D02:
ldr r1, _08050F50
movs r0, 0
str r0, [r1]
movs r0, 0x40
mov r9, r0
_08050D0C:
movs r1, 0
ldr r2, _08050F54
add r2, sp
str r1, [r2]
ldr r3, _08050F50
ldr r0, [r3]
adds r0, 0x1
str r0, [r3]
movs r7, 0
_08050D1E:
movs r6, 0
lsls r2, r7, 5
adds r5, r7, 0x1
mov r10, r5
subs r0, r7, 0x1
movs r1, 0xE1
lsls r1, 3
add r1, sp
str r0, [r1]
lsls r0, 5
mov r1, sp
subs r1, 0x1
adds r5, r2, r1
add r0, sp
mov r8, r0
mov r2, r10
ldr r3, _08050F58
add r3, sp
str r2, [r3]
lsls r0, r2, 5
add r0, sp
mov r12, r0
_08050D4A:
ldrb r1, [r5, 0x1]
movs r0, 0x80
ands r0, r1
cmp r0, 0
beq _08050D56
b _08050EDA
_08050D56:
movs r3, 0x40
mov r0, r9
ands r0, r1
cmp r0, 0
bne _08050D62
b _08050EDA
_08050D62:
ldr r2, _08050F54
add r2, sp
ldr r0, [r2]
adds r0, 0x1
str r0, [r2]
movs r0, 0xBF
ands r0, r1
movs r2, 0
movs r1, 0x80
orrs r0, r1
strb r0, [r5, 0x1]
cmp r7, 0
ble _08050D90
mov r0, r8
ldrb r1, [r0]
movs r0, 0x83
ands r0, r1
cmp r0, 0
bne _08050D90
adds r0, r1, 0
orrs r0, r3
mov r1, r8
strb r0, [r1]
_08050D90:
cmp r6, 0
ble _08050DA4
ldrb r1, [r5]
movs r0, 0x83
ands r0, r1
cmp r0, 0
bne _08050DA4
mov r0, r9
orrs r0, r1
strb r0, [r5]
_08050DA4:
cmp r7, 0x36
bgt _08050DBA
mov r2, r12
ldrb r1, [r2]
movs r0, 0x83
ands r0, r1
cmp r0, 0
bne _08050DBA
mov r0, r9
orrs r0, r1
strb r0, [r2]
_08050DBA:
cmp r6, 0x1E
bgt _08050DCE
ldrb r1, [r5, 0x2]
movs r0, 0x83
ands r0, r1
cmp r0, 0
bne _08050DCE
mov r0, r9
orrs r0, r1
strb r0, [r5, 0x2]
_08050DCE:
cmp r7, 0
ble _08050E12
cmp r6, 0
ble _08050E12
movs r3, 0xE1
lsls r3, 3
add r3, sp
ldr r3, [r3]
lsls r1, r3, 5
subs r0, r1, 0x1
adds r0, r6, r0
mov r2, sp
adds r4, r2, r0
ldrb r3, [r4]
movs r0, 0x87
ands r0, r3
cmp r0, 0
bne _08050E12
adds r0, r6, r1
add r0, sp
ldrb r1, [r0]
movs r2, 0x1
adds r0, r2, 0
ands r0, r1
cmp r0, 0
bne _08050E12
ldrb r1, [r5]
adds r0, r2, 0
ands r0, r1
cmp r0, 0
bne _08050E12
mov r0, r9
orrs r0, r3
strb r0, [r4]
_08050E12:
cmp r7, 0x36
bgt _08050E54
cmp r6, 0
ble _08050E54
ldr r3, _08050F58
add r3, sp
ldr r3, [r3]
lsls r1, r3, 5
subs r0, r1, 0x1
adds r0, r6, r0
mov r2, sp
adds r4, r2, r0
ldrb r3, [r4]
movs r0, 0x87
ands r0, r3
cmp r0, 0
bne _08050E54
adds r0, r6, r1
add r0, sp
ldrb r1, [r0]
movs r2, 0x1
adds r0, r2, 0
ands r0, r1
cmp r0, 0
bne _08050E54
ldrb r1, [r5]
adds r0, r2, 0
ands r0, r1
cmp r0, 0
bne _08050E54
mov r0, r9
orrs r0, r3
strb r0, [r4]
_08050E54:
cmp r7, 0
ble _08050E98
cmp r6, 0x1E
bgt _08050E98
movs r3, 0xE1
lsls r3, 3
add r3, sp
ldr r3, [r3]
lsls r1, r3, 5
adds r0, r1, 0x1
adds r0, r6, r0
mov r2, sp
adds r4, r2, r0
ldrb r3, [r4]
movs r0, 0x87
ands r0, r3
cmp r0, 0
bne _08050E98
adds r0, r6, r1
add r0, sp
ldrb r1, [r0]
movs r2, 0x1
adds r0, r2, 0
ands r0, r1
cmp r0, 0
bne _08050E98
ldrb r1, [r5, 0x2]
adds r0, r2, 0
ands r0, r1
cmp r0, 0
bne _08050E98
mov r0, r9
orrs r0, r3
strb r0, [r4]
_08050E98:
cmp r7, 0x36
bgt _08050EDA
cmp r6, 0x1E
bgt _08050EDA
ldr r3, _08050F58
add r3, sp
ldr r3, [r3]
lsls r1, r3, 5
adds r0, r1, 0x1
adds r0, r6, r0
mov r2, sp
adds r4, r2, r0
ldrb r3, [r4]
movs r0, 0x87
ands r0, r3
cmp r0, 0
bne _08050EDA
adds r0, r6, r1
add r0, sp
ldrb r1, [r0]
movs r2, 0x1
adds r0, r2, 0
ands r0, r1
cmp r0, 0
bne _08050EDA
ldrb r1, [r5, 0x2]
adds r0, r2, 0
ands r0, r1
cmp r0, 0
bne _08050EDA
mov r0, r9
orrs r0, r3
strb r0, [r4]
_08050EDA:
adds r5, 0x1
movs r3, 0x1
add r8, r3
add r12, r3
adds r6, 0x1
cmp r6, 0x1F
bgt _08050EEA
b _08050D4A
_08050EEA:
mov r7, r10
cmp r7, 0x37
bgt _08050EF2
b _08050D1E
_08050EF2:
ldr r5, _08050F54
add r5, sp
ldr r5, [r5]
cmp r5, 0
beq _08050EFE
b _08050D0C
_08050EFE:
movs r7, 0
_08050F00:
movs r6, 0
lsls r2, r7, 5
mov r0, sp
adds r4, r2, r0
_08050F08:
adds r0, r7, 0
adds r1, r6, 0
bl GetTileSafe
adds r2, r0, 0
ldrb r1, [r4]
movs r0, 0x87
ands r0, r1
cmp r0, 0
bne _08050F68
movs r1, 0xE0
lsls r1, 3
add r1, sp
ldr r1, [r1]
cmp r1, 0
bne _08050F5C
ldrh r0, [r2]
movs r2, 0x80
lsls r2, 1
adds r1, r2, 0
ands r0, r1
cmp r0, 0
bne _08050F68
_08050F36:
movs r0, 0
b _08050F78
.align 2, 0
_08050F3C: .4byte 0xfffff8ec
_08050F40: .4byte 0x00007fff
_08050F44: .4byte gDungeon
_08050F48: .4byte 0x0000e21c
_08050F4C: .4byte 0x0000e21e
_08050F50: .4byte gUnknown_202F1D4
_08050F54: .4byte 0x00000704
_08050F58: .4byte 0x0000070c
_08050F5C:
ldrh r1, [r2]
movs r3, 0x80
lsls r3, 8
adds r0, r3, 0
orrs r0, r1
strh r0, [r2]
_08050F68:
adds r4, 0x1
adds r6, 0x1
cmp r6, 0x1F
ble _08050F08
adds r7, 0x1
cmp r7, 0x37
ble _08050F00
movs r0, 0x1
_08050F78:
ldr r3, _08050F8C
add sp, r3
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_08050F8C: .4byte 0x00000714
thumb_func_end sub_8050C30
thumb_func_start sub_8050F90
sub_8050F90:
push {r4-r7,lr}

View File

@ -1081,7 +1081,7 @@ _0807DD94:
movs r3, 0
ldrsh r1, [r1, r3]
movs r2, 0x1
bl sub_8050C30
bl StairsAlwaysReachable
lsls r0, 24
cmp r0, 0
beq _0807DE02

View File

@ -31,5 +31,6 @@ enum SecondaryStructureType {
SECONDARY_STRUCTURE_DIVIDER, // A "divider" of secondary terrain will split the room in half randomly either horizontally or vertically.
};
bool8 StairsAlwaysReachable(s32 stairsX, s32 stairsY, bool8 markUnreachable);
#endif

View File

@ -13,7 +13,7 @@ enum TerrainType
TERRAIN_TYPE_WALL = 0, // x0 When neither TERRAIN_TYPE_NORMAL nor TERRAIN_TYPE_SECONDARY are set
TERRAIN_TYPE_NORMAL = 1 << 0, // x1
TERRAIN_TYPE_SECONDARY = 1 << 1, // Water or lava depending on the dungeon. x2
TERRAIN_TYPE_UNK_2 = 1 << 2, // x4
TERRAIN_TYPE_CORNER_CUTTABLE = 1 << 2, // x4 This tile can be corner-cut when walking. Seemingly only used during dungeon generation.
TERRAIN_TYPE_NATURAL_JUNCTION = 1 << 3, // x8
TERRAIN_TYPE_IMPASSABLE_WALL = 1 << 4, // x10
TERRAIN_TYPE_SHOP = 1 << 5, // x20
@ -24,6 +24,7 @@ enum TerrainType
TERRAIN_TYPE_UNK_x400 = 1 << 10,
TERRAIN_TYPE_UNK_x800 = 1 << 11,
TERRAIN_TYPE_UNK_x1000 = 1 << 12,
TERRAIN_TYPE_UNREACHABLE_FROM_STAIRS = 1 << 15, // 0x8000
};
enum CrossableTerrain

File diff suppressed because it is too large Load Diff

View File

@ -276,11 +276,6 @@ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */
.include "src/dungeon_map_access.o"
.include "src/dungeon_generation.o"
gUnknown_202F1D4: /* 202F1D4 (sub_8050C30) */
.space 0x4
gUnknown_202F1D8: /* 202F1D8 (sub_804AFAC - sub_804EBC8) */
.space 0x4
gUnknown_202F1DC: /* 202F1DC (sub_80511F0 - sub_8051438) */
.space 0x4
gUnknown_202F1E0: /* 202F1E0 (sub_80511F0) */