diff --git a/asm/dungeon_map_access.s b/asm/dungeon_map_access.s deleted file mode 100644 index 7459c5d01..000000000 --- a/asm/dungeon_map_access.s +++ /dev/null @@ -1,1940 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8049BB0 -sub_8049BB0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x44 - mov r10, r0 - str r1, [sp, 0x40] - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r1, 0 - adds r0, 0x1 - mov r9, r0 - mov r0, r10 - mov r1, r9 - bl GetTile - ldrh r1, [r0] - movs r4, 0x3 - adds r0, r4, 0 - ands r0, r1 - add r6, sp, 0x18 - str r0, [sp, 0x18] - mov r5, r10 - adds r5, 0x1 - adds r0, r5, 0 - mov r1, r9 - bl GetTile - ldrh r1, [r0] - adds r0, r4, 0 - ands r0, r1 - str r0, [r6, 0x4] - adds r0, r5, 0 - ldr r1, [sp, 0x40] - bl GetTile - ldrh r1, [r0] - adds r0, r4, 0 - ands r0, r1 - str r0, [r6, 0x8] - ldr r0, [sp, 0x40] - subs r0, 0x1 - mov r8, r0 - adds r0, r5, 0 - mov r1, r8 - bl GetTile - ldrh r1, [r0] - adds r0, r4, 0 - ands r0, r1 - str r0, [r6, 0xC] - mov r0, r10 - mov r1, r8 - bl GetTile - ldrh r1, [r0] - adds r0, r4, 0 - ands r0, r1 - str r0, [r6, 0x10] - subs r5, 0x2 - adds r0, r5, 0 - mov r1, r8 - bl GetTile - ldrh r1, [r0] - adds r0, r4, 0 - ands r0, r1 - str r0, [r6, 0x14] - adds r0, r5, 0 - ldr r1, [sp, 0x40] - bl GetTile - ldrh r1, [r0] - adds r0, r4, 0 - ands r0, r1 - str r0, [r6, 0x18] - adds r0, r5, 0 - mov r1, r9 - bl GetTile - ldrh r0, [r0] - ands r4, r0 - str r4, [r6, 0x1C] - ldr r1, [sp, 0x18] - cmp r1, 0x1 - bne _08049C6A - ldr r0, [sp] - orrs r0, r1 - str r0, [sp] -_08049C6A: - ldr r0, [r6, 0x8] - cmp r0, 0x1 - bne _08049C78 - ldr r0, [sp] - movs r1, 0x4 - orrs r0, r1 - str r0, [sp] -_08049C78: - ldr r0, [r6, 0x10] - cmp r0, 0x1 - bne _08049C86 - ldr r0, [sp] - movs r1, 0x10 - orrs r0, r1 - str r0, [sp] -_08049C86: - ldr r0, [r6, 0x18] - cmp r0, 0x1 - bne _08049C94 - ldr r0, [sp] - movs r1, 0x40 - orrs r0, r1 - str r0, [sp] -_08049C94: - ldr r2, [sp, 0x18] - cmp r2, 0 - beq _08049CAE - ldr r0, [r6, 0x4] - cmp r0, 0x1 - bne _08049CAE - ldr r0, [r6, 0x8] - cmp r0, 0 - beq _08049CC8 - ldr r0, [sp] - movs r1, 0x2 - orrs r0, r1 - str r0, [sp] -_08049CAE: - ldr r0, [r6, 0x8] - cmp r0, 0 - beq _08049CC8 - ldr r0, [r6, 0xC] - cmp r0, 0x1 - bne _08049CC8 - ldr r0, [r6, 0x10] - cmp r0, 0 - beq _08049CE2 - ldr r0, [sp] - movs r1, 0x8 - orrs r0, r1 - str r0, [sp] -_08049CC8: - ldr r0, [r6, 0x10] - cmp r0, 0 - beq _08049CE2 - ldr r0, [r6, 0x14] - cmp r0, 0x1 - bne _08049CE2 - ldr r0, [r6, 0x18] - cmp r0, 0 - beq _08049CFA - ldr r0, [sp] - movs r1, 0x20 - orrs r0, r1 - str r0, [sp] -_08049CE2: - ldr r0, [r6, 0x18] - cmp r0, 0 - beq _08049CFA - ldr r0, [r6, 0x1C] - cmp r0, 0x1 - bne _08049CFA - cmp r2, 0 - beq _08049CFA - ldr r0, [sp] - movs r1, 0x80 - orrs r0, r1 - str r0, [sp] -_08049CFA: - add r4, sp, 0x38 - movs r7, 0x1 - adds r2, r4, 0 - adds r1, r6, 0 - movs r5, 0 - movs r3, 0x7 -_08049D06: - ldr r0, [r1] - subs r0, 0x1 - cmp r0, 0x1 - bhi _08049D12 - strb r7, [r2] - b _08049D14 -_08049D12: - strb r5, [r2] -_08049D14: - adds r2, 0x1 - adds r1, 0x4 - subs r3, 0x1 - cmp r3, 0 - bge _08049D06 - ldrb r0, [r4] - cmp r0, 0 - beq _08049D2C - ldr r0, [sp, 0x4] - movs r1, 0x1 - orrs r0, r1 - str r0, [sp, 0x4] -_08049D2C: - ldrb r0, [r4, 0x2] - cmp r0, 0 - beq _08049D3A - ldr r0, [sp, 0x4] - movs r1, 0x4 - orrs r0, r1 - str r0, [sp, 0x4] -_08049D3A: - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _08049D48 - ldr r0, [sp, 0x4] - movs r1, 0x10 - orrs r0, r1 - str r0, [sp, 0x4] -_08049D48: - ldrb r0, [r4, 0x6] - cmp r0, 0 - beq _08049D56 - ldr r0, [sp, 0x4] - movs r1, 0x40 - orrs r0, r1 - str r0, [sp, 0x4] -_08049D56: - ldr r2, [sp, 0x18] - cmp r2, 0 - beq _08049D70 - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08049D70 - ldr r0, [r6, 0x8] - cmp r0, 0 - beq _08049D8A - ldr r0, [sp, 0x4] - movs r1, 0x2 - orrs r0, r1 - str r0, [sp, 0x4] -_08049D70: - ldr r0, [r6, 0x8] - cmp r0, 0 - beq _08049D8A - ldrb r0, [r4, 0x3] - cmp r0, 0 - beq _08049D8A - ldr r0, [r6, 0x10] - cmp r0, 0 - beq _08049DA4 - ldr r0, [sp, 0x4] - movs r1, 0x8 - orrs r0, r1 - str r0, [sp, 0x4] -_08049D8A: - ldr r0, [r6, 0x10] - cmp r0, 0 - beq _08049DA4 - ldrb r0, [r4, 0x5] - cmp r0, 0 - beq _08049DA4 - ldr r0, [r6, 0x18] - cmp r0, 0 - beq _08049DBC - ldr r0, [sp, 0x4] - movs r1, 0x20 - orrs r0, r1 - str r0, [sp, 0x4] -_08049DA4: - ldr r0, [r6, 0x18] - cmp r0, 0 - beq _08049DBC - ldrb r0, [r4, 0x7] - cmp r0, 0 - beq _08049DBC - cmp r2, 0 - beq _08049DC8 - ldr r0, [sp, 0x4] - movs r1, 0x80 - orrs r0, r1 - str r0, [sp, 0x4] -_08049DBC: - cmp r2, 0 - beq _08049DC8 - ldr r0, [sp, 0x8] - movs r1, 0x1 - orrs r0, r1 - str r0, [sp, 0x8] -_08049DC8: - ldr r0, [r6, 0x8] - cmp r0, 0 - beq _08049DD6 - ldr r0, [sp, 0x8] - movs r1, 0x4 - orrs r0, r1 - str r0, [sp, 0x8] -_08049DD6: - ldr r0, [r6, 0x10] - cmp r0, 0 - beq _08049DE4 - ldr r0, [sp, 0x8] - movs r1, 0x10 - orrs r0, r1 - str r0, [sp, 0x8] -_08049DE4: - ldr r0, [r6, 0x18] - cmp r0, 0 - beq _08049DF2 - ldr r0, [sp, 0x8] - movs r1, 0x40 - orrs r0, r1 - str r0, [sp, 0x8] -_08049DF2: - cmp r2, 0 - beq _08049E0A - ldr r0, [r6, 0x4] - cmp r0, 0 - beq _08049E0A - ldr r0, [r6, 0x8] - cmp r0, 0 - beq _08049E24 - ldr r0, [sp, 0x8] - movs r1, 0x2 - orrs r0, r1 - str r0, [sp, 0x8] -_08049E0A: - ldr r0, [r6, 0x8] - cmp r0, 0 - beq _08049E24 - ldr r0, [r6, 0xC] - cmp r0, 0 - beq _08049E24 - ldr r0, [r6, 0x10] - cmp r0, 0 - beq _08049E3E - ldr r0, [sp, 0x8] - movs r1, 0x8 - orrs r0, r1 - str r0, [sp, 0x8] -_08049E24: - ldr r0, [r6, 0x10] - cmp r0, 0 - beq _08049E3E - ldr r0, [r6, 0x14] - cmp r0, 0 - beq _08049E3E - ldr r0, [r6, 0x18] - cmp r0, 0 - beq _08049E56 - ldr r0, [sp, 0x8] - movs r1, 0x20 - orrs r0, r1 - str r0, [sp, 0x8] -_08049E3E: - ldr r0, [r6, 0x18] - cmp r0, 0 - beq _08049E56 - ldr r0, [r6, 0x1C] - cmp r0, 0 - beq _08049E56 - cmp r2, 0 - beq _08049E56 - ldr r0, [sp, 0x8] - movs r1, 0x80 - orrs r0, r1 - str r0, [sp, 0x8] -_08049E56: - movs r0, 0xFF - str r0, [sp, 0xC] - mov r0, r10 - cmp r0, 0x1 - bgt _08049E64 - movs r0, 0x1F - str r0, [sp, 0xC] -_08049E64: - ldr r0, [sp, 0x40] - cmp r0, 0x1 - bgt _08049E74 - ldr r0, [sp, 0xC] - movs r1, 0x39 - negs r1, r1 - ands r0, r1 - str r0, [sp, 0xC] -_08049E74: - mov r0, r10 - cmp r0, 0x35 - ble _08049E84 - ldr r0, [sp, 0xC] - movs r1, 0xF - negs r1, r1 - ands r0, r1 - str r0, [sp, 0xC] -_08049E84: - ldr r0, [sp, 0x40] - cmp r0, 0x1D - ble _08049E94 - ldr r0, [sp, 0xC] - movs r1, 0x84 - negs r1, r1 - ands r0, r1 - str r0, [sp, 0xC] -_08049E94: - mov r0, r10 - ldr r1, [sp, 0x40] - bl GetTileSafe - ldr r1, [sp] - strb r1, [r0, 0xA] - mov r0, r10 - ldr r1, [sp, 0x40] - bl GetTileSafe - ldr r1, [sp, 0x4] - strb r1, [r0, 0xB] - mov r0, r10 - ldr r1, [sp, 0x40] - bl GetTileSafe - ldr r1, [sp, 0x8] - strb r1, [r0, 0xC] - mov r0, r10 - ldr r1, [sp, 0x40] - bl GetTileSafe - ldr r1, [sp, 0xC] - strb r1, [r0, 0xD] - add sp, 0x44 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8049BB0 - - thumb_func_start sub_8049ED4 -sub_8049ED4: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x38 - ldr r0, _08049F78 - ldr r6, [r0] - ldr r1, _08049F7C - adds r0, r6, r1 - ldrb r0, [r0] - str r0, [sp] - ldr r2, _08049F80 - adds r0, r6, r2 - ldrb r0, [r0] - str r0, [sp, 0x4] - ldr r4, _08049F84 - adds r0, r6, r4 - ldrh r0, [r0] - lsls r0, 16 - asrs r3, r0, 19 - ldr r1, _08049F88 - adds r0, r3, 0 - adds r0, 0x1E - lsls r0, 1 - adds r1, r0, r1 - movs r4, 0 - ldrsh r2, [r1, r4] - mov r10, r2 - ldr r1, _08049F8C - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - str r1, [sp, 0x10] - movs r4, 0 - str r4, [sp, 0x8] -_08049F1C: - ldr r1, _08049F90 - adds r0, r6, r1 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 19 - subs r2, r0, 0x1 - mov r9, r2 - movs r1, 0x1F - ands r3, r1 - ldr r1, _08049F88 - adds r0, 0x1D - lsls r0, 1 - adds r1, r0, r1 - movs r2, 0 - ldrsh r4, [r1, r2] - mov r8, r4 - ldr r1, _08049F8C - adds r0, r1 - movs r1, 0 - ldrsh r4, [r0, r1] - str r4, [sp, 0x14] - mov r2, r8 - lsls r0, r2, 1 - add r0, r8 - mov r4, r10 - adds r7, r4, r0 - ldr r0, [sp, 0x10] - ldr r1, [sp, 0x14] - str r3, [sp, 0x34] - bl GetTile - adds r5, r0, 0 - ldrh r2, [r5] - movs r1, 0x80 - lsls r1, 5 - adds r0, r1, 0 - ands r0, r2 - ldr r3, [sp, 0x34] - cmp r0, 0 - beq _08049F98 - lsls r0, r7, 1 - ldr r2, _08049F94 - adds r0, r2 - adds r2, r6, r0 - b _0804A06A - .align 2, 0 -_08049F78: .4byte gDungeon -_08049F7C: .4byte 0x00018210 -_08049F80: .4byte 0x0001820f -_08049F84: .4byte 0x000181f0 -_08049F88: .4byte gUnknown_80F6A4A -_08049F8C: .4byte gUnknown_80F6C06 -_08049F90: .4byte 0x000181f2 -_08049F94: .4byte 0x00012bec -_08049F98: - movs r0, 0x20 - ands r0, r2 - cmp r0, 0 - beq _08049FAC - lsls r0, r7, 1 - ldr r4, _08049FA8 - b _08049FD2 - .align 2, 0 -_08049FA8: .4byte 0x00012bda -_08049FAC: - ldr r0, [sp] - cmp r0, 0 - beq _08049FC4 - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r2, _08049FC0 - adds r1, r2 - b _0804A064 - .align 2, 0 -_08049FC0: .4byte 0x00011884 -_08049FC4: - ldrh r1, [r5, 0x4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08049FDC - lsls r0, r7, 1 - ldr r4, _08049FD8 -_08049FD2: - adds r0, r4 - adds r2, r6, r0 - b _0804A06A - .align 2, 0 -_08049FD8: .4byte 0x00012bfe -_08049FDC: - ldr r4, [r5, 0x14] - cmp r4, 0 - beq _0804A028 - adds r0, r4, 0 - str r3, [sp, 0x34] - bl GetEntityType - ldr r3, [sp, 0x34] - cmp r0, 0x2 - bne _0804A014 - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - bne _0804A000 - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _0804A014 -_0804A000: - ldr r0, [r4, 0x70] - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r1, _0804A010 - adds r0, r1 - b _0804A046 - .align 2, 0 -_0804A010: .4byte 0x00012a18 -_0804A014: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r2, _0804A024 - adds r1, r2 - b _0804A064 - .align 2, 0 -_0804A024: .4byte 0x00011884 -_0804A028: - movs r4, 0x80 - lsls r4, 2 - adds r0, r4, 0 - ands r0, r2 - cmp r0, 0 - beq _0804A058 - ldr r1, _0804A050 - adds r0, r6, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r4, _0804A054 - adds r0, r4 -_0804A046: - adds r0, r6, r0 - lsls r1, r7, 1 - adds r2, r0, r1 - b _0804A06A - .align 2, 0 -_0804A050: .4byte 0x00003a12 -_0804A054: .4byte 0x00012a18 -_0804A058: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r0, _0804A0E8 - adds r1, r0 -_0804A064: - adds r1, r6, r1 - lsls r0, r7, 1 - adds r2, r1, r0 -_0804A06A: - lsls r1, r3, 1 - str r1, [sp, 0x30] - adds r3, 0x1 - str r3, [sp, 0x2C] - mov r4, r10 - adds r4, 0x1 - str r4, [sp, 0x28] - ldr r0, [sp, 0x8] - adds r0, 0x1 - str r0, [sp, 0x24] - mov r1, r10 - lsls r3, r1, 1 - ldr r4, _0804A0EC - adds r4, r3, r4 - str r4, [sp, 0x18] - ldr r0, _0804A0F0 - adds r0, r3, r0 - str r0, [sp, 0x1C] - ldr r1, _0804A0F4 - adds r1, r3, r1 - str r1, [sp, 0x20] - movs r4, 0x16 - str r4, [sp, 0xC] -_0804A098: - movs r0, 0x1F - mov r1, r9 - ands r1, r0 - mov r9, r1 - lsls r0, r1, 6 - ldr r4, [sp, 0x30] - adds r0, r4, r0 - ldr r1, _0804A0F8 - adds r0, r1 - ldrh r1, [r2] - strh r1, [r0] - adds r2, 0x6 - movs r4, 0x1 - add r9, r4 - add r8, r4 - mov r0, r8 - cmp r0, 0x3 - bne _0804A1AC - movs r1, 0 - mov r8, r1 - ldr r2, [sp, 0x14] - adds r2, 0x1 - str r2, [sp, 0x14] - mov r7, r10 - ldr r0, [sp, 0x10] - adds r1, r2, 0 - str r3, [sp, 0x34] - bl GetTile - adds r5, r0, 0 - ldrh r2, [r5] - movs r0, 0x20 - ands r0, r2 - ldr r3, [sp, 0x34] - cmp r0, 0 - beq _0804A0FC - ldr r4, [sp, 0x18] - adds r2, r6, r4 - b _0804A1AC - .align 2, 0 -_0804A0E8: .4byte 0x00011884 -_0804A0EC: .4byte 0x00012bda -_0804A0F0: .4byte 0x00012bec -_0804A0F4: .4byte 0x00012bfe -_0804A0F8: .4byte gFontTilesExtra_202C838 -_0804A0FC: - movs r1, 0x80 - lsls r1, 5 - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _0804A10E - ldr r4, [sp, 0x1C] - adds r2, r6, r4 - b _0804A1AC -_0804A10E: - ldr r0, [sp] - cmp r0, 0 - bne _0804A19C - ldrh r1, [r5, 0x4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0804A124 - ldr r4, [sp, 0x20] - adds r2, r6, r4 - b _0804A1AC -_0804A124: - ldr r4, [r5, 0x14] - cmp r4, 0 - beq _0804A174 - adds r0, r4, 0 - str r3, [sp, 0x34] - bl GetEntityType - ldr r3, [sp, 0x34] - cmp r0, 0x2 - bne _0804A15C - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - bne _0804A148 - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _0804A15C -_0804A148: - ldr r0, [r4, 0x70] - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r1, _0804A158 - b _0804A1A6 - .align 2, 0 -_0804A158: .4byte 0x00012a18 -_0804A15C: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r2, _0804A170 - adds r1, r2 - adds r1, r6, r1 - lsls r0, r7, 1 - adds r2, r1, r0 - b _0804A1AC - .align 2, 0 -_0804A170: .4byte 0x00011884 -_0804A174: - movs r4, 0x80 - lsls r4, 2 - adds r0, r4, 0 - ands r0, r2 - cmp r0, 0 - beq _0804A19C - ldr r1, _0804A194 - adds r0, r6, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r4, _0804A198 - adds r0, r4 - b _0804A1A8 - .align 2, 0 -_0804A194: .4byte 0x00003a12 -_0804A198: .4byte 0x00012a18 -_0804A19C: - ldrb r1, [r5, 0x8] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r1, _0804A1EC -_0804A1A6: - adds r0, r1 -_0804A1A8: - adds r0, r6, r0 - adds r2, r0, r3 -_0804A1AC: - ldr r4, [sp, 0xC] - subs r4, 0x1 - str r4, [sp, 0xC] - cmp r4, 0 - blt _0804A1B8 - b _0804A098 -_0804A1B8: - ldr r3, [sp, 0x2C] - ldr r0, [sp, 0x28] - mov r10, r0 - cmp r0, 0x3 - bne _0804A1CC - movs r1, 0 - mov r10, r1 - ldr r2, [sp, 0x10] - adds r2, 0x1 - str r2, [sp, 0x10] -_0804A1CC: - ldr r4, [sp, 0x24] - str r4, [sp, 0x8] - cmp r4, 0x1E - bgt _0804A1D6 - b _08049F1C -_0804A1D6: - movs r0, 0x3 - bl sub_80098F8 - add sp, 0x38 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804A1EC: .4byte 0x00011884 - thumb_func_end sub_8049ED4 - - thumb_func_start sub_804A1F0 -sub_804A1F0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - ldr r2, _0804A284 - ldr r7, [r2] - ldr r3, _0804A288 - adds r2, r7, r3 - ldrb r2, [r2] - str r2, [sp] - ldr r4, _0804A28C - adds r2, r7, r4 - ldrb r2, [r2] - str r2, [sp, 0x4] - ldr r5, _0804A290 - adds r2, r7, r5 - movs r3, 0 - ldrsh r2, [r2, r3] - adds r2, r0 - subs r4, 0x1D - adds r0, r7, r4 - movs r5, 0 - ldrsh r0, [r0, r5] - adds r0, r1 - asrs r0, 3 - asrs r2, 3 - str r2, [sp, 0x14] - subs r1, r0, 0x1 - mov r9, r1 - ldr r3, _0804A294 - adds r1, r2, 0 - adds r1, 0x1E - lsls r1, 1 - adds r2, r1, r3 - movs r5, 0 - ldrsh r4, [r2, r5] - str r4, [sp, 0x10] - ldr r2, _0804A298 - adds r1, r2 - movs r5, 0 - ldrsh r4, [r1, r5] - str r4, [sp, 0xC] - adds r0, 0x1D - lsls r0, 1 - adds r3, r0, r3 - movs r4, 0 - ldrsh r1, [r3, r4] - mov r8, r1 - adds r0, r2 - movs r1, 0 - ldrsh r5, [r0, r1] - mov r10, r5 - mov r2, r8 - lsls r0, r2, 1 - add r0, r8 - ldr r3, [sp, 0x10] - adds r6, r3, r0 - ldr r0, [sp, 0xC] - mov r1, r10 - bl GetTile - adds r5, r0, 0 - ldrh r1, [r5] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0804A2A0 - lsls r0, r6, 1 - ldr r4, _0804A29C - adds r0, r4 - adds r2, r7, r0 - b _0804A356 - .align 2, 0 -_0804A284: .4byte gDungeon -_0804A288: .4byte 0x00018210 -_0804A28C: .4byte 0x0001820f -_0804A290: .4byte 0x000181f0 -_0804A294: .4byte gUnknown_80F6A4A -_0804A298: .4byte gUnknown_80F6C06 -_0804A29C: .4byte 0x00012bda -_0804A2A0: - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _0804A2B8 - lsls r0, r6, 1 - ldr r5, _0804A2B4 - adds r0, r5 - adds r2, r7, r0 - b _0804A356 - .align 2, 0 -_0804A2B4: .4byte 0x00012bec -_0804A2B8: - ldr r0, [sp] - cmp r0, 0 - beq _0804A2D0 - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r2, _0804A2CC - adds r1, r2 - b _0804A350 - .align 2, 0 -_0804A2CC: .4byte 0x00011884 -_0804A2D0: - ldr r4, [r5, 0x14] - cmp r4, 0 - beq _0804A318 - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x2 - bne _0804A304 - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - bne _0804A2F0 - ldr r3, [sp, 0x4] - cmp r3, 0 - beq _0804A304 -_0804A2F0: - ldr r0, [r4, 0x70] - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r4, _0804A300 - adds r0, r4 - b _0804A334 - .align 2, 0 -_0804A300: .4byte 0x00012a18 -_0804A304: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r5, _0804A314 - adds r1, r5 - b _0804A350 - .align 2, 0 -_0804A314: .4byte 0x00011884 -_0804A318: - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _0804A344 - ldr r1, _0804A33C - adds r0, r7, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r3, _0804A340 - adds r0, r3 -_0804A334: - adds r0, r7, r0 - lsls r1, r6, 1 - adds r2, r0, r1 - b _0804A356 - .align 2, 0 -_0804A33C: .4byte 0x00003a12 -_0804A340: .4byte 0x00012a18 -_0804A344: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r4, _0804A3AC - adds r1, r4 -_0804A350: - adds r1, r7, r1 - lsls r0, r6, 1 - adds r2, r1, r0 -_0804A356: - movs r5, 0x16 - str r5, [sp, 0x8] -_0804A35A: - movs r0, 0x1F - ldr r1, [sp, 0x14] - ands r1, r0 - str r1, [sp, 0x14] - mov r3, r9 - ands r3, r0 - mov r9, r3 - lsls r1, 1 - lsls r0, r3, 6 - adds r1, r0 - ldr r4, _0804A3B0 - adds r1, r4 - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x6 - movs r5, 0x1 - add r9, r5 - add r8, r5 - mov r0, r8 - cmp r0, 0x3 - beq _0804A386 - b _0804A476 -_0804A386: - movs r1, 0 - mov r8, r1 - add r10, r5 - ldr r6, [sp, 0x10] - ldr r0, [sp, 0xC] - mov r1, r10 - bl GetTile - adds r5, r0, 0 - ldrh r1, [r5] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0804A3B8 - lsls r0, r6, 1 - ldr r2, _0804A3B4 - adds r0, r2 - adds r2, r7, r0 - b _0804A476 - .align 2, 0 -_0804A3AC: .4byte 0x00011884 -_0804A3B0: .4byte gFontTilesExtra_202C838 -_0804A3B4: .4byte 0x00012bda -_0804A3B8: - movs r3, 0x80 - lsls r3, 5 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _0804A3D4 - lsls r0, r6, 1 - ldr r4, _0804A3D0 - adds r0, r4 - adds r2, r7, r0 - b _0804A476 - .align 2, 0 -_0804A3D0: .4byte 0x00012bec -_0804A3D4: - ldr r0, [sp] - cmp r0, 0 - beq _0804A3EC - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r2, _0804A3E8 - adds r1, r2 - b _0804A470 - .align 2, 0 -_0804A3E8: .4byte 0x00011884 -_0804A3EC: - ldr r4, [r5, 0x14] - cmp r4, 0 - beq _0804A434 - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x2 - bne _0804A420 - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - bne _0804A40C - ldr r3, [sp, 0x4] - cmp r3, 0 - beq _0804A420 -_0804A40C: - ldr r0, [r4, 0x70] - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r4, _0804A41C - adds r0, r4 - b _0804A452 - .align 2, 0 -_0804A41C: .4byte 0x00012a18 -_0804A420: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r5, _0804A430 - adds r1, r5 - b _0804A470 - .align 2, 0 -_0804A430: .4byte 0x00011884 -_0804A434: - movs r2, 0x80 - lsls r2, 2 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0804A464 - ldr r3, _0804A45C - adds r0, r7, r3 - movs r4, 0 - ldrsh r1, [r0, r4] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r5, _0804A460 - adds r0, r5 -_0804A452: - adds r0, r7, r0 - lsls r1, r6, 1 - adds r2, r0, r1 - b _0804A476 - .align 2, 0 -_0804A45C: .4byte 0x00003a12 -_0804A460: .4byte 0x00012a18 -_0804A464: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r0, _0804A498 - adds r1, r0 -_0804A470: - adds r1, r7, r1 - lsls r0, r6, 1 - adds r2, r1, r0 -_0804A476: - ldr r1, [sp, 0x8] - subs r1, 0x1 - str r1, [sp, 0x8] - cmp r1, 0 - blt _0804A482 - b _0804A35A -_0804A482: - movs r0, 0x3 - bl sub_80098F8 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804A498: .4byte 0x00011884 - thumb_func_end sub_804A1F0 - - thumb_func_start sub_804A49C -sub_804A49C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - ldr r2, _0804A52C - ldr r7, [r2] - ldr r3, _0804A530 - adds r2, r7, r3 - ldrb r2, [r2] - str r2, [sp] - ldr r4, _0804A534 - adds r2, r7, r4 - ldrb r2, [r2] - str r2, [sp, 0x4] - subs r3, 0x20 - adds r2, r7, r3 - movs r4, 0 - ldrsh r2, [r2, r4] - adds r2, r0 - adds r3, 0x2 - adds r0, r7, r3 - movs r4, 0 - ldrsh r0, [r0, r4] - adds r0, r1 - asrs r2, 3 - mov r8, r2 - asrs r0, 3 - str r0, [sp, 0x14] - ldr r2, _0804A538 - mov r0, r8 - adds r0, 0x1E - lsls r0, 1 - adds r1, r0, r2 - movs r4, 0 - ldrsh r3, [r1, r4] - mov r9, r3 - ldr r1, _0804A53C - adds r0, r1 - movs r4, 0 - ldrsh r3, [r0, r4] - mov r10, r3 - ldr r0, [sp, 0x14] - adds r0, 0x1E - lsls r0, 1 - adds r2, r0, r2 - movs r4, 0 - ldrsh r3, [r2, r4] - str r3, [sp, 0x10] - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - str r1, [sp, 0xC] - lsls r0, r3, 1 - adds r0, r3 - mov r3, r9 - adds r6, r3, r0 - mov r0, r10 - bl GetTile - adds r5, r0, 0 - ldrh r1, [r5] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0804A544 - lsls r0, r6, 1 - ldr r4, _0804A540 - adds r0, r4 - adds r2, r7, r0 - b _0804A5DA - .align 2, 0 -_0804A52C: .4byte gDungeon -_0804A530: .4byte 0x00018210 -_0804A534: .4byte 0x0001820f -_0804A538: .4byte gUnknown_80F6A4A -_0804A53C: .4byte gUnknown_80F6C06 -_0804A540: .4byte 0x00012bda -_0804A544: - movs r0, 0x80 - lsls r0, 5 - ands r0, r1 - cmp r0, 0 - beq _0804A55C - lsls r0, r6, 1 - ldr r1, _0804A558 - adds r0, r1 - adds r2, r7, r0 - b _0804A5DA - .align 2, 0 -_0804A558: .4byte 0x00012bec -_0804A55C: - ldr r2, [sp] - cmp r2, 0 - beq _0804A574 - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r3, _0804A570 - adds r1, r3 - b _0804A5D4 - .align 2, 0 -_0804A570: .4byte 0x00011884 -_0804A574: - ldr r4, [r5, 0x14] - cmp r4, 0 - beq _0804A59A - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x2 - bne _0804A5C8 - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - bne _0804A594 - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _0804A5C8 -_0804A594: - ldr r0, [r4, 0x70] - ldrb r1, [r0] - b _0804A5AC -_0804A59A: - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _0804A5C8 - ldr r3, _0804A5C0 - adds r0, r7, r3 - movs r4, 0 - ldrsh r1, [r0, r4] -_0804A5AC: - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r1, _0804A5C4 - adds r0, r1 - adds r0, r7, r0 - lsls r1, r6, 1 - adds r2, r0, r1 - b _0804A5DA - .align 2, 0 -_0804A5C0: .4byte 0x00003a12 -_0804A5C4: .4byte 0x00012a18 -_0804A5C8: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r2, _0804A638 - adds r1, r2 -_0804A5D4: - adds r1, r7, r1 - lsls r0, r6, 1 - adds r2, r1, r0 -_0804A5DA: - movs r3, 0x1E - str r3, [sp, 0x8] -_0804A5DE: - movs r0, 0x1F - mov r4, r8 - ands r4, r0 - mov r8, r4 - ldr r1, [sp, 0x14] - ands r1, r0 - str r1, [sp, 0x14] - lsls r1, r4, 1 - ldr r3, [sp, 0x14] - lsls r0, r3, 6 - adds r1, r0 - ldr r4, _0804A63C - adds r1, r4 - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - movs r0, 0x1 - add r8, r0 - add r9, r0 - mov r1, r9 - cmp r1, 0x3 - beq _0804A60C - b _0804A702 -_0804A60C: - movs r2, 0 - mov r9, r2 - add r10, r0 - ldr r3, [sp, 0x10] - lsls r0, r3, 1 - adds r6, r0, r3 - mov r0, r10 - ldr r1, [sp, 0xC] - bl GetTile - adds r5, r0, 0 - ldrh r1, [r5] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0804A644 - lsls r0, r6, 1 - ldr r4, _0804A640 - adds r0, r4 - adds r2, r7, r0 - b _0804A702 - .align 2, 0 -_0804A638: .4byte 0x00011884 -_0804A63C: .4byte gFontTilesExtra_202C838 -_0804A640: .4byte 0x00012bda -_0804A644: - movs r2, 0x80 - lsls r2, 5 - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _0804A660 - lsls r0, r6, 1 - ldr r3, _0804A65C - adds r0, r3 - adds r2, r7, r0 - b _0804A702 - .align 2, 0 -_0804A65C: .4byte 0x00012bec -_0804A660: - ldr r4, [sp] - cmp r4, 0 - beq _0804A678 - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r0, _0804A674 - adds r1, r0 - b _0804A6FC - .align 2, 0 -_0804A674: .4byte 0x00011884 -_0804A678: - ldr r4, [r5, 0x14] - cmp r4, 0 - beq _0804A6C0 - adds r0, r4, 0 - bl GetEntityType - cmp r0, 0x2 - bne _0804A6AC - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - bne _0804A698 - ldr r1, [sp, 0x4] - cmp r1, 0 - beq _0804A6AC -_0804A698: - ldr r0, [r4, 0x70] - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r2, _0804A6A8 - adds r0, r2 - b _0804A6DE - .align 2, 0 -_0804A6A8: .4byte 0x00012a18 -_0804A6AC: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r3, _0804A6BC - adds r1, r3 - b _0804A6FC - .align 2, 0 -_0804A6BC: .4byte 0x00011884 -_0804A6C0: - movs r4, 0x80 - lsls r4, 2 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0804A6F0 - ldr r1, _0804A6E8 - adds r0, r7, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 1 - ldr r3, _0804A6EC - adds r0, r3 -_0804A6DE: - adds r0, r7, r0 - lsls r1, r6, 1 - adds r2, r0, r1 - b _0804A702 - .align 2, 0 -_0804A6E8: .4byte 0x00003a12 -_0804A6EC: .4byte 0x00012a18 -_0804A6F0: - ldrb r0, [r5, 0x8] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 1 - ldr r4, _0804A724 - adds r1, r4 -_0804A6FC: - adds r1, r7, r1 - lsls r0, r6, 1 - adds r2, r1, r0 -_0804A702: - ldr r0, [sp, 0x8] - subs r0, 0x1 - str r0, [sp, 0x8] - cmp r0, 0 - blt _0804A70E - b _0804A5DE -_0804A70E: - movs r0, 0x3 - bl sub_80098F8 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804A724: .4byte 0x00011884 - thumb_func_end sub_804A49C - - thumb_func_start sub_804A728 -sub_804A728: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x40 - str r0, [sp, 0x1C] - adds r5, r1, 0 - adds r4, r3, 0 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x20] - lsls r4, 24 - lsrs r4, 24 - ldr r6, _0804A814 - ldr r0, [r6] - mov r8, r0 - bl GetLeader - str r0, [sp, 0x24] - ldr r0, _0804A818 - add r0, r8 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 19 - str r0, [sp, 0x30] - adds r1, r0, 0 - ldr r0, [r6] - ldr r2, _0804A81C - adds r0, r2 - strb r4, [r0] - ldr r3, [sp, 0x1C] - movs r4, 0 - ldrsh r7, [r3, r4] - movs r0, 0x2 - ldrsh r6, [r3, r0] - ldr r0, _0804A820 - lsls r5, 2 - adds r5, r0 - movs r2, 0 - ldrsh r4, [r5, r2] - movs r0, 0x2 - ldrsh r3, [r5, r0] - mov r0, sp - movs r2, 0x5 -_0804A782: - strh r7, [r0] - strh r6, [r0, 0x2] - adds r7, r4 - adds r6, r3 - adds r0, 0x4 - subs r2, 0x1 - cmp r2, 0 - bge _0804A782 - ldr r0, _0804A824 - adds r1, 0x1E - lsls r1, 1 - adds r0, r1, r0 - movs r3, 0 - ldrsh r2, [r0, r3] - str r2, [sp, 0x28] - ldr r0, _0804A828 - adds r1, r0 - movs r0, 0 - ldrsh r4, [r1, r0] - mov r10, r4 - movs r7, 0 -_0804A7AC: - ldr r0, _0804A82C - add r0, r8 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 19 - str r0, [sp, 0x34] - ldr r0, _0804A824 - ldr r1, [sp, 0x34] - adds r1, 0x1E - lsls r1, 1 - adds r0, r1, r0 - movs r3, 0 - ldrsh r2, [r0, r3] - str r2, [sp, 0x2C] - ldr r0, _0804A828 - adds r1, r0 - movs r0, 0 - ldrsh r4, [r1, r0] - mov r9, r4 - lsls r0, r2, 1 - adds r0, r2 - ldr r1, [sp, 0x28] - adds r5, r1, r0 - mov r2, r10 - lsls r0, r2, 16 - lsls r1, r4, 16 - lsrs r0, 16 - orrs r0, r1 - str r0, [sp, 0x18] - ldr r3, [sp, 0x20] - cmp r3, 0 - beq _0804A850 - ldr r4, [sp, 0x1C] - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r10, r0 - bne _0804A834 - movs r2, 0x2 - ldrsh r0, [r4, r2] - cmp r9, r0 - bne _0804A834 - lsls r0, r5, 1 - ldr r3, _0804A830 - adds r0, r3 - mov r4, r8 - adds r2, r4, r0 - ldr r0, [sp, 0x28] - adds r0, 0x1 - str r0, [sp, 0x3C] - adds r1, r7, 0x1 - str r1, [sp, 0x38] - b _0804A8FC - .align 2, 0 -_0804A814: .4byte gDungeon -_0804A818: .4byte 0x000181f0 -_0804A81C: .4byte 0x0001821a -_0804A820: .4byte gAdjacentTileOffsets -_0804A824: .4byte gUnknown_80F6A4A -_0804A828: .4byte gUnknown_80F6C06 -_0804A82C: .4byte 0x000181f2 -_0804A830: .4byte 0x00012b92 -_0804A834: - lsls r0, r5, 1 - ldr r2, _0804A84C - adds r0, r2 - mov r3, r8 - adds r2, r3, r0 - ldr r4, [sp, 0x28] - adds r4, 0x1 - str r4, [sp, 0x3C] - adds r0, r7, 0x1 - str r0, [sp, 0x38] - b _0804A8FC - .align 2, 0 -_0804A84C: .4byte 0x00013554 -_0804A850: - add r4, sp, 0x18 - ldr r0, [sp, 0x24] - adds r1, r4, 0 - bl sub_807049C - lsls r0, 24 - cmp r0, 0 - bne _0804A8E8 - ldr r0, [sp, 0x24] - adds r1, r4, 0 - bl sub_8045AAC - lsls r0, 24 - cmp r0, 0 - beq _0804A8E8 - movs r2, 0 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - lsls r3, r5, 1 - ldr r4, [sp, 0x28] - adds r4, 0x1 - str r4, [sp, 0x3C] - adds r1, r7, 0x1 - str r1, [sp, 0x38] - cmp r0, r10 - bne _0804A890 - mov r0, sp - movs r4, 0x2 - ldrsh r0, [r0, r4] - cmp r0, r9 - beq _0804A8AC -_0804A890: - adds r2, 0x1 - cmp r2, 0x5 - bgt _0804A8AC - lsls r0, r2, 2 - mov r4, sp - adds r1, r4, r0 - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, r10 - bne _0804A890 - movs r4, 0x2 - ldrsh r0, [r1, r4] - cmp r0, r9 - bne _0804A890 -_0804A8AC: - cmp r2, 0x6 - bne _0804A8D8 - ldr r0, _0804A8C0 - ldr r0, [r0] - ldrb r0, [r0, 0x3] - cmp r0, 0 - beq _0804A8C8 - ldr r1, _0804A8C4 - adds r0, r3, r1 - b _0804A8DC - .align 2, 0 -_0804A8C0: .4byte gGameOptionsRef -_0804A8C4: .4byte 0x00012b80 -_0804A8C8: - ldr r4, _0804A8D4 - adds r0, r3, r4 - mov r1, r8 - adds r2, r1, r0 - b _0804A8FC - .align 2, 0 -_0804A8D4: .4byte 0x00013554 -_0804A8D8: - ldr r2, _0804A8E4 - adds r0, r3, r2 -_0804A8DC: - mov r3, r8 - adds r2, r3, r0 - b _0804A8FC - .align 2, 0 -_0804A8E4: .4byte 0x00012b92 -_0804A8E8: - lsls r0, r5, 1 - ldr r4, _0804A968 - adds r0, r4 - mov r1, r8 - adds r2, r1, r0 - ldr r3, [sp, 0x28] - adds r3, 0x1 - str r3, [sp, 0x3C] - adds r4, r7, 0x1 - str r4, [sp, 0x38] -_0804A8FC: - movs r6, 0 -_0804A8FE: - movs r0, 0x1F - ldr r1, [sp, 0x30] - ands r1, r0 - str r1, [sp, 0x30] - ldr r3, [sp, 0x34] - ands r3, r0 - lsls r0, r1, 1 - lsls r1, r3, 6 - adds r0, r1 - ldr r4, _0804A96C - adds r0, r4 - ldrh r1, [r2] - strh r1, [r0] - adds r2, 0x6 - adds r3, 0x1 - str r3, [sp, 0x34] - ldr r0, [sp, 0x2C] - adds r0, 0x1 - str r0, [sp, 0x2C] - adds r7, r6, 0x1 - cmp r0, 0x3 - beq _0804A92C - b _0804AA20 -_0804A92C: - movs r1, 0 - str r1, [sp, 0x2C] - movs r2, 0x1 - add r9, r2 - ldr r5, [sp, 0x28] - add r4, sp, 0x18 - mov r3, r10 - strh r3, [r4] - adds r0, r4, 0 - mov r1, r9 - strh r1, [r0, 0x2] - ldr r2, [sp, 0x20] - cmp r2, 0 - beq _0804A984 - ldr r3, [sp, 0x1C] - movs r4, 0 - ldrsh r0, [r3, r4] - cmp r10, r0 - bne _0804A974 - movs r1, 0x2 - ldrsh r0, [r3, r1] - cmp r9, r0 - bne _0804A974 - ldr r2, [sp, 0x28] - lsls r0, r2, 1 - ldr r3, _0804A970 - adds r0, r3 - mov r4, r8 - adds r2, r4, r0 - b _0804AA20 - .align 2, 0 -_0804A968: .4byte 0x00013554 -_0804A96C: .4byte gFontTiles_202C038 -_0804A970: .4byte 0x00012b92 -_0804A974: - lsls r0, r5, 1 - ldr r1, _0804A980 - adds r0, r1 - mov r3, r8 - adds r2, r3, r0 - b _0804AA1E - .align 2, 0 -_0804A980: .4byte 0x00013554 -_0804A984: - ldr r0, [sp, 0x24] - adds r1, r4, 0 - bl sub_807049C - lsls r0, 24 - cmp r0, 0 - bne _0804AA14 - ldr r0, [sp, 0x24] - adds r1, r4, 0 - bl sub_8045AAC - lsls r0, 24 - cmp r0, 0 - beq _0804AA14 - movs r2, 0 - mov r0, sp - movs r4, 0 - ldrsh r0, [r0, r4] - ldr r1, [sp, 0x28] - lsls r3, r1, 1 - cmp r0, r10 - bne _0804A9BA - mov r0, sp - movs r4, 0x2 - ldrsh r0, [r0, r4] - cmp r0, r9 - beq _0804A9D6 -_0804A9BA: - adds r2, 0x1 - cmp r2, 0x5 - bgt _0804A9D6 - lsls r0, r2, 2 - mov r4, sp - adds r1, r4, r0 - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, r10 - bne _0804A9BA - movs r4, 0x2 - ldrsh r0, [r1, r4] - cmp r0, r9 - bne _0804A9BA -_0804A9D6: - cmp r2, 0x6 - bne _0804AA04 - ldr r0, _0804A9EC - ldr r0, [r0] - ldrb r0, [r0, 0x3] - cmp r0, 0 - beq _0804A9F4 - ldr r1, _0804A9F0 - adds r0, r3, r1 - b _0804AA08 - .align 2, 0 -_0804A9EC: .4byte gGameOptionsRef -_0804A9F0: .4byte 0x00012b80 -_0804A9F4: - ldr r4, _0804AA00 - adds r0, r3, r4 - mov r1, r8 - adds r2, r1, r0 - b _0804AA20 - .align 2, 0 -_0804AA00: .4byte 0x00013554 -_0804AA04: - ldr r2, _0804AA10 - adds r0, r3, r2 -_0804AA08: - mov r3, r8 - adds r2, r3, r0 - b _0804AA20 - .align 2, 0 -_0804AA10: .4byte 0x00012b92 -_0804AA14: - lsls r0, r5, 1 - ldr r4, _0804AA5C - adds r0, r4 - mov r1, r8 - adds r2, r1, r0 -_0804AA1E: - adds r7, r6, 0x1 -_0804AA20: - adds r6, r7, 0 - cmp r6, 0x14 - bgt _0804AA28 - b _0804A8FE -_0804AA28: - ldr r2, [sp, 0x30] - adds r2, 0x1 - str r2, [sp, 0x30] - ldr r3, [sp, 0x3C] - str r3, [sp, 0x28] - cmp r3, 0x3 - bne _0804AA3E - movs r4, 0 - str r4, [sp, 0x28] - movs r0, 0x1 - add r10, r0 -_0804AA3E: - ldr r7, [sp, 0x38] - cmp r7, 0x1E - bgt _0804AA46 - b _0804A7AC -_0804AA46: - movs r0, 0x2 - bl sub_80098F8 - add sp, 0x40 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804AA5C: .4byte 0x00013554 - thumb_func_end sub_804A728 - - .align 2, 0 diff --git a/include/structs/map.h b/include/structs/map.h index f165564c2..cda59ded2 100644 --- a/include/structs/map.h +++ b/include/structs/map.h @@ -9,15 +9,18 @@ enum TerrainType { - TERRAIN_TYPE_NORMAL = 1 << 0, - TERRAIN_TYPE_SECONDARY = 1 << 1, // Water or lava depending on the dungeon. - TERRAIN_TYPE_UNK_2 = 1 << 2, - TERRAIN_TYPE_NATURAL_JUNCTION = 1 << 3, - TERRAIN_TYPE_IMPASSABLE_WALL = 1 << 4, - TERRAIN_TYPE_SHOP = 1 << 5, - TERRAIN_TYPE_IN_MONSTER_HOUSE = 1 << 6, - TERRAIN_TYPE_UNK_8 = 1 << 8, - TERRAIN_TYPE_STAIRS = 1 << 9, + 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_NATURAL_JUNCTION = 1 << 3, // x8 + TERRAIN_TYPE_IMPASSABLE_WALL = 1 << 4, // x10 + TERRAIN_TYPE_SHOP = 1 << 5, // x20 + TERRAIN_TYPE_IN_MONSTER_HOUSE = 1 << 6, // x40 + TERRAIN_TYPE_UNK_8 = 1 << 8, // x100 + TERRAIN_TYPE_STAIRS = 1 << 9, // x200 + TERRAIN_TYPE_UNK_x400 = 1 << 10, + TERRAIN_TYPE_UNK_x800 = 1 << 11, + TERRAIN_TYPE_UNK_x1000 = 1 << 12, }; enum CrossableTerrain diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 3199f5deb..30900d062 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -240,10 +240,15 @@ typedef struct Dungeon /* 0x104C4 */ RoomData roomData[MAX_ROOM_COUNT]; /* 0x10844 */ s16 naturalJunctionListCounts[MAX_ROOM_COUNT]; /* 0x10884 */ Position naturalJunctionList[MAX_ROOM_COUNT][MAX_ROOM_COUNT]; // Arrays of room exits for each room. - u8 unk11884[0x1194]; - u8 fill12A18[0x12C24 - 0x12A18]; + u16 unk11884[250][9]; + u16 unk12A18[20][9]; + u16 unk12B80[9]; + u16 unk12B92[36]; + u16 unk12BDA[9]; + u16 unk12BEC[9]; + u16 unk12BFE[19]; u8 unk12C24[0x930]; - u8 fill13554[0x1356C - 0x13554]; + u16 unk13554[12]; u8 unk1356C; u8 fill1356D[0x13570 - 0x1356D]; /* 0x13570 */ u8 unk13570; @@ -271,7 +276,7 @@ typedef struct Dungeon /* 0x181E4 */ OpenedFile *paletFile; /* 0x181E8 */ unkDungeonGlobal_unk181E8_sub unk181e8; u8 fill18220[0x1C06C - 0x18220]; - u32 unk1C06C; + u32 unk1C06C; u8 fill1C070[0x1C570 - 0x1C070]; u8 unk1C570; u8 unk1C571; diff --git a/ld_script.txt b/ld_script.txt index 0c66956f3..c7571f863 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -229,8 +229,6 @@ SECTIONS { src/code_8048480.o(.text); src/dungeon_ai_item_weight.o(.text); src/dungeon_map_access.o(.text); - asm/dungeon_map_access.o(.text); - src/dungeon_map_access_1.o(.text); src/tile_types.o(.text); asm/code_804AFAC.o(.text); src/code_804AFAC.o(.text); diff --git a/src/dungeon_map_access.c b/src/dungeon_map_access.c index 1a1911f75..62a4e1335 100644 --- a/src/dungeon_map_access.c +++ b/src/dungeon_map_access.c @@ -1,4 +1,5 @@ #include "global.h" +#include "dungeon_map_access.h" #include "code_8004AA0.h" #include "constants/walkable_tile.h" #include "decompress.h" @@ -6,8 +7,14 @@ #include "structs/str_dungeon.h" #include "tile_types.h" #include "random.h" +#include "text1.h" #include "dungeon_engine.h" #include "dungeon_movement.h" +#include "dungeon_leader.h" +#include "dungeon_util.h" +#include "code_8009804.h" +#include "game_options.h" +#include "dungeon_visibility.h" extern unkStruct_202F190 gUnknown_80F69D4; extern unkStruct_202F190 gUnknown_80F69EC; @@ -19,6 +26,8 @@ extern u8 gUnknown_80F6A34[]; extern u8 gUnknown_80F6A40[]; extern u8 gUnknown_8108EC0[]; extern const struct FileArchive gDungeonFileArchive; +extern const s16 gUnknown_80F6A4A[]; +extern const s16 gUnknown_80F6C06[]; EWRAM_DATA OpenedFile *gDungeonPaletteFile = {0}; EWRAM_DATA unkStruct_202EE8C gUnknown_202EE8C[32] = {0}; @@ -28,7 +37,7 @@ EWRAM_DATA unkStruct_202F190 gUnknown_202F190 = {0}; EWRAM_DATA_2 unkStruct_202F190 *gUnknown_203B430 = {0}; extern u8 sub_8043CE4(u32); - +extern void sub_80402AC(s32, s32); extern int sprintf(char *, const char *, ...); void sub_8049BB0(s32, s32); void sub_80498A8(s32, s32); @@ -57,7 +66,7 @@ void sub_80495E4(void) { s32 YCoord; s32 XCoord; - + for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++) { for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++) @@ -75,7 +84,7 @@ void LoadDungeonTilesetAssets(void) OpenedFile *file; OpenedFile *file_1; u8 fileName [12]; - + sprintf(fileName,gUnknown_80F6A04,gUnknown_8108EC0[gDungeon->tileset]); // b%02dfon file = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive); DecompressATGlobalFile((u32 *)0x06008000,0,file); @@ -86,7 +95,7 @@ void LoadDungeonTilesetAssets(void) sprintf(fileName,gUnknown_80F6A1C,gUnknown_8108EC0[gDungeon->tileset]); // b%02dcel file_1 = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive); - DecompressATFile(gDungeon->unk11884,0x1194,file_1); + DecompressATFile((void*)gDungeon->unk11884,0x1194,file_1); CloseFile(file_1); if (gDungeon->tileset < 0x40) { @@ -137,12 +146,11 @@ void sub_8049840(void) } } - void sub_8049884(void) { s32 XCoord; s32 YCoord; - + for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++) { for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++) { @@ -165,7 +173,7 @@ void sub_80498A8(int x,int y) u16 sp_0x20; // sp 0x20 int r4; s32 r7; // r7 - + if (x < 0) { return; } @@ -325,7 +333,7 @@ void sub_8049B8C(void) { s32 XCoord; s32 YCoord; - + for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++) { for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++) { @@ -333,3 +341,692 @@ void sub_8049B8C(void) } } } + +void sub_8049BB0(s32 x, s32 y) +{ + s32 i; + u32 terrainFlags; + u32 flags[6]; + u32 var_4C[8]; + bool8 var_2C[8]; + + flags[0] = 0; + flags[1] = 0; + flags[2] = 0; + flags[3] = 0; + + terrainFlags = GetTile(x, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + var_4C[0] = terrainFlags; + var_4C[1] = GetTile(x+1, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + var_4C[2] = GetTile(x+1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + var_4C[3] = GetTile(x+1, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + var_4C[4] = GetTile(x, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + var_4C[5] = GetTile(x-1, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + var_4C[6] = GetTile(x-1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + var_4C[7] = GetTile(x-1, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); + + if (var_4C[0] == TERRAIN_TYPE_NORMAL) + flags[CROSSABLE_TERRAIN_REGULAR] |= 1; + if (var_4C[2] == TERRAIN_TYPE_NORMAL) + flags[CROSSABLE_TERRAIN_REGULAR] |= 4; + if (var_4C[4] == TERRAIN_TYPE_NORMAL) + flags[CROSSABLE_TERRAIN_REGULAR] |= 0x10; + if (var_4C[6] == TERRAIN_TYPE_NORMAL) + flags[CROSSABLE_TERRAIN_REGULAR] |= 0x40; + + if (var_4C[0] != 0 && var_4C[1] == TERRAIN_TYPE_NORMAL && var_4C[2] != 0) + flags[CROSSABLE_TERRAIN_REGULAR] |= 2; + if (var_4C[2] != 0 && var_4C[3] == TERRAIN_TYPE_NORMAL && var_4C[4] != 0) + flags[CROSSABLE_TERRAIN_REGULAR] |= 8; + if (var_4C[4] != 0 && var_4C[5] == TERRAIN_TYPE_NORMAL && var_4C[6] != 0) + flags[CROSSABLE_TERRAIN_REGULAR] |= 0x20; + if (var_4C[6] != 0 && var_4C[7] == TERRAIN_TYPE_NORMAL && var_4C[0] != 0) + flags[CROSSABLE_TERRAIN_REGULAR] |= 0x80; + + for (i = 0; i < 8; i++) { + if (var_4C[i] == TERRAIN_TYPE_NORMAL || var_4C[i] == TERRAIN_TYPE_SECONDARY) + var_2C[i] = TRUE; + else + var_2C[i] = FALSE; + } + + if (var_2C[0]) + flags[CROSSABLE_TERRAIN_LIQUID] |= 1; + if (var_2C[2]) + flags[CROSSABLE_TERRAIN_LIQUID] |= 4; + if (var_2C[4]) + flags[CROSSABLE_TERRAIN_LIQUID] |= 0x10; + if (var_2C[6]) + flags[CROSSABLE_TERRAIN_LIQUID] |= 0x40; + + if (var_4C[0] != 0 && var_2C[1] && var_4C[2] != 0) + flags[CROSSABLE_TERRAIN_LIQUID] |= 2; + if (var_4C[2] != 0 && var_2C[3] && var_4C[4] != 0) + flags[CROSSABLE_TERRAIN_LIQUID] |= 8; + if (var_4C[4] != 0 && var_2C[5] && var_4C[6] != 0) + flags[CROSSABLE_TERRAIN_LIQUID] |= 0x20; + if (var_4C[6] != 0 && var_2C[7] && var_4C[0] != 0) + flags[CROSSABLE_TERRAIN_LIQUID] |= 0x80; + + if (var_4C[0] != 0) + flags[2] |= 1; + if (var_4C[2] != 0) + flags[2] |= 4; + if (var_4C[4] != 0) + flags[2] |= 0x10; + if (var_4C[6] != 0) + flags[2] |= 0x40; + + if (var_4C[0] != 0 && var_4C[1] != 0 && var_4C[2] != 0) + flags[CROSSABLE_TERRAIN_CREVICE] |= 2; + if (var_4C[2] != 0 && var_4C[3] != 0 && var_4C[4] != 0) + flags[CROSSABLE_TERRAIN_CREVICE] |= 8; + if (var_4C[4] != 0 && var_4C[5] != 0 && var_4C[6] != 0) + flags[CROSSABLE_TERRAIN_CREVICE] |= 0x20; + if (var_4C[6] != 0 && var_4C[7] != 0 && var_4C[0] != 0) + flags[CROSSABLE_TERRAIN_CREVICE] |= 0x80; + + flags[3] = 0xFF; + if (x <= 1) + flags[CROSSABLE_TERRAIN_WALL] = 0x1F; + if (y <= 1) + flags[CROSSABLE_TERRAIN_WALL] &= ~(0x8 | 0x10 | 0x20); + if (x > 53) + flags[CROSSABLE_TERRAIN_WALL] &= ~(0x2 | 0x4 | 0x8); + if (y > 29) + flags[CROSSABLE_TERRAIN_WALL] &= ~(0x80 | 0x1 | 0x2); + + GetTileSafe(x, y)->walkableNeighborFlags[CROSSABLE_TERRAIN_REGULAR] = flags[CROSSABLE_TERRAIN_REGULAR]; + GetTileSafe(x, y)->walkableNeighborFlags[CROSSABLE_TERRAIN_LIQUID] = flags[CROSSABLE_TERRAIN_LIQUID]; + GetTileSafe(x, y)->walkableNeighborFlags[CROSSABLE_TERRAIN_CREVICE] = flags[CROSSABLE_TERRAIN_CREVICE]; + GetTileSafe(x, y)->walkableNeighborFlags[CROSSABLE_TERRAIN_WALL] = flags[CROSSABLE_TERRAIN_WALL]; +} + +void sub_8049ED4(void) +{ + bool32 hallucinating, unk1820F; + u16 *src; + Tile *tile; + s32 r7; + s32 i; + s32 r10; + s32 j; + s32 x, y; + s32 r8; + s32 var_48, var_44; + + Dungeon *dungeon = gDungeon; + hallucinating = dungeon->unk181e8.hallucinating; + unk1820F = dungeon->unk181e8.unk1820F; + x = dungeon->unk181e8.cameraPixelPos.x >> 3; + r10 = gUnknown_80F6A4A[30 + x]; + var_48 = gUnknown_80F6C06[30 + x]; + + for (i = 0; i <= 30; i++) { + + y = (dungeon->unk181e8.cameraPixelPos.y >> 3) - 1; + x &= 0x1F; + r8 = gUnknown_80F6A4A[30 + y]; + var_44 = gUnknown_80F6C06[30 + y]; + r7 = r10 + (r8 * 3); + tile = GetTile(var_48, var_44); + if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) { + src = &dungeon->unk12BEC[r7]; + } + else if (tile->terrainType & TERRAIN_TYPE_SHOP) { + src = &dungeon->unk12BDA[r7]; + } + else if (hallucinating) { + src = &dungeon->unk11884[tile->unk8][r7]; + } + else if (tile->unk4 & 4) { + src = &dungeon->unk12BFE[r7]; + } + else + { + Entity *tileObject = tile->object; + if (tileObject != NULL) { + if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) { + u8 trapType = tileObject->info->flags; + src = &dungeon->unk12A18[trapType][r7]; + } + else { + src = &dungeon->unk11884[tile->unk8][r7]; + } + } + else if (tile->terrainType & TERRAIN_TYPE_STAIRS) { + src = &dungeon->unk12A18[dungeon->unk3A12][r7]; + } + else { + src = &dungeon->unk11884[tile->unk8][r7]; + } + } + + + for (j = 0; j < 23; j++) { + y &= 0x1F; + gUnknown_202B038[3][y][x] = *src; + src += 3; + y++; + r8++; + if (r8 == 3) + { + r8 = 0; + var_44++; + r7 = r10; + tile = GetTile(var_48, var_44); + if (tile->terrainType & TERRAIN_TYPE_SHOP) { + src = &dungeon->unk12BDA[r7]; + } + else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) { + src = &dungeon->unk12BEC[r7]; + } + else if (hallucinating) { + src = &dungeon->unk11884[tile->unk8][r7]; + } + else if (tile->unk4 & 4) { + src = &dungeon->unk12BFE[r7]; + } + else + { + Entity *tileObject = tile->object; + if (tileObject != NULL) { + if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) { + u8 trapType = tileObject->info->flags; + src = &dungeon->unk12A18[trapType][r7]; + } + else { + src = &dungeon->unk11884[tile->unk8][r7]; + } + } + else if (tile->terrainType & TERRAIN_TYPE_STAIRS) { + src = &dungeon->unk12A18[dungeon->unk3A12][r7]; + } + else { + src = &dungeon->unk11884[tile->unk8][r7]; + } + } + } + } + + x++; + r10++; + if (r10 == 3) { + r10 = 0; + var_48++; + } + } + + sub_80098F8(3); +} + +void sub_804A1F0(s32 a0, s32 a1) +{ + Tile *tile; + u16 *src; + bool32 hallucinating, unk1820F; + s32 xTemp, yTemp; + s32 i; + s32 r8; + s32 r10; + s32 r6; + s32 var_2C; + s32 var_28; + s32 x, y; + + Dungeon *dungeon = gDungeon; + hallucinating = dungeon->unk181e8.hallucinating; + unk1820F = dungeon->unk181e8.unk1820F; + xTemp = dungeon->unk181e8.cameraPixelPos.x + a0; + yTemp = dungeon->unk181e8.cameraPixelPos.y + a1; + yTemp >>= 3; + x = xTemp >> 3; + y = yTemp - 1; + var_28 = gUnknown_80F6A4A[30 + x]; + var_2C = gUnknown_80F6C06[30 + x]; + r8 = gUnknown_80F6A4A[30 + y]; + r10 = gUnknown_80F6C06[30 + y]; + r6 = var_28 + r8 * 3; + tile = GetTile(var_2C, r10); + if (tile->terrainType & TERRAIN_TYPE_SHOP) { + src = &dungeon->unk12BDA[r6]; + } + else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) { + src = &dungeon->unk12BEC[r6]; + } + else if (hallucinating) { + src = &dungeon->unk11884[tile->unk8][r6]; + } + else + { + Entity *tileObject = tile->object; + if (tileObject != NULL) { + if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) { + u8 trapType = tileObject->info->flags; + src = &dungeon->unk12A18[trapType][r6]; + } + else { + src = &dungeon->unk11884[tile->unk8][r6]; + } + } + else if (tile->terrainType & TERRAIN_TYPE_STAIRS) { + src = &dungeon->unk12A18[dungeon->unk3A12][r6]; + } + else { + src = &dungeon->unk11884[tile->unk8][r6]; + } + } + + for (i = 0; i < 23; i++) { + x &= 0x1F; + y &= 0x1F; + gUnknown_202B038[3][y][x] = *src; + src += 3; + y++; + r8++; + if (r8 == 3) { + r8 = 0; + r10++; + r6 = var_28; + tile = GetTile(var_2C, r10); + if (tile->terrainType & TERRAIN_TYPE_SHOP) { + src = &dungeon->unk12BDA[r6]; + } + else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) { + src = &dungeon->unk12BEC[r6]; + } + else if (hallucinating) { + src = &dungeon->unk11884[tile->unk8][r6]; + } + else + { + Entity *tileObject = tile->object; + if (tileObject != NULL) { + if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) { + u8 trapType = tileObject->info->flags; + src = &dungeon->unk12A18[trapType][r6]; + } + else { + src = &dungeon->unk11884[tile->unk8][r6]; + } + } + else if (tile->terrainType & TERRAIN_TYPE_STAIRS) { + src = &dungeon->unk12A18[dungeon->unk3A12][r6]; + } + else { + src = &dungeon->unk11884[tile->unk8][r6]; + } + } + } + } + sub_80098F8(3); +} + +void sub_804A49C(s32 a0, s32 a1) +{ + Tile *tile; + u16 *src; + bool32 hallucinating, unk1820F; + s32 xTemp, yTemp; + s32 i; + s32 var_2C; + s32 r10; + s32 r6; + s32 var_28; + s32 r9; + s32 x, y; + + Dungeon *dungeon = gDungeon; + hallucinating = dungeon->unk181e8.hallucinating; + unk1820F = dungeon->unk181e8.unk1820F; + xTemp = dungeon->unk181e8.cameraPixelPos.x + a0; + yTemp = dungeon->unk181e8.cameraPixelPos.y + a1; + x = xTemp >> 3; + y = yTemp >> 3; + r9 = gUnknown_80F6A4A[30 + x]; + r10 = gUnknown_80F6C06[30 + x]; + var_28 = gUnknown_80F6A4A[30 + y]; + var_2C = gUnknown_80F6C06[30 + y]; + r6 = r9 + var_28 * 3; + tile = GetTile(r10, var_2C); + if (tile->terrainType & TERRAIN_TYPE_SHOP) { + src = &dungeon->unk12BDA[r6]; + } + else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) { + src = &dungeon->unk12BEC[r6]; + } + else if (hallucinating) { + src = &dungeon->unk11884[tile->unk8][r6]; + } + else + { + Entity *tileObject = tile->object; + if (tileObject != NULL) { + if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) { + u8 trapType = tileObject->info->flags; + src = &dungeon->unk12A18[trapType][r6]; + } + else { + src = &dungeon->unk11884[tile->unk8][r6]; + } + } + else if (tile->terrainType & TERRAIN_TYPE_STAIRS) { + src = &dungeon->unk12A18[dungeon->unk3A12][r6]; + } + else { + src = &dungeon->unk11884[tile->unk8][r6]; + } + } + + for (i = 0; i < 31; i++) { + x &= 0x1F; + y &= 0x1F; + gUnknown_202B038[3][y][x] = *src; + src++; + x++; + r9++; + if (r9 == 3) { + r9 = 0; + r10++; + r6 = var_28 * 3; + tile = GetTile(r10, var_2C); + if (tile->terrainType & TERRAIN_TYPE_SHOP) { + src = &dungeon->unk12BDA[r6]; + } + else if (tile->terrainType & TERRAIN_TYPE_UNK_x1000) { + src = &dungeon->unk12BEC[r6]; + } + else if (hallucinating) { + src = &dungeon->unk11884[tile->unk8][r6]; + } + else + { + Entity *tileObject = tile->object; + if (tileObject != NULL) { + if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) { + u8 trapType = tileObject->info->flags; + src = &dungeon->unk12A18[trapType][r6]; + } + else { + src = &dungeon->unk11884[tile->unk8][r6]; + } + } + else if (tile->terrainType & TERRAIN_TYPE_STAIRS) { + src = &dungeon->unk12A18[dungeon->unk3A12][r6]; + } + else { + src = &dungeon->unk11884[tile->unk8][r6]; + } + } + } + } + sub_80098F8(3); +} + +void sub_804A728(Position *pos, s32 a1, u8 a2, u8 a3) +{ + Position spArray[6]; + u16 *src; + s32 k; + Entity *leader; + s32 i, j; + s32 adjacentX, adjacentY; + s32 r5; + s32 r10; + s32 r9; + Position var_48; + s32 var_38, var_34; + s32 x, x2, y; + Dungeon *dungeon = gDungeon; + + leader = GetLeader(); + x = dungeon->unk181e8.cameraPixelPos.x >> 3; + x2 = x; + gDungeon->unk181e8.unk1821A = a3; + i = pos->x; + j = pos->y; + adjacentX = gAdjacentTileOffsets[a1].x; + adjacentY = gAdjacentTileOffsets[a1].y; + for (k = 0; k < 6; k++) { + spArray[k].x = i; + spArray[k].y = j; + i += adjacentX; + j += adjacentY; + } + var_38 = gUnknown_80F6A4A[30 + x2]; + r10 = gUnknown_80F6C06[30 + x2]; + + for (i = 0; i < 31; i++) { + y = dungeon->unk181e8.cameraPixelPos.y >> 3; + var_34 = gUnknown_80F6A4A[30 + y]; + r9 = gUnknown_80F6C06[30 + y]; + r5 = var_38 + var_34 * 3; + var_48.x = r10; + var_48.y = r9; + if (a2 != 0) { + if (r10 == pos->x && r9 == pos->y) { + src = &dungeon->unk12B92[r5]; + } + else { + src = &dungeon->unk13554[r5]; + } + } + else if (!sub_807049C(leader, &var_48) && sub_8045AAC(leader, &var_48)) { + for (k = 0; k < 6; k++) { + if (spArray[k].x == r10 && spArray[k].y == r9) + break; + } + if (k == 6) { + if (gGameOptionsRef->gridEnable) { + src = &dungeon->unk12B80[r5]; + } + else { + src = &dungeon->unk13554[r5]; + } + } + else { + src = &dungeon->unk12B92[r5]; + } + } + else { + src = &dungeon->unk13554[r5]; + } + + for (j = 0; j < 21; j++) { + x &= 0x1F; + y &= 0x1F; + gUnknown_202B038[2][y][x] = *src; + src += 3; + y++; + var_34++; + if (var_34 == 3) { + var_34 = 0; + r9++; + r5 = var_38; + var_48.x = r10; + var_48.y = r9; + if (a2 != 0) { + if (r10 == pos->x && r9 == pos->y) { + src = &dungeon->unk12B92[r5]; + } + else { + src = &dungeon->unk13554[r5]; + } + } + else if (!sub_807049C(leader, &var_48) && sub_8045AAC(leader, &var_48)) { + for (k = 0; k < 6; k++) { + if (spArray[k].x == r10 && spArray[k].y == r9) + break; + } + if (k == 6) { + if (gGameOptionsRef->gridEnable) { + src = &dungeon->unk12B80[r5]; + } + else { + src = &dungeon->unk13554[r5]; + } + } + else { + src = &dungeon->unk12B92[r5]; + } + } + else { + src = &dungeon->unk13554[r5]; + } + } + } + + x++; + var_38++; + if (var_38 == 3) { + var_38 = 0; + r10++; + } + } + + sub_80098F8(2); +} + +void sub_804AA60(void) +{ + s32 i; + s32 j; + for(i = 0; i < 0x20; i++) + { + for(j = 0; j < 0x20; j++) + { + gUnknown_202B038[2][i][j] = 0; + } + } + sub_80098F8(2); + gDungeon->unk181e8.unk1821A = 0; +} + +void sub_804AAAC(void) +{ + s32 x; + s32 y; + struct Tile *tile; + for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++) + { + for(x = 0; x < DUNGEON_MAX_SIZE_X; x++) + { + tile = GetTileSafe(x,y); + tile->unk4 = 0; + } + } +} + +void sub_804AAD4(void) +{ + struct Tile *tile; + struct RoomData *room1; + struct RoomData *room2; + s32 roomIndex; + int x; + int y; + s32 maxRooms; + s32 index; + + for(index = 0; index < MAX_ROOM_COUNT; index++) + { + gDungeon->roomData[index].unk0 = 0; + gDungeon->roomData[index].unk1 = 0; + gDungeon->roomData[index].bottomRightCornerX = 9999; + gDungeon->roomData[index].bottomRightCornerY = 9999; + gDungeon->roomData[index].topLeftCornerX = 0xd8f1; + gDungeon->roomData[index].topLeftCornerY = 0xd8f1; + } + + maxRooms = 0; + for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++) + { + for(x = 0; x < DUNGEON_MAX_SIZE_X; x++) + { + tile = GetTile(x,y); + roomIndex = tile->room; + if (roomIndex != CORRIDOR_ROOM) { + room1 = &gDungeon->roomData[roomIndex]; + room1->unk0 = 1; + if (room1->bottomRightCornerX > x) { + room1->bottomRightCornerX = x; + } + if (room1->bottomRightCornerY > y) { + room1->bottomRightCornerY = y; + } + if (room1->topLeftCornerX < x + 1) { + room1->topLeftCornerX = x + 1; + } + if (room1->topLeftCornerY < y + 1) { + room1->topLeftCornerY = y + 1; + } + if (maxRooms < roomIndex) { + maxRooms = roomIndex; + } + } + } + } + + + for(index = 0; index < MAX_ROOM_COUNT; index++) + { + room2 = &gDungeon->roomData[index]; + if(room2 ->unk0 != 0) + { + room2->unkC = (room2->bottomRightCornerX - 1) * 24; + room2->unk10 = (room2->bottomRightCornerY - 1) * 24; + room2->unk14 = (room2->topLeftCornerX + 1) * 24; + room2->unk18 = (room2->topLeftCornerY + 1) * 24; + } + } + + gDungeon->unk104C0 = maxRooms + 1; +} + +void sub_804AC20(Position *pos) +{ + s32 y; + struct Tile *tile2; + struct Tile *tile; + s32 yMax; + u32 visibilityRange; + s32 xMin; + s32 x; + s32 xMax; + s32 yMin; + s32 roomIndex; + struct RoomData *room; + + tile2 = GetTile(pos->x,pos->y); + roomIndex = tile2->room; + visibilityRange = gDungeon->unk181e8.visibilityRange; + if (!gDungeon->unk181e8.blinded) { + if (visibilityRange == 0) { + visibilityRange = 2; + } + if (roomIndex == CORRIDOR_ROOM) { + xMin = pos->x - visibilityRange; + yMin = pos->y - visibilityRange; + xMax = pos->x + visibilityRange; + yMax = pos->y + visibilityRange; + } + else { + room = &gDungeon->roomData[roomIndex]; + if (room->unk1 != 0) { + return; + } + room->unk1 = 1; + xMin = room->bottomRightCornerX - 1; + yMin = room->bottomRightCornerY - 1; + xMax = room->topLeftCornerX; + yMax = room->topLeftCornerY; + } + for (y = yMin; y <= yMax; y++) { + for (x = xMin; x <= xMax; x++) { + tile = GetTileSafe(x,y); + tile->unk4 = tile->unk4 | 3; + sub_80402AC(x,y); + } + } + } +} diff --git a/src/dungeon_map_access_1.c b/src/dungeon_map_access_1.c deleted file mode 100644 index 45bea0de0..000000000 --- a/src/dungeon_map_access_1.c +++ /dev/null @@ -1,154 +0,0 @@ -#include "global.h" -#include "code_8009804.h" -#include "dungeon_engine.h" -#include "structs/str_dungeon.h" -#include "dungeon_map_access.h" -#include "file_system.h" -#include "random.h" -#include "text1.h" -#include "tile_types.h" - -extern void sub_80402AC(s32, s32); - -void sub_804AA60(void) { - s32 i; - s32 j; - for(i = 0; i < 0x20; i++) - { - for(j = 0; j < 0x20; j++) - { - gUnknown_202B038[2][i][j] = 0; - } - } - sub_80098F8(2); - gDungeon->unk181e8.unk1821A = 0; -} - -void sub_804AAAC(void) -{ - s32 x; - s32 y; - struct Tile *tile; - for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++) - { - for(x = 0; x < DUNGEON_MAX_SIZE_X; x++) - { - tile = GetTileSafe(x,y); - tile->unk4 = 0; - } - } -} - -void sub_804AAD4(void) -{ - struct Tile *tile; - struct RoomData *room1; - struct RoomData *room2; - s32 roomIndex; - int x; - int y; - s32 maxRooms; - s32 index; - - for(index = 0; index < MAX_ROOM_COUNT; index++) - { - gDungeon->roomData[index].unk0 = 0; - gDungeon->roomData[index].unk1 = 0; - gDungeon->roomData[index].bottomRightCornerX = 9999; - gDungeon->roomData[index].bottomRightCornerY = 9999; - gDungeon->roomData[index].topLeftCornerX = 0xd8f1; - gDungeon->roomData[index].topLeftCornerY = 0xd8f1; - } - - maxRooms = 0; - for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++) - { - for(x = 0; x < DUNGEON_MAX_SIZE_X; x++) - { - tile = GetTile(x,y); - roomIndex = tile->room; - if (roomIndex != CORRIDOR_ROOM) { - room1 = &gDungeon->roomData[roomIndex]; - room1->unk0 = 1; - if (room1->bottomRightCornerX > x) { - room1->bottomRightCornerX = x; - } - if (room1->bottomRightCornerY > y) { - room1->bottomRightCornerY = y; - } - if (room1->topLeftCornerX < x + 1) { - room1->topLeftCornerX = x + 1; - } - if (room1->topLeftCornerY < y + 1) { - room1->topLeftCornerY = y + 1; - } - if (maxRooms < roomIndex) { - maxRooms = roomIndex; - } - } - } - } - - - for(index = 0; index < MAX_ROOM_COUNT; index++) - { - room2 = &gDungeon->roomData[index]; - if(room2 ->unk0 != 0) - { - room2->unkC = (room2->bottomRightCornerX - 1) * 24; - room2->unk10 = (room2->bottomRightCornerY - 1) * 24; - room2->unk14 = (room2->topLeftCornerX + 1) * 24; - room2->unk18 = (room2->topLeftCornerY + 1) * 24; - } - } - - gDungeon->unk104C0 = maxRooms + 1; -} - -void sub_804AC20(Position *pos) -{ - s32 y; - struct Tile *tile2; - struct Tile *tile; - s32 yMax; - u32 visibilityRange; - s32 xMin; - s32 x; - s32 xMax; - s32 yMin; - s32 roomIndex; - struct RoomData *room; - - tile2 = GetTile(pos->x,pos->y); - roomIndex = tile2->room; - visibilityRange = gDungeon->unk181e8.visibilityRange; - if (!gDungeon->unk181e8.blinded) { - if (visibilityRange == 0) { - visibilityRange = 2; - } - if (roomIndex == CORRIDOR_ROOM) { - xMin = pos->x - visibilityRange; - yMin = pos->y - visibilityRange; - xMax = pos->x + visibilityRange; - yMax = pos->y + visibilityRange; - } - else { - room = &gDungeon->roomData[roomIndex]; - if (room->unk1 != 0) { - return; - } - room->unk1 = 1; - xMin = room->bottomRightCornerX - 1; - yMin = room->bottomRightCornerY - 1; - xMax = room->topLeftCornerX; - yMax = room->topLeftCornerY; - } - for (y = yMin; y <= yMax; y++) { - for (x = xMin; x <= xMax; x++) { - tile = GetTileSafe(x,y); - tile->unk4 = tile->unk4 | 3; - sub_80402AC(x,y); - } - } - } -}