sub_804B534

This commit is contained in:
DizzyEggg 2024-11-06 10:42:40 +01:00
parent 6d4e2c2a07
commit 7ae74721b9
4 changed files with 975 additions and 784 deletions

View File

@ -5,788 +5,6 @@
.text
thumb_func_start sub_804AFAC
sub_804AFAC:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x44
movs r0, 0
mov r10, r0
ldr r4, _0804B0E8
ldr r0, [r4]
ldr r1, _0804B0EC
adds r1, r0
mov r8, r1
ldr r0, _0804B0F0
ldr r1, _0804B0F4
bl OpenFileAndGetFileDataPtr
ldr r2, [r4]
ldr r3, _0804B0F8
adds r1, r2, r3
str r0, [r1]
ldr r0, _0804B0FC
mov r6, r10
strb r6, [r0]
ldr r0, _0804B100
strb r6, [r0]
ldr r0, _0804B104
strb r6, [r0]
ldr r5, _0804B108
movs r3, 0
ldr r1, _0804B10C
ldr r0, _0804B110
adds r2, r0
movs r6, 0
ldrsh r0, [r2, r6]
adds r0, r1
ldrb r0, [r0]
cmp r0, 0x2
bne _0804AFFC
movs r3, 0x1
_0804AFFC:
strb r3, [r5]
ldr r1, _0804B114
movs r0, 0xFF
strb r0, [r1]
ldr r0, _0804B118
mov r1, r10
strb r1, [r0]
ldr r1, _0804B11C
mov r2, r8
ldrb r0, [r2, 0x7]
strh r0, [r1]
ldr r1, _0804B120
ldrb r0, [r2, 0x8]
strh r0, [r1]
ldr r1, _0804B124
movs r0, 0x1
strb r0, [r1]
ldr r1, _0804B128
movs r0, 0x1
negs r0, r0
str r0, [r1]
str r0, [r1, 0x8]
str r0, [r1, 0x4]
str r0, [r1, 0xC]
bl sub_804FD30
ldr r3, [r4]
mov r6, r8
ldrb r2, [r6, 0x6]
ldr r1, _0804B12C
adds r0, r3, r1
movs r1, 0
strh r2, [r0]
ldr r2, _0804B130
adds r0, r3, r2
strb r1, [r0]
ldr r0, [r4]
ldr r3, _0804B134
adds r0, r3
strb r1, [r0]
ldr r1, _0804B138
mov r6, r8
ldrb r0, [r6, 0xC]
str r0, [r1]
movs r0, 0
str r0, [sp, 0x40]
_0804B058:
ldr r0, _0804B0E8
ldr r2, [r0]
ldr r3, _0804B13C
adds r1, r2, r3
ldr r0, _0804B140
strh r0, [r1]
ldr r6, _0804B144
adds r1, r2, r6
movs r0, 0x1
negs r0, r0
strh r0, [r1]
ldr r0, _0804B148
adds r1, r2, r0
movs r0, 0x1
negs r0, r0
strh r0, [r1]
ldr r1, _0804B14C
adds r2, r1
strh r0, [r2]
movs r2, 0
mov r9, r2
_0804B082:
ldr r4, _0804B0E8
ldr r0, [r4]
ldr r3, _0804B150
adds r0, r3
movs r5, 0
movs r1, 0
mov r6, r9
strh r6, [r0]
mov r0, r9
cmp r0, 0
ble _0804B09C
ldr r0, _0804B138
str r1, [r0]
_0804B09C:
ldr r0, _0804B154
strb r5, [r0]
ldr r1, _0804B158
ldr r0, _0804B140
strh r0, [r1]
movs r0, 0x1
negs r0, r0
strh r0, [r1, 0x2]
bl sub_804FD30
ldr r1, [r4]
ldr r3, _0804B13C
adds r2, r1, r3
movs r0, 0x1
negs r0, r0
strh r0, [r2]
ldr r6, _0804B144
adds r2, r1, r6
strh r0, [r2]
ldr r0, _0804B15C
adds r1, r0
strb r5, [r1]
ldr r0, [r4]
ldr r2, _0804B160
adds r1, r0, r2
movs r3, 0
ldrsh r0, [r1, r3]
cmp r0, 0
beq _0804B164
mov r1, r8
bl sub_804C70C
lsls r0, 24
cmp r0, 0
beq _0804B0E4
b _0804B376
_0804B0E4:
b _0804B2F6
.align 2, 0
_0804B0E8: .4byte gDungeon
_0804B0EC: .4byte 0x0001c574
_0804B0F0: .4byte gUnknown_80F6DCC
_0804B0F4: .4byte gDungeonFileArchive
_0804B0F8: .4byte 0x00013568
_0804B0FC: .4byte gUnknown_202F1AA
_0804B100: .4byte gUnknown_202F1AB
_0804B104: .4byte gUnknown_202F1AC
_0804B108: .4byte gUnknown_202F1A8
_0804B10C: .4byte gDungeonWaterType
_0804B110: .4byte 0x00003a0e
_0804B114: .4byte gUnknown_202F1B4
_0804B118: .4byte gUnknown_202F1AE
_0804B11C: .4byte gUnknown_202F1B0
_0804B120: .4byte gUnknown_202F1B2
_0804B124: .4byte gUnknown_202F1AD
_0804B128: .4byte gUnknown_202F1B8
_0804B12C: .4byte 0x00000664
_0804B130: .4byte 0x00003a09
_0804B134: .4byte 0x00003a0a
_0804B138: .4byte gUnknown_202F1C8
_0804B13C: .4byte 0x0000e218
_0804B140: .4byte 0x0000ffff
_0804B144: .4byte 0x0000e21a
_0804B148: .4byte 0x0000e21c
_0804B14C: .4byte 0x0000e21e
_0804B150: .4byte 0x00003a16
_0804B154: .4byte gUnknown_202F1A9
_0804B158: .4byte gUnknown_202F1D8
_0804B15C: .4byte 0x00003a08
_0804B160: .4byte 0x00003a14
_0804B164:
mov r0, r8
ldrb r7, [r0]
movs r6, 0x20
_0804B16A:
cmp r7, 0x8
beq _0804B17E
movs r0, 0x2
movs r1, 0x9
bl DungeonRandRange
adds r5, r0, 0
movs r0, 0x2
movs r1, 0x8
b _0804B18C
_0804B17E:
movs r0, 0x2
movs r1, 0x5
bl DungeonRandRange
adds r5, r0, 0
movs r0, 0x2
movs r1, 0x4
_0804B18C:
bl DungeonRandRange
adds r4, r0, 0
cmp r5, 0x6
bgt _0804B19A
cmp r4, 0x4
ble _0804B1A4
_0804B19A:
subs r6, 0x1
cmp r6, 0
bne _0804B16A
movs r5, 0x4
movs r4, 0x4
_0804B1A4:
movs r0, 0x38
adds r1, r5, 0
bl __divsi3
cmp r0, 0x7
bgt _0804B1B2
movs r5, 0x1
_0804B1B2:
movs r0, 0x20
adds r1, r4, 0
bl __divsi3
cmp r0, 0x7
bgt _0804B1C0
movs r4, 0x1
_0804B1C0:
ldr r2, _0804B1EC
ldr r0, [r2]
ldr r1, _0804B1F0
adds r0, r1
movs r1, 0
strb r1, [r0]
ldr r0, [r2]
ldr r2, _0804B1F4
adds r0, r2
movs r1, 0xFF
strb r1, [r0]
ldr r0, _0804B1F8
str r7, [r0]
movs r0, 0xF
ands r0, r7
cmp r0, 0xB
bhi _0804B274
lsls r0, 2
ldr r1, _0804B1FC
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0804B1EC: .4byte gDungeon
_0804B1F0: .4byte 0x00003a08
_0804B1F4: .4byte 0x00003a0c
_0804B1F8: .4byte gUnknown_202F1D0
_0804B1FC: .4byte _0804B200
.align 2, 0
_0804B200:
.4byte _0804B274
.4byte _0804B230
.4byte _0804B280
.4byte _0804B298
.4byte _0804B2A4
.4byte _0804B2B0
.4byte _0804B2CC
.4byte _0804B2D8
.4byte _0804B274
.4byte _0804B2E0
.4byte _0804B2E8
.4byte _0804B250
_0804B230:
movs r0, 0x2
bl DungeonRandInt
adds r4, r0, 0x2
ldr r1, _0804B24C
movs r0, 0x1
strb r0, [r1]
movs r0, 0x4
adds r1, r4, 0
mov r2, r8
bl sub_804B634
b _0804B2AA
.align 2, 0
_0804B24C: .4byte gUnknown_202F1AE
_0804B250:
movs r0, 0x2
bl DungeonRandInt
adds r4, r0, 0x2
ldr r1, _0804B270
movs r0, 0x2
strb r0, [r1]
movs r0, 0x4
adds r1, r4, 0
mov r2, r8
bl sub_804B634
movs r6, 0x1
mov r10, r6
b _0804B2F6
.align 2, 0
_0804B270: .4byte gUnknown_202F1AE
_0804B274:
adds r0, r5, 0
adds r1, r4, 0
mov r2, r8
bl sub_804B634
b _0804B2D2
_0804B280:
bl sub_804C918
ldr r0, _0804B290
ldr r0, [r0]
ldr r1, _0804B294
adds r0, r1
b _0804B2BC
.align 2, 0
_0804B290: .4byte gDungeon
_0804B294: .4byte 0x00003a08
_0804B298:
mov r0, r8
bl sub_804B72C
movs r2, 0x1
mov r10, r2
b _0804B2F6
_0804B2A4:
mov r0, r8
bl sub_804BC80
_0804B2AA:
movs r3, 0x1
mov r10, r3
b _0804B2F6
_0804B2B0:
bl sub_804C9D0
ldr r0, _0804B2C4
ldr r0, [r0]
ldr r6, _0804B2C8
adds r0, r6
_0804B2BC:
movs r1, 0x1
strb r1, [r0]
b _0804B2F6
.align 2, 0
_0804B2C4: .4byte gDungeon
_0804B2C8: .4byte 0x00003a08
_0804B2CC:
mov r0, r8
bl sub_804C0A8
_0804B2D2:
movs r0, 0x1
mov r10, r0
b _0804B2F6
_0804B2D8:
mov r0, r8
bl sub_804C190
b _0804B2F6
_0804B2E0:
mov r0, r8
bl sub_804C2F4
b _0804B2F6
_0804B2E8:
adds r0, r5, 0
adds r1, r4, 0
mov r2, r8
bl sub_804C53C
movs r1, 0x1
mov r10, r1
_0804B2F6:
bl sub_80518F0
bl sub_804FCCC
ldr r0, _0804B4B4
ldrb r0, [r0]
cmp r0, 0
bne _0804B36A
movs r7, 0
movs r1, 0
mov r0, sp
adds r0, 0x3F
_0804B30E:
strb r1, [r0]
subs r0, 0x1
cmp r0, sp
bge _0804B30E
movs r5, 0
_0804B318:
movs r4, 0
adds r6, r5, 0x1
_0804B31C:
adds r0, r5, 0
adds r1, r4, 0
bl GetTile
adds r1, r0, 0
ldrh r0, [r1]
movs r2, 0x3
ands r2, r0
cmp r2, 0x1
bne _0804B340
ldrb r0, [r1, 0x9]
cmp r0, 0xF0
bhi _0804B340
adds r7, 0x1
cmp r0, 0x3F
bhi _0804B340
add r0, sp
strb r2, [r0]
_0804B340:
adds r4, 0x1
cmp r4, 0x1F
ble _0804B31C
adds r5, r6, 0
cmp r5, 0x37
ble _0804B318
movs r1, 0
movs r4, 0
_0804B350:
mov r2, sp
adds r0, r2, r4
ldrb r0, [r0]
cmp r0, 0
beq _0804B35C
adds r1, 0x1
_0804B35C:
adds r4, 0x1
cmp r4, 0x3F
ble _0804B350
cmp r7, 0x1D
ble _0804B36A
cmp r1, 0x1
bgt _0804B376
_0804B36A:
movs r3, 0x1
add r9, r3
mov r6, r9
cmp r6, 0x9
bgt _0804B376
b _0804B082
_0804B376:
mov r0, r9
cmp r0, 0xA
bne _0804B398
ldr r1, _0804B4B8
ldr r0, _0804B4BC
strh r0, [r1]
movs r0, 0x1
negs r0, r0
strh r0, [r1, 0x2]
bl sub_804C918
ldr r0, _0804B4C0
ldr r0, [r0]
ldr r1, _0804B4C4
adds r0, r1
movs r1, 0x1
strb r1, [r0]
_0804B398:
bl sub_804E9DC
mov r2, r10
cmp r2, 0
beq _0804B3AA
movs r0, 0x1
mov r1, r8
bl sub_80506F0
_0804B3AA:
movs r0, 0x64
bl DungeonRandInt
movs r4, 0
mov r3, r8
ldrb r3, [r3, 0x19]
cmp r0, r3
bge _0804B3BC
movs r4, 0x1
_0804B3BC:
mov r0, r8
adds r1, r4, 0
bl sub_804FF08
mov r0, r8
adds r1, r4, 0
bl sub_8050438
bl sub_804FBE8
ldr r5, _0804B4C0
ldr r1, [r5]
ldr r6, _0804B4C8
adds r0, r1, r6
movs r2, 0
ldrsh r0, [r0, r2]
movs r4, 0x1
negs r4, r4
cmp r0, r4
beq _0804B42A
ldr r3, _0804B4CC
adds r0, r1, r3
movs r6, 0
ldrsh r0, [r0, r6]
cmp r0, r4
beq _0804B42A
bl sub_8043D10
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
beq _0804B436
ldr r1, [r5]
ldr r0, _0804B4D0
adds r2, r1, r0
movs r3, 0
ldrsh r0, [r2, r3]
cmp r0, r4
beq _0804B42A
ldr r6, _0804B4D4
adds r1, r6
movs r3, 0
ldrsh r0, [r1, r3]
cmp r0, r4
beq _0804B42A
movs r6, 0
ldrsh r0, [r2, r6]
movs r2, 0
ldrsh r1, [r1, r2]
movs r2, 0
bl sub_8050C30
lsls r0, 24
cmp r0, 0
bne _0804B436
_0804B42A:
ldr r3, [sp, 0x40]
adds r3, 0x1
str r3, [sp, 0x40]
cmp r3, 0x9
bgt _0804B436
b _0804B058
_0804B436:
ldr r6, [sp, 0x40]
cmp r6, 0xA
bne _0804B474
ldr r1, _0804B4B8
ldr r0, _0804B4BC
strh r0, [r1]
movs r0, 0x1
negs r0, r0
strh r0, [r1, 0x2]
bl sub_804FD30
bl sub_804C918
ldr r0, _0804B4C0
ldr r0, [r0]
ldr r1, _0804B4C4
adds r0, r1
movs r1, 0x1
strb r1, [r0]
bl sub_804E9DC
mov r0, r8
movs r1, 0
bl sub_804FF08
mov r0, r8
movs r1, 0
bl sub_8050438
bl sub_804FBE8
_0804B474:
ldr r1, _0804B4B8
movs r2, 0
ldrsh r0, [r1, r2]
cmp r0, 0
blt _0804B498
movs r3, 0x2
ldrsh r0, [r1, r3]
cmp r0, 0
blt _0804B498
movs r6, 0
ldrsh r0, [r1, r6]
movs r2, 0x2
ldrsh r1, [r1, r2]
movs r2, 0xBE
lsls r2, 1
movs r3, 0
bl sub_806C330
_0804B498:
ldr r0, _0804B4D8
ldr r0, [r0]
cmp r0, 0
blt _0804B4E0
mov r0, r8
bl sub_8051654
ldr r0, _0804B4C0
ldr r0, [r0]
ldr r3, _0804B4DC
adds r0, r3
movs r1, 0x1
b _0804B4EA
.align 2, 0
_0804B4B4: .4byte gUnknown_202F1A9
_0804B4B8: .4byte gUnknown_202F1D8
_0804B4BC: .4byte 0x0000ffff
_0804B4C0: .4byte gDungeon
_0804B4C4: .4byte 0x00003a08
_0804B4C8: .4byte 0x0000e218
_0804B4CC: .4byte 0x0000e21a
_0804B4D0: .4byte 0x0000e21c
_0804B4D4: .4byte 0x0000e21e
_0804B4D8: .4byte gUnknown_202F1B8
_0804B4DC: .4byte 0x00003a0a
_0804B4E0:
ldr r0, _0804B524
ldr r0, [r0]
ldr r6, _0804B528
adds r0, r6
movs r1, 0
_0804B4EA:
strb r1, [r0]
movs r0, 0
movs r1, 0
movs r2, 0x38
movs r3, 0x20
bl sub_804B534
ldr r0, _0804B52C
ldrb r0, [r0]
cmp r0, 0
beq _0804B504
bl sub_804FC74
_0804B504:
ldr r0, _0804B524
ldr r0, [r0]
ldr r1, _0804B530
adds r0, r1
ldr r0, [r0]
bl CloseFile
add sp, 0x44
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0804B524: .4byte gDungeon
_0804B528: .4byte 0x00003a0a
_0804B52C: .4byte gUnknown_202F1A8
_0804B530: .4byte 0x00013568
thumb_func_end sub_804AFAC
thumb_func_start sub_804B534
sub_804B534:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x10
str r1, [sp]
str r2, [sp, 0x4]
mov r10, r3
adds r5, r0, 0
cmp r5, r2
bge _0804B620
_0804B54C:
ldr r4, [sp]
adds r0, r5, 0x1
mov r9, r0
cmp r4, r10
bge _0804B618
movs r6, 0x3
mov r8, r6
_0804B55A:
movs r3, 0
adds r0, r5, 0
adds r1, r4, 0
str r3, [sp, 0xC]
bl GetTileSafe
adds r2, r0, 0
ldrh r0, [r2]
ldr r6, _0804B630
adds r1, r6, 0
ands r1, r0
strh r1, [r2]
ldrb r0, [r2, 0x9]
adds r6, r4, 0x1
ldr r3, [sp, 0xC]
cmp r0, 0xFF
bne _0804B612
movs r7, 0x3
adds r0, r1, 0
ands r0, r7
cmp r0, 0x1
bne _0804B612
cmp r5, 0
ble _0804B5A4
subs r0, r5, 0x1
adds r1, r4, 0
str r2, [sp, 0x8]
bl GetTile
ldrh r1, [r0]
adds r0, r7, 0
ands r0, r1
ldr r2, [sp, 0x8]
ldr r3, [sp, 0xC]
cmp r0, 0x1
bne _0804B5A4
movs r3, 0x1
_0804B5A4:
cmp r4, 0
ble _0804B5C4
subs r1, r4, 0x1
adds r0, r5, 0
str r2, [sp, 0x8]
str r3, [sp, 0xC]
bl GetTile
ldrh r1, [r0]
mov r0, r8
ands r0, r1
ldr r2, [sp, 0x8]
ldr r3, [sp, 0xC]
cmp r0, 0x1
bne _0804B5C4
adds r3, 0x1
_0804B5C4:
cmp r5, 0x35
bgt _0804B5E4
mov r0, r9
adds r1, r4, 0
str r2, [sp, 0x8]
str r3, [sp, 0xC]
bl GetTile
ldrh r1, [r0]
mov r0, r8
ands r0, r1
ldr r2, [sp, 0x8]
ldr r3, [sp, 0xC]
cmp r0, 0x1
bne _0804B5E4
adds r3, 0x1
_0804B5E4:
adds r6, r4, 0x1
cmp r5, 0x1D
bgt _0804B606
adds r0, r5, 0
adds r1, r6, 0
str r2, [sp, 0x8]
str r3, [sp, 0xC]
bl GetTile
ldrh r1, [r0]
mov r0, r8
ands r0, r1
ldr r2, [sp, 0x8]
ldr r3, [sp, 0xC]
cmp r0, 0x1
bne _0804B606
adds r3, 0x1
_0804B606:
cmp r3, 0x2
ble _0804B612
ldrh r1, [r2]
movs r0, 0x8
orrs r0, r1
strh r0, [r2]
_0804B612:
adds r4, r6, 0
cmp r4, r10
blt _0804B55A
_0804B618:
mov r5, r9
ldr r0, [sp, 0x4]
cmp r5, r0
blt _0804B54C
_0804B620:
add sp, 0x10
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0804B630: .4byte 0x0000fffb
thumb_func_end sub_804B534
thumb_func_start sub_804B634
sub_804B634:

View File

@ -372,7 +372,8 @@ typedef struct Dungeon
u16 unk12BEC[9];
u16 unk12BFE[19];
u8 unk12C24[0x930];
u16 unk13554[12];
u16 unk13554[10];
OpenedFile *unk13568;
u8 unk1356C;
u8 fill1356D[0x13570 - 0x1356D];
/* 0x13570 */ u8 unk13570;

View File

@ -228,7 +228,8 @@ SECTIONS {
src/dungeon_ai_item_weight.o(.text);
src/dungeon_map_access.o(.text);
src/tile_types.o(.text);
asm/code_804AFAC.o(.text);
src/code_804AFAC_1.o(.text);
asm/code_804AFAC.o(.text);
src/code_804AFAC.o(.text);
asm/code_804FD30.o(.text);
src/dungeon_message.o(.text);

971
src/code_804AFAC_1.c Normal file
View File

@ -0,0 +1,971 @@
#include "global.h"
#include "file_system.h"
#include "tile_types.h"
#include "dungeon_map_access.h"
#include "dungeon_random.h"
#include "structs/str_dungeon.h"
#include "structs/map.h"
extern const u8 gUnknown_80F6DCC[];
extern struct FileArchive gDungeonFileArchive;
extern u8 gUnknown_202F1AA;
extern u8 gUnknown_202F1AB;
extern u8 gUnknown_202F1AC;
extern u8 gUnknown_202F1A8;
extern u8 gUnknown_202F1B4;
extern u8 gUnknown_202F1AE;
extern u8 gUnknown_202F1AD;
extern u8 gUnknown_202F1A9;
extern u16 gUnknown_202F1B0;
extern s32 gUnknown_202F1C8;
extern s32 gUnknown_202F1D0;
extern Position gUnknown_202F1D8;
struct UnkStruct_202F1B8
{
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
};
extern struct UnkStruct_202F1B8 gUnknown_202F1B8;
extern void sub_804FD30(void);
extern void sub_804FD30(void);
extern void sub_80518F0(void);
extern void sub_804FCCC(void);
extern void sub_804C918(void);
extern void sub_804FBE8(void);
extern void sub_804FC74(void);
extern void sub_804E9DC(void);
extern void sub_804C9D0(void);
extern u8 sub_8043D10();
extern bool8 sub_8050C30(s32 a0, s32 a1, u8 a2);
extern void sub_806C330(s32 a0, s32 a1, s16 a2, u8 a3);
extern void sub_804B534(s32 a0, s32 a1, s32 a2, s32 a3);
bool8 sub_804C70C(s32, UnkDungeonGlobal_unk1C574 *);
void sub_804B634(s32 a0, s32 a1, UnkDungeonGlobal_unk1C574 *a2);
void sub_804B72C(UnkDungeonGlobal_unk1C574 *a0);
void sub_804BC80(UnkDungeonGlobal_unk1C574 *a0);
void sub_804C0A8(UnkDungeonGlobal_unk1C574 *a0);
void sub_804C190(UnkDungeonGlobal_unk1C574 *a0);
void sub_804C2F4(UnkDungeonGlobal_unk1C574 *a0);
void sub_8051654(UnkDungeonGlobal_unk1C574 *a0);
void sub_80506F0(s32 a0, UnkDungeonGlobal_unk1C574 *a1);
void sub_804FF08(UnkDungeonGlobal_unk1C574 *a0, bool8 a1);
void sub_8050438(UnkDungeonGlobal_unk1C574 *a0, bool8 a1);
// Some weird-ass regswap prevents the function from being matched - https://decomp.me/scratch/9SUV3
#ifdef NONMATCHING
void sub_804AFAC(void)
{
s32 x, y;
s32 i, j, k;
bool8 r10 = FALSE;
UnkDungeonGlobal_unk1C574 *unkPtr = &gDungeon->unk1C574;
gDungeon->unk13568 = OpenFileAndGetFileDataPtr(gUnknown_80F6DCC, &gDungeonFileArchive);
gUnknown_202F1AA = 0;
gUnknown_202F1AB = 0;
gUnknown_202F1AC = 0;
gUnknown_202F1A8 = (gDungeonWaterType[gDungeon->tileset] == DUNGEON_WATER_TYPE_WATER);
gUnknown_202F1B4 = 0xFF;
gUnknown_202F1AE = 0;
gUnknown_202F1B0 = unkPtr->unk7;
gUnknown_202F1B2 = unkPtr->unk8;
gUnknown_202F1AD = 1;
gUnknown_202F1B8.unk0 = -1;
gUnknown_202F1B8.unk8 = -1;
gUnknown_202F1B8.unk4 = -1;
gUnknown_202F1B8.unkC = -1;
sub_804FD30();
gDungeon->unk664 = unkPtr->unk6;
gDungeon->unk3A09 = 0;
gDungeon->unk3A0A = 0;
gUnknown_202F1C8 = unkPtr->unkC;
for (i = 0; i < 10; i++) {
bool32 r4 = 0;
gDungeon->unkE218.x = -1;
gDungeon->unkE218.y = -1;
gDungeon->unkE21C.x = -1;
gDungeon->unkE21C.y = -1;
for (j = 0; j < 10; j++) {
gDungeon->unk3A16 = j;
if (j > 0) {
gUnknown_202F1C8 = 0;
}
gUnknown_202F1A9 = 0;
gUnknown_202F1D8.x = -1;
gUnknown_202F1D8.y = -1;
sub_804FD30();
gDungeon->unkE218.x = -1;
gDungeon->unkE218.y = -1;
gDungeon->unk3A08 = 0;
if (gDungeon->bossBattleIndex != 0) {
if (sub_804C70C(gDungeon->bossBattleIndex, unkPtr)) {
break;
}
}
else {
u8 r7 = unkPtr->unk0;
k = 32;
while (1) {
if (r7 != 8) {
x = DungeonRandRange(2, 9);
y = DungeonRandRange(2, 8);
}
else {
x = DungeonRandRange(2, 5);
y = DungeonRandRange(2, 4);
}
if (x <= 6 && y <= 4) {
break;
}
if (--k == 0) {
x = 4;
y = 4;
break;
}
}
if (DUNGEON_MAX_SIZE_X / x < 8) {
x = 1;
}
if (DUNGEON_MAX_SIZE_Y / y < 8) {
y = 1;
}
gDungeon->unk3A08 = 0;
gDungeon->unk3A0C = 0xFF;
gUnknown_202F1D0 = r7;
switch (r7 & 0xF) {
case 1:
y = DungeonRandInt(2) + 2;
gUnknown_202F1AE = 1;
sub_804B634(4, y, unkPtr);
r10 = TRUE;
break;
case 11:
y = DungeonRandInt(2) + 2;
gUnknown_202F1AE = 2;
sub_804B634(4, y, unkPtr);
r10 = TRUE;
break;
case 0:
default:
sub_804B634(x, y, unkPtr);
r10 = TRUE;
break;
case 2:
sub_804C918();
gDungeon->unk3A08 = 1;
break;
case 3:
sub_804B72C(unkPtr);
r10 = TRUE;
break;
case 4:
sub_804BC80(unkPtr);
r10 = TRUE;
break;
case 5:
sub_804C9D0();
gDungeon->unk3A08 = 1;
break;
case 6:
sub_804C0A8(unkPtr);
r10 = TRUE;
break;
case 7:
sub_804C190(unkPtr);
break;
case 9:
sub_804C2F4(unkPtr);
break;
case 10:
sub_804B634(x, y, unkPtr);
r10 = TRUE;
break;
}
}
sub_80518F0();
sub_804FCCC();
if (gUnknown_202F1A9 == 0) {
s32 countSp = 0;
u8 spArray[64];
s32 countRooms = 0;
for (k = 0; k < 64; k++) {
spArray[k] = 0;
}
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
Tile *tile = GetTile(x, y);
if ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL && tile->room <= 240) {
countRooms++;
if (tile->room < 64) {
spArray[tile->room] = 1;
}
}
}
}
countSp = 0;
// In order to match, 'y' had to be re-used as an iterator var
for (y = 0; y < 64; y++) {
if (spArray[y]) {
countSp++;
}
}
if (countRooms >= 30 && countSp > 1) {
break;
}
}
}
if (j == 10) {
gUnknown_202F1D8.x = -1;
gUnknown_202F1D8.y = -1;
sub_804C918();
gDungeon->unk3A08 = 1;
}
sub_804E9DC();
if (r10) {
sub_80506F0(1, unkPtr);
}
r4 = (DungeonRandInt(100) < unkPtr->unk19);
sub_804FF08(unkPtr, r4);
sub_8050438(unkPtr, r4);
sub_804FBE8();
if (gDungeon->unkE218.x != -1 && gDungeon->unkE218.y != -1)
{
if (sub_8043D10() == 1)
break;
if (gDungeon->unkE21C.x != -1 && gDungeon->unkE21C.y != -1 && sub_8050C30(gDungeon->unkE21C.x, gDungeon->unkE21C.y, 0))
break;
}
}
if (i == 10) {
gUnknown_202F1D8.x = -1;
gUnknown_202F1D8.y = -1;
sub_804FD30();
sub_804C918();
gDungeon->unk3A08 = 1;
sub_804E9DC();
sub_804FF08(unkPtr, FALSE);
sub_8050438(unkPtr, FALSE);
sub_804FBE8();
}
if (gUnknown_202F1D8.x >= 0 && gUnknown_202F1D8.y >= 0) {
sub_806C330(gUnknown_202F1D8.x, gUnknown_202F1D8.y, 380, 0);
}
if (gUnknown_202F1B8.unk0 >= 0) {
sub_8051654(unkPtr);
gDungeon->unk3A0A = 1;
}
else {
gDungeon->unk3A0A = 0;
}
sub_804B534(0, 0, DUNGEON_MAX_SIZE_X, DUNGEON_MAX_SIZE_Y);
if (gUnknown_202F1A8 != 0) {
sub_804FC74();
}
CloseFile(gDungeon->unk13568);
}
#else
void NAKED sub_804AFAC(void)
{
asm_unified(" push {r4-r7,lr}\n"
" mov r7, r10\n"
" mov r6, r9\n"
" mov r5, r8\n"
" push {r5-r7}\n"
" sub sp, 0x44\n"
" movs r0, 0\n"
" mov r10, r0\n"
" ldr r4, _0804B0E8\n"
" ldr r0, [r4]\n"
" ldr r1, _0804B0EC\n"
" adds r1, r0\n"
" mov r8, r1\n"
" ldr r0, _0804B0F0\n"
" ldr r1, _0804B0F4\n"
" bl OpenFileAndGetFileDataPtr\n"
" ldr r2, [r4]\n"
" ldr r3, _0804B0F8\n"
" adds r1, r2, r3\n"
" str r0, [r1]\n"
" ldr r0, _0804B0FC\n"
" mov r6, r10\n"
" strb r6, [r0]\n"
" ldr r0, _0804B100\n"
" strb r6, [r0]\n"
" ldr r0, _0804B104\n"
" strb r6, [r0]\n"
" ldr r5, _0804B108\n"
" movs r3, 0\n"
" ldr r1, _0804B10C\n"
" ldr r0, _0804B110\n"
" adds r2, r0\n"
" movs r6, 0\n"
" ldrsh r0, [r2, r6]\n"
" adds r0, r1\n"
" ldrb r0, [r0]\n"
" cmp r0, 0x2\n"
" bne _0804AFFC\n"
" movs r3, 0x1\n"
"_0804AFFC:\n"
" strb r3, [r5]\n"
" ldr r1, _0804B114\n"
" movs r0, 0xFF\n"
" strb r0, [r1]\n"
" ldr r0, _0804B118\n"
" mov r1, r10\n"
" strb r1, [r0]\n"
" ldr r1, _0804B11C\n"
" mov r2, r8\n"
" ldrb r0, [r2, 0x7]\n"
" strh r0, [r1]\n"
" ldr r1, _0804B120\n"
" ldrb r0, [r2, 0x8]\n"
" strh r0, [r1]\n"
" ldr r1, _0804B124\n"
" movs r0, 0x1\n"
" strb r0, [r1]\n"
" ldr r1, _0804B128\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" str r0, [r1]\n"
" str r0, [r1, 0x8]\n"
" str r0, [r1, 0x4]\n"
" str r0, [r1, 0xC]\n"
" bl sub_804FD30\n"
" ldr r3, [r4]\n"
" mov r6, r8\n"
" ldrb r2, [r6, 0x6]\n"
" ldr r1, _0804B12C\n"
" adds r0, r3, r1\n"
" movs r1, 0\n"
" strh r2, [r0]\n"
" ldr r2, _0804B130\n"
" adds r0, r3, r2\n"
" strb r1, [r0]\n"
" ldr r0, [r4]\n"
" ldr r3, _0804B134\n"
" adds r0, r3\n"
" strb r1, [r0]\n"
" ldr r1, _0804B138\n"
" mov r6, r8\n"
" ldrb r0, [r6, 0xC]\n"
" str r0, [r1]\n"
" movs r0, 0\n"
" str r0, [sp, 0x40]\n"
"_0804B058:\n"
" ldr r0, _0804B0E8\n"
" ldr r2, [r0]\n"
" ldr r3, _0804B13C\n"
" adds r1, r2, r3\n"
" ldr r0, _0804B140\n"
" strh r0, [r1]\n"
" ldr r6, _0804B144\n"
" adds r1, r2, r6\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" strh r0, [r1]\n"
" ldr r0, _0804B148\n"
" adds r1, r2, r0\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" strh r0, [r1]\n"
" ldr r1, _0804B14C\n"
" adds r2, r1\n"
" strh r0, [r2]\n"
" movs r2, 0\n"
" mov r9, r2\n"
"_0804B082:\n"
" ldr r4, _0804B0E8\n"
" ldr r0, [r4]\n"
" ldr r3, _0804B150\n"
" adds r0, r3\n"
" movs r5, 0\n"
" movs r1, 0\n"
" mov r6, r9\n"
" strh r6, [r0]\n"
" mov r0, r9\n"
" cmp r0, 0\n"
" ble _0804B09C\n"
" ldr r0, _0804B138\n"
" str r1, [r0]\n"
"_0804B09C:\n"
" ldr r0, _0804B154\n"
" strb r5, [r0]\n"
" ldr r1, _0804B158\n"
" ldr r0, _0804B140\n"
" strh r0, [r1]\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" strh r0, [r1, 0x2]\n"
" bl sub_804FD30\n"
" ldr r1, [r4]\n"
" ldr r3, _0804B13C\n"
" adds r2, r1, r3\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" strh r0, [r2]\n"
" ldr r6, _0804B144\n"
" adds r2, r1, r6\n"
" strh r0, [r2]\n"
" ldr r0, _0804B15C\n"
" adds r1, r0\n"
" strb r5, [r1]\n"
" ldr r0, [r4]\n"
" ldr r2, _0804B160\n"
" adds r1, r0, r2\n"
" movs r3, 0\n"
" ldrsh r0, [r1, r3]\n"
" cmp r0, 0\n"
" beq _0804B164\n"
" mov r1, r8\n"
" bl sub_804C70C\n"
" lsls r0, 24\n"
" cmp r0, 0\n"
" beq _0804B0E4\n"
" b _0804B376\n"
"_0804B0E4:\n"
" b _0804B2F6\n"
" .align 2, 0\n"
"_0804B0E8: .4byte gDungeon\n"
"_0804B0EC: .4byte 0x0001c574\n"
"_0804B0F0: .4byte gUnknown_80F6DCC\n"
"_0804B0F4: .4byte gDungeonFileArchive\n"
"_0804B0F8: .4byte 0x00013568\n"
"_0804B0FC: .4byte gUnknown_202F1AA\n"
"_0804B100: .4byte gUnknown_202F1AB\n"
"_0804B104: .4byte gUnknown_202F1AC\n"
"_0804B108: .4byte gUnknown_202F1A8\n"
"_0804B10C: .4byte gDungeonWaterType\n"
"_0804B110: .4byte 0x00003a0e\n"
"_0804B114: .4byte gUnknown_202F1B4\n"
"_0804B118: .4byte gUnknown_202F1AE\n"
"_0804B11C: .4byte gUnknown_202F1B0\n"
"_0804B120: .4byte gUnknown_202F1B2\n"
"_0804B124: .4byte gUnknown_202F1AD\n"
"_0804B128: .4byte gUnknown_202F1B8\n"
"_0804B12C: .4byte 0x00000664\n"
"_0804B130: .4byte 0x00003a09\n"
"_0804B134: .4byte 0x00003a0a\n"
"_0804B138: .4byte gUnknown_202F1C8\n"
"_0804B13C: .4byte 0x0000e218\n"
"_0804B140: .4byte 0x0000ffff\n"
"_0804B144: .4byte 0x0000e21a\n"
"_0804B148: .4byte 0x0000e21c\n"
"_0804B14C: .4byte 0x0000e21e\n"
"_0804B150: .4byte 0x00003a16\n"
"_0804B154: .4byte gUnknown_202F1A9\n"
"_0804B158: .4byte gUnknown_202F1D8\n"
"_0804B15C: .4byte 0x00003a08\n"
"_0804B160: .4byte 0x00003a14\n"
"_0804B164:\n"
" mov r0, r8\n"
" ldrb r7, [r0]\n"
" movs r6, 0x20\n"
"_0804B16A:\n"
" cmp r7, 0x8\n"
" beq _0804B17E\n"
" movs r0, 0x2\n"
" movs r1, 0x9\n"
" bl DungeonRandRange\n"
" adds r5, r0, 0\n"
" movs r0, 0x2\n"
" movs r1, 0x8\n"
" b _0804B18C\n"
"_0804B17E:\n"
" movs r0, 0x2\n"
" movs r1, 0x5\n"
" bl DungeonRandRange\n"
" adds r5, r0, 0\n"
" movs r0, 0x2\n"
" movs r1, 0x4\n"
"_0804B18C:\n"
" bl DungeonRandRange\n"
" adds r4, r0, 0\n"
" cmp r5, 0x6\n"
" bgt _0804B19A\n"
" cmp r4, 0x4\n"
" ble _0804B1A4\n"
"_0804B19A:\n"
" subs r6, 0x1\n"
" cmp r6, 0\n"
" bne _0804B16A\n"
" movs r5, 0x4\n"
" movs r4, 0x4\n"
"_0804B1A4:\n"
" movs r0, 0x38\n"
" adds r1, r5, 0\n"
" bl __divsi3\n"
" cmp r0, 0x7\n"
" bgt _0804B1B2\n"
" movs r5, 0x1\n"
"_0804B1B2:\n"
" movs r0, 0x20\n"
" adds r1, r4, 0\n"
" bl __divsi3\n"
" cmp r0, 0x7\n"
" bgt _0804B1C0\n"
" movs r4, 0x1\n"
"_0804B1C0:\n"
" ldr r2, _0804B1EC\n"
" ldr r0, [r2]\n"
" ldr r1, _0804B1F0\n"
" adds r0, r1\n"
" movs r1, 0\n"
" strb r1, [r0]\n"
" ldr r0, [r2]\n"
" ldr r2, _0804B1F4\n"
" adds r0, r2\n"
" movs r1, 0xFF\n"
" strb r1, [r0]\n"
" ldr r0, _0804B1F8\n"
" str r7, [r0]\n"
" movs r0, 0xF\n"
" ands r0, r7\n"
" cmp r0, 0xB\n"
" bhi _0804B274\n"
" lsls r0, 2\n"
" ldr r1, _0804B1FC\n"
" adds r0, r1\n"
" ldr r0, [r0]\n"
" mov pc, r0\n"
" .align 2, 0\n"
"_0804B1EC: .4byte gDungeon\n"
"_0804B1F0: .4byte 0x00003a08\n"
"_0804B1F4: .4byte 0x00003a0c\n"
"_0804B1F8: .4byte gUnknown_202F1D0\n"
"_0804B1FC: .4byte _0804B200\n"
" .align 2, 0\n"
"_0804B200:\n"
" .4byte _0804B274\n"
" .4byte _0804B230\n"
" .4byte _0804B280\n"
" .4byte _0804B298\n"
" .4byte _0804B2A4\n"
" .4byte _0804B2B0\n"
" .4byte _0804B2CC\n"
" .4byte _0804B2D8\n"
" .4byte _0804B274\n"
" .4byte _0804B2E0\n"
" .4byte _0804B2E8\n"
" .4byte _0804B250\n"
"_0804B230:\n"
" movs r0, 0x2\n"
" bl DungeonRandInt\n"
" adds r4, r0, 0x2\n"
" ldr r1, _0804B24C\n"
" movs r0, 0x1\n"
" strb r0, [r1]\n"
" movs r0, 0x4\n"
" adds r1, r4, 0\n"
" mov r2, r8\n"
" bl sub_804B634\n"
" b _0804B2AA\n"
" .align 2, 0\n"
"_0804B24C: .4byte gUnknown_202F1AE\n"
"_0804B250:\n"
" movs r0, 0x2\n"
" bl DungeonRandInt\n"
" adds r4, r0, 0x2\n"
" ldr r1, _0804B270\n"
" movs r0, 0x2\n"
" strb r0, [r1]\n"
" movs r0, 0x4\n"
" adds r1, r4, 0\n"
" mov r2, r8\n"
" bl sub_804B634\n"
" movs r6, 0x1\n"
" mov r10, r6\n"
" b _0804B2F6\n"
" .align 2, 0\n"
"_0804B270: .4byte gUnknown_202F1AE\n"
"_0804B274:\n"
" adds r0, r5, 0\n"
" adds r1, r4, 0\n"
" mov r2, r8\n"
" bl sub_804B634\n"
" b _0804B2D2\n"
"_0804B280:\n"
" bl sub_804C918\n"
" ldr r0, _0804B290\n"
" ldr r0, [r0]\n"
" ldr r1, _0804B294\n"
" adds r0, r1\n"
" b _0804B2BC\n"
" .align 2, 0\n"
"_0804B290: .4byte gDungeon\n"
"_0804B294: .4byte 0x00003a08\n"
"_0804B298:\n"
" mov r0, r8\n"
" bl sub_804B72C\n"
" movs r2, 0x1\n"
" mov r10, r2\n"
" b _0804B2F6\n"
"_0804B2A4:\n"
" mov r0, r8\n"
" bl sub_804BC80\n"
"_0804B2AA:\n"
" movs r3, 0x1\n"
" mov r10, r3\n"
" b _0804B2F6\n"
"_0804B2B0:\n"
" bl sub_804C9D0\n"
" ldr r0, _0804B2C4\n"
" ldr r0, [r0]\n"
" ldr r6, _0804B2C8\n"
" adds r0, r6\n"
"_0804B2BC:\n"
" movs r1, 0x1\n"
" strb r1, [r0]\n"
" b _0804B2F6\n"
" .align 2, 0\n"
"_0804B2C4: .4byte gDungeon\n"
"_0804B2C8: .4byte 0x00003a08\n"
"_0804B2CC:\n"
" mov r0, r8\n"
" bl sub_804C0A8\n"
"_0804B2D2:\n"
" movs r0, 0x1\n"
" mov r10, r0\n"
" b _0804B2F6\n"
"_0804B2D8:\n"
" mov r0, r8\n"
" bl sub_804C190\n"
" b _0804B2F6\n"
"_0804B2E0:\n"
" mov r0, r8\n"
" bl sub_804C2F4\n"
" b _0804B2F6\n"
"_0804B2E8:\n"
" adds r0, r5, 0\n"
" adds r1, r4, 0\n"
" mov r2, r8\n"
" bl sub_804C53C\n"
" movs r1, 0x1\n"
" mov r10, r1\n"
"_0804B2F6:\n"
" bl sub_80518F0\n"
" bl sub_804FCCC\n"
" ldr r0, _0804B4B4\n"
" ldrb r0, [r0]\n"
" cmp r0, 0\n"
" bne _0804B36A\n"
" movs r7, 0\n"
" movs r1, 0\n"
" mov r0, sp\n"
" adds r0, 0x3F\n"
"_0804B30E:\n"
" strb r1, [r0]\n"
" subs r0, 0x1\n"
" cmp r0, sp\n"
" bge _0804B30E\n"
" movs r5, 0\n"
"_0804B318:\n"
" movs r4, 0\n"
" adds r6, r5, 0x1\n"
"_0804B31C:\n"
" adds r0, r5, 0\n"
" adds r1, r4, 0\n"
" bl GetTile\n"
" adds r1, r0, 0\n"
" ldrh r0, [r1]\n"
" movs r2, 0x3\n"
" ands r2, r0\n"
" cmp r2, 0x1\n"
" bne _0804B340\n"
" ldrb r0, [r1, 0x9]\n"
" cmp r0, 0xF0\n"
" bhi _0804B340\n"
" adds r7, 0x1\n"
" cmp r0, 0x3F\n"
" bhi _0804B340\n"
" add r0, sp\n"
" strb r2, [r0]\n"
"_0804B340:\n"
" adds r4, 0x1\n"
" cmp r4, 0x1F\n"
" ble _0804B31C\n"
" adds r5, r6, 0\n"
" cmp r5, 0x37\n"
" ble _0804B318\n"
" movs r1, 0\n"
" movs r4, 0\n"
"_0804B350:\n"
" mov r2, sp\n"
" adds r0, r2, r4\n"
" ldrb r0, [r0]\n"
" cmp r0, 0\n"
" beq _0804B35C\n"
" adds r1, 0x1\n"
"_0804B35C:\n"
" adds r4, 0x1\n"
" cmp r4, 0x3F\n"
" ble _0804B350\n"
" cmp r7, 0x1D\n"
" ble _0804B36A\n"
" cmp r1, 0x1\n"
" bgt _0804B376\n"
"_0804B36A:\n"
" movs r3, 0x1\n"
" add r9, r3\n"
" mov r6, r9\n"
" cmp r6, 0x9\n"
" bgt _0804B376\n"
" b _0804B082\n"
"_0804B376:\n"
" mov r0, r9\n"
" cmp r0, 0xA\n"
" bne _0804B398\n"
" ldr r1, _0804B4B8\n"
" ldr r0, _0804B4BC\n"
" strh r0, [r1]\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" strh r0, [r1, 0x2]\n"
" bl sub_804C918\n"
" ldr r0, _0804B4C0\n"
" ldr r0, [r0]\n"
" ldr r1, _0804B4C4\n"
" adds r0, r1\n"
" movs r1, 0x1\n"
" strb r1, [r0]\n"
"_0804B398:\n"
" bl sub_804E9DC\n"
" mov r2, r10\n"
" cmp r2, 0\n"
" beq _0804B3AA\n"
" movs r0, 0x1\n"
" mov r1, r8\n"
" bl sub_80506F0\n"
"_0804B3AA:\n"
" movs r0, 0x64\n"
" bl DungeonRandInt\n"
" movs r4, 0\n"
" mov r3, r8\n"
" ldrb r3, [r3, 0x19]\n"
" cmp r0, r3\n"
" bge _0804B3BC\n"
" movs r4, 0x1\n"
"_0804B3BC:\n"
" mov r0, r8\n"
" adds r1, r4, 0\n"
" bl sub_804FF08\n"
" mov r0, r8\n"
" adds r1, r4, 0\n"
" bl sub_8050438\n"
" bl sub_804FBE8\n"
" ldr r5, _0804B4C0\n"
" ldr r1, [r5]\n"
" ldr r6, _0804B4C8\n"
" adds r0, r1, r6\n"
" movs r2, 0\n"
" ldrsh r0, [r0, r2]\n"
" movs r4, 0x1\n"
" negs r4, r4\n"
" cmp r0, r4\n"
" beq _0804B42A\n"
" ldr r3, _0804B4CC\n"
" adds r0, r1, r3\n"
" movs r6, 0\n"
" ldrsh r0, [r0, r6]\n"
" cmp r0, r4\n"
" beq _0804B42A\n"
" bl sub_8043D10\n"
" lsls r0, 24\n"
" lsrs r0, 24\n"
" cmp r0, 0x1\n"
" beq _0804B436\n"
" ldr r1, [r5]\n"
" ldr r0, _0804B4D0\n"
" adds r2, r1, r0\n"
" movs r3, 0\n"
" ldrsh r0, [r2, r3]\n"
" cmp r0, r4\n"
" beq _0804B42A\n"
" ldr r6, _0804B4D4\n"
" adds r1, r6\n"
" movs r3, 0\n"
" ldrsh r0, [r1, r3]\n"
" cmp r0, r4\n"
" beq _0804B42A\n"
" movs r6, 0\n"
" ldrsh r0, [r2, r6]\n"
" movs r2, 0\n"
" ldrsh r1, [r1, r2]\n"
" movs r2, 0\n"
" bl sub_8050C30\n"
" lsls r0, 24\n"
" cmp r0, 0\n"
" bne _0804B436\n"
"_0804B42A:\n"
" ldr r3, [sp, 0x40]\n"
" adds r3, 0x1\n"
" str r3, [sp, 0x40]\n"
" cmp r3, 0x9\n"
" bgt _0804B436\n"
" b _0804B058\n"
"_0804B436:\n"
" ldr r6, [sp, 0x40]\n"
" cmp r6, 0xA\n"
" bne _0804B474\n"
" ldr r1, _0804B4B8\n"
" ldr r0, _0804B4BC\n"
" strh r0, [r1]\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" strh r0, [r1, 0x2]\n"
" bl sub_804FD30\n"
" bl sub_804C918\n"
" ldr r0, _0804B4C0\n"
" ldr r0, [r0]\n"
" ldr r1, _0804B4C4\n"
" adds r0, r1\n"
" movs r1, 0x1\n"
" strb r1, [r0]\n"
" bl sub_804E9DC\n"
" mov r0, r8\n"
" movs r1, 0\n"
" bl sub_804FF08\n"
" mov r0, r8\n"
" movs r1, 0\n"
" bl sub_8050438\n"
" bl sub_804FBE8\n"
"_0804B474:\n"
" ldr r1, _0804B4B8\n"
" movs r2, 0\n"
" ldrsh r0, [r1, r2]\n"
" cmp r0, 0\n"
" blt _0804B498\n"
" movs r3, 0x2\n"
" ldrsh r0, [r1, r3]\n"
" cmp r0, 0\n"
" blt _0804B498\n"
" movs r6, 0\n"
" ldrsh r0, [r1, r6]\n"
" movs r2, 0x2\n"
" ldrsh r1, [r1, r2]\n"
" movs r2, 0xBE\n"
" lsls r2, 1\n"
" movs r3, 0\n"
" bl sub_806C330\n"
"_0804B498:\n"
" ldr r0, _0804B4D8\n"
" ldr r0, [r0]\n"
" cmp r0, 0\n"
" blt _0804B4E0\n"
" mov r0, r8\n"
" bl sub_8051654\n"
" ldr r0, _0804B4C0\n"
" ldr r0, [r0]\n"
" ldr r3, _0804B4DC\n"
" adds r0, r3\n"
" movs r1, 0x1\n"
" b _0804B4EA\n"
" .align 2, 0\n"
"_0804B4B4: .4byte gUnknown_202F1A9\n"
"_0804B4B8: .4byte gUnknown_202F1D8\n"
"_0804B4BC: .4byte 0x0000ffff\n"
"_0804B4C0: .4byte gDungeon\n"
"_0804B4C4: .4byte 0x00003a08\n"
"_0804B4C8: .4byte 0x0000e218\n"
"_0804B4CC: .4byte 0x0000e21a\n"
"_0804B4D0: .4byte 0x0000e21c\n"
"_0804B4D4: .4byte 0x0000e21e\n"
"_0804B4D8: .4byte gUnknown_202F1B8\n"
"_0804B4DC: .4byte 0x00003a0a\n"
"_0804B4E0:\n"
" ldr r0, _0804B524\n"
" ldr r0, [r0]\n"
" ldr r6, _0804B528\n"
" adds r0, r6\n"
" movs r1, 0\n"
"_0804B4EA:\n"
" strb r1, [r0]\n"
" movs r0, 0\n"
" movs r1, 0\n"
" movs r2, 0x38\n"
" movs r3, 0x20\n"
" bl sub_804B534\n"
" ldr r0, _0804B52C\n"
" ldrb r0, [r0]\n"
" cmp r0, 0\n"
" beq _0804B504\n"
" bl sub_804FC74\n"
"_0804B504:\n"
" ldr r0, _0804B524\n"
" ldr r0, [r0]\n"
" ldr r1, _0804B530\n"
" adds r0, r1\n"
" ldr r0, [r0]\n"
" bl CloseFile\n"
" add sp, 0x44\n"
" pop {r3-r5}\n"
" mov r8, r3\n"
" mov r9, r4\n"
" mov r10, r5\n"
" pop {r4-r7}\n"
" pop {r0}\n"
" bx r0\n"
" .align 2, 0\n"
"_0804B524: .4byte gDungeon\n"
"_0804B528: .4byte 0x00003a0a\n"
"_0804B52C: .4byte gUnknown_202F1A8\n"
"_0804B530: .4byte 0x00013568\n");
}
#endif // NONMATCHING
void sub_804B534(s32 xStart, s32 yStart, s32 maxX, s32 maxY)
{
s32 x, y;
for (x = xStart; x < maxX; x++) {
for (y = yStart; y < maxY; y++) {
s32 unkCount = 0;
Tile *tile = GetTileSafe(x, y);
tile->terrainType &= ~(TERRAIN_TYPE_UNK_2);
if (tile->room == CORRIDOR_ROOM && ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL)) {
if (x > 0 && ((GetTile(x - 1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL))
unkCount++;
if (y > 0 && ((GetTile(x, y - 1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL))
unkCount++;
if (x < DUNGEON_MAX_SIZE_X - 2 && ((GetTile(x + 1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL))
unkCount++;
// BUG: It should check for y and not x. Not sure if it has any effect, because this function is called only once with maxY equal to DUNGEON_MAX_SIZE_Y
if (x < DUNGEON_MAX_SIZE_Y - 2 && ((GetTile(x, y + 1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_NORMAL))
unkCount++;
if (unkCount > 2) {
tile->terrainType |= TERRAIN_TYPE_NATURAL_JUNCTION;
}
}
}
}
}
//