From 94b0d1ceddfe3287ef1541661431c6314e92905e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 8 Oct 2024 09:40:32 +0200 Subject: [PATCH] sub_803F580 --- asm/code_803E724.s | 1067 --------------------------------- include/bg_palette_buffer.h | 2 +- include/structs/str_dungeon.h | 72 +-- src/bg_palette_buffer.c | 2 +- src/code_803E724.c | 685 ++++++++++++++++++++- 5 files changed, 724 insertions(+), 1104 deletions(-) diff --git a/asm/code_803E724.s b/asm/code_803E724.s index 8c7ffbc7..2c957800 100644 --- a/asm/code_803E724.s +++ b/asm/code_803E724.s @@ -6,1073 +6,6 @@ .text - thumb_func_start sub_803EF90 -sub_803EF90: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x58 - str r0, [sp, 0x48] - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _0803F060 - ldr r0, [r0] - adds r0, 0x18 - mov r8, r0 - ldr r0, _0803F064 - ldr r1, [r0] - ldr r0, [r1, 0x4] - movs r2, 0x92 - lsls r2, 1 - adds r0, r2 - str r0, [sp, 0x24] - ldr r0, [r1, 0x4] - movs r3, 0x82 - lsls r3, 1 - adds r0, r3 - str r0, [sp, 0x28] - ldr r0, [r1, 0x4] - adds r0, 0xE4 - str r0, [sp, 0x2C] - ldr r0, [r1, 0x4] - adds r0, 0xC4 - str r0, [sp, 0x30] - ldr r0, [r1, 0x4] - adds r0, 0xA4 - str r0, [sp, 0x34] - ldr r0, [r1, 0x4] - adds r0, 0x84 - str r0, [sp, 0x38] - ldr r0, [r1, 0x4] - adds r0, 0x64 - str r0, [sp, 0x3C] - ldr r0, [r1, 0x4] - adds r0, 0x44 - str r0, [sp, 0x40] - ldr r0, [r1, 0x4] - adds r0, 0x24 - str r0, [sp, 0x44] - add r4, sp, 0x24 - mov r0, sp - adds r1, r4, 0 - movs r2, 0x24 - bl memcpy - movs r1, 0 - movs r6, 0x3 - mov r0, r8 -_0803EFFE: - stm r0!, {r1} - stm r0!, {r1} - stm r0!, {r1} - stm r0!, {r1} - stm r0!, {r1} - stm r0!, {r1} - stm r0!, {r1} - stm r0!, {r1} - subs r6, 0x1 - cmp r6, 0 - bge _0803EFFE - ldr r0, _0803F068 - ldr r1, [sp, 0x48] - cmp r1, r0 - bne _0803F0A6 - adds r0, r4, 0 - ldr r1, _0803F06C - ldm r1!, {r2,r3,r5} - stm r0!, {r2,r3,r5} - ldr r1, [r1] - str r1, [r0] - movs r5, 0 - movs r2, 0 - mov r12, r4 - movs r0, 0x20 - mov r10, r0 -_0803F032: - mov r3, r8 - ldr r0, _0803F064 - ldr r1, [r0] - lsls r0, r2, 2 - add r0, r12 - ldr r0, [r0] - lsls r0, 5 - adds r0, 0x4 - ldr r1, [r1, 0x4] - adds r4, r1, r0 - movs r1, 0x18 - adds r1, r5 - mov r9, r1 - adds r2, 0x1 - str r2, [sp, 0x54] - mov r2, r10 - subs r7, r2, r5 - movs r6, 0x7 -_0803F056: - cmp r5, 0 - bne _0803F070 - movs r1, 0 - ldr r2, [r4] - b _0803F07A - .align 2, 0 -_0803F060: .4byte gDungeon -_0803F064: .4byte gUnknown_202EC9C -_0803F068: .4byte 0x0000270f -_0803F06C: .4byte gUnknown_80F6478 -_0803F070: - ldr r0, [r4] - adds r1, r0, 0 - lsrs r1, r7 - adds r2, r0, 0 - lsls r2, r5 -_0803F07A: - adds r4, 0x4 - ldr r0, [r3] - orrs r0, r2 - str r0, [r3] - ldr r0, [r3, 0x20] - orrs r0, r1 - str r0, [r3, 0x20] - adds r3, 0x4 - subs r6, 0x1 - cmp r6, 0 - bge _0803F056 - mov r5, r9 - cmp r5, 0x1F - ble _0803F09C - subs r5, 0x20 - movs r3, 0x20 - add r8, r3 -_0803F09C: - ldr r2, [sp, 0x54] - cmp r2, 0x3 - ble _0803F032 - movs r0, 0x4 - b _0803F26A -_0803F0A6: - ldr r0, _0803F0D8 - ldr r1, [sp, 0x48] - cmp r1, r0 - ble _0803F0B0 - str r0, [sp, 0x48] -_0803F0B0: - ldr r0, _0803F0DC - ldr r2, [sp, 0x48] - cmp r2, r0 - bge _0803F0BA - str r0, [sp, 0x48] -_0803F0BA: - ldr r1, _0803F0E0 - ldr r0, [r1] - ldr r0, [r0, 0x4] - movs r3, 0xC2 - lsls r3, 1 - adds r2, r0, r3 - cmp r5, 0 - beq _0803F0F4 - ldr r5, [sp, 0x48] - cmp r5, 0 - ble _0803F0E4 - movs r1, 0xA2 - lsls r1, 1 - adds r2, r0, r1 - b _0803F0F4 - .align 2, 0 -_0803F0D8: .4byte 0x000003e7 -_0803F0DC: .4byte 0xfffffc19 -_0803F0E0: .4byte gUnknown_202EC9C -_0803F0E4: - ldr r3, [sp, 0x48] - cmp r3, 0 - bge _0803F0F4 - movs r5, 0xB2 - lsls r5, 1 - adds r2, r0, r5 - negs r3, r3 - str r3, [sp, 0x48] -_0803F0F4: - ldm r2!, {r0} - mov r1, r8 - str r0, [r1] - ldm r2!, {r0} - str r0, [r1, 0x4] - ldm r2!, {r0} - str r0, [r1, 0x8] - ldm r2!, {r0} - str r0, [r1, 0xC] - ldm r2!, {r0} - str r0, [r1, 0x10] - ldm r2!, {r0} - str r0, [r1, 0x14] - ldm r2!, {r0} - str r0, [r1, 0x18] - ldr r0, [r2] - str r0, [r1, 0x1C] - movs r5, 0x18 - movs r2, 0x1 - str r2, [sp, 0x4C] - movs r3, 0 - str r3, [sp, 0x50] - movs r2, 0 -_0803F122: - movs r0, 0 - mov r10, r0 - adds r1, r2, 0x1 - str r1, [sp, 0x54] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - mov r1, sp - ldr r2, _0803F15C - adds r7, r0, r2 -_0803F136: - ldr r0, [r7] - ldr r3, [sp, 0x48] - cmp r0, r3 - bgt _0803F1A2 - ldr r4, [r1] - mov r2, r8 - movs r0, 0x18 - adds r0, r5 - mov r9, r0 - movs r1, 0x20 - subs r1, r5 - mov r12, r1 - movs r6, 0x7 -_0803F150: - cmp r5, 0 - bne _0803F160 - movs r3, 0 - ldr r1, [r4] - b _0803F16C - .align 2, 0 -_0803F15C: .4byte gUnknown_80F6430 -_0803F160: - ldr r0, [r4] - adds r3, r0, 0 - mov r1, r12 - lsrs r3, r1 - adds r1, r0, 0 - lsls r1, r5 -_0803F16C: - adds r4, 0x4 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - ldr r0, [r2, 0x20] - orrs r0, r3 - str r0, [r2, 0x20] - adds r2, 0x4 - movs r3, 0x1 - str r3, [sp, 0x50] - subs r6, 0x1 - cmp r6, 0 - bge _0803F150 - mov r5, r9 - cmp r5, 0x1F - ble _0803F192 - subs r5, 0x20 - movs r0, 0x20 - add r8, r0 -_0803F192: - ldr r0, [r7] - ldr r1, [sp, 0x48] - subs r1, r0 - str r1, [sp, 0x48] - ldr r2, [sp, 0x4C] - adds r2, 0x1 - str r2, [sp, 0x4C] - b _0803F1B0 -_0803F1A2: - adds r1, 0x4 - adds r7, 0x4 - movs r3, 0x1 - add r10, r3 - mov r0, r10 - cmp r0, 0x8 - ble _0803F136 -_0803F1B0: - mov r1, r10 - cmp r1, 0x9 - bne _0803F212 - ldr r2, [sp, 0x50] - cmp r2, 0 - beq _0803F212 - ldr r3, _0803F1DC - ldr r0, [r3] - ldr r0, [r0, 0x4] - adds r4, r0, 0x4 - mov r2, r8 - movs r0, 0x18 - adds r0, r5 - mov r9, r0 - movs r1, 0x20 - subs r7, r1, r5 - movs r6, 0x7 -_0803F1D2: - cmp r5, 0 - bne _0803F1E0 - movs r3, 0 - ldr r1, [r4] - b _0803F1EA - .align 2, 0 -_0803F1DC: .4byte gUnknown_202EC9C -_0803F1E0: - ldr r0, [r4] - adds r3, r0, 0 - lsrs r3, r7 - adds r1, r0, 0 - lsls r1, r5 -_0803F1EA: - adds r4, 0x4 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - ldr r0, [r2, 0x20] - orrs r0, r3 - str r0, [r2, 0x20] - adds r2, 0x4 - subs r6, 0x1 - cmp r6, 0 - bge _0803F1D2 - mov r5, r9 - cmp r5, 0x1F - ble _0803F20C - subs r5, 0x20 - movs r2, 0x20 - add r8, r2 -_0803F20C: - ldr r3, [sp, 0x4C] - adds r3, 0x1 - str r3, [sp, 0x4C] -_0803F212: - ldr r2, [sp, 0x54] - cmp r2, 0x1 - ble _0803F122 - ldr r0, _0803F240 - ldr r1, [r0] - ldr r2, [sp, 0x48] - lsls r0, r2, 5 - adds r0, 0x4 - ldr r1, [r1, 0x4] - adds r1, r0 - mov r3, r8 - ldr r0, [sp, 0x4C] - adds r0, 0x1 - mov r8, r0 - movs r0, 0x20 - subs r7, r0, r5 - movs r6, 0x7 -_0803F234: - cmp r5, 0 - bne _0803F244 - movs r4, 0 - ldr r2, [r1] - b _0803F24E - .align 2, 0 -_0803F240: .4byte gUnknown_202EC9C -_0803F244: - ldr r0, [r1] - adds r4, r0, 0 - lsrs r4, r7 - adds r2, r0, 0 - lsls r2, r5 -_0803F24E: - adds r1, 0x4 - ldr r0, [r3] - orrs r0, r2 - str r0, [r3] - ldr r0, [r3, 0x20] - orrs r0, r4 - str r0, [r3, 0x20] - adds r3, 0x4 - subs r6, 0x1 - cmp r6, 0 - bge _0803F234 - mov r1, r8 - str r1, [sp, 0x4C] - adds r0, r1, 0 -_0803F26A: - add sp, 0x58 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_803EF90 - - thumb_func_start sub_803F27C -sub_803F27C: - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - adds r7, r0, 0 - ldr r0, _0803F360 - mov r8, r0 - ldr r4, [r0] - ldr r2, _0803F364 - adds r1, r4, r2 - movs r2, 0 - movs r3, 0 - strh r3, [r1, 0x8] - strh r3, [r1, 0xA] - strh r3, [r1] - strh r3, [r1, 0x2] - strh r3, [r1, 0xC] - strh r3, [r1, 0xE] - strh r3, [r1, 0x4] - strh r3, [r1, 0x6] - str r3, [r1, 0x14] - ldr r5, _0803F368 - adds r0, r4, r5 - strb r2, [r0] - ldr r6, _0803F36C - adds r0, r4, r6 - movs r5, 0x1 - strb r5, [r0] - adds r6, 0x1 - adds r0, r4, r6 - strb r5, [r0] - adds r6, 0x1 - adds r0, r4, r6 - strb r2, [r0] - str r3, [r1, 0x18] - str r3, [r1, 0x1C] - cmp r7, 0 - bne _0803F2FA - subs r6, 0xF - adds r0, r4, r6 - strb r2, [r0] - adds r6, 0x6 - adds r0, r4, r6 - strb r2, [r0] - subs r6, 0x1 - adds r0, r4, r6 - strb r2, [r0] - subs r6, 0x2 - adds r0, r4, r6 - strb r2, [r0] - adds r6, 0x4 - adds r0, r4, r6 - strb r2, [r0] - subs r6, 0x3 - adds r0, r4, r6 - strb r2, [r0] - subs r6, 0x3 - adds r0, r4, r6 - strb r2, [r0] - adds r6, 0x1 - adds r0, r4, r6 - strb r2, [r0] -_0803F2FA: - str r3, [r1, 0x10] - ldr r1, _0803F370 - adds r0, r4, r1 - movs r6, 0x3 - strb r6, [r0] - adds r1, 0x12 - adds r0, r4, r1 - strb r2, [r0] - subs r1, 0x8 - adds r0, r4, r1 - strb r2, [r0] - adds r1, 0x9 - adds r0, r4, r1 - strb r2, [r0] - adds r1, 0x1 - adds r0, r4, r1 - strb r2, [r0] - subs r1, 0x8 - adds r0, r4, r1 - strb r2, [r0] - ldr r2, _0803F374 - adds r0, r4, r2 - strb r5, [r0] - bl sub_803F38C - ldr r1, _0803F378 - ldr r0, _0803F37C - str r0, [r1] - cmp r7, 0 - bne _0803F354 - mov r1, r8 - ldr r0, [r1] - ldr r2, _0803F380 - adds r0, r2 - ldrb r1, [r0] - adds r0, r6, 0 - ands r0, r1 - ldr r6, _0803F384 - adds r1, r4, r6 - strb r0, [r1] - cmp r0, 0 - bne _0803F354 - ldr r1, _0803F388 - adds r0, r4, r1 - strb r5, [r0] -_0803F354: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803F360: .4byte gDungeon -_0803F364: .4byte 0x000181e8 -_0803F368: .4byte 0x00018216 -_0803F36C: .4byte 0x00018217 -_0803F370: .4byte 0x00018208 -_0803F374: .4byte 0x00018215 -_0803F378: .4byte gUnknown_202EDFC -_0803F37C: .4byte 0x0000ffff -_0803F380: .4byte 0x0001c58a -_0803F384: .4byte 0x00018209 -_0803F388: .4byte 0x0001820c - thumb_func_end sub_803F27C - - thumb_func_start sub_803F38C -sub_803F38C: - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _0803F410 - ldr r1, [r0] - ldr r0, _0803F414 - adds r2, r1, r0 - ldr r0, _0803F418 - strh r0, [r2, 0x3A] - movs r0, 0x1 - negs r0, r0 - strh r0, [r2, 0x3C] - strh r0, [r2, 0x3E] - ldr r0, _0803F41C - adds r1, r0 - movs r0, 0x1 - negs r0, r0 - strh r0, [r1] - strh r0, [r2, 0x36] - strh r0, [r2, 0x38] - ldr r0, _0803F420 - ldr r0, [r0] - ldrb r0, [r0, 0xB] - negs r4, r0 - orrs r4, r0 - asrs r4, 31 - movs r0, 0x80 - lsls r0, 1 - ands r4, r0 - ldr r5, _0803F424 - adds r0, r4, r5 - mov r8, r0 - movs r0, 0xFD - mov r1, r8 - bl SetBGPaletteBufferColorArray - adds r6, r5, 0x4 - adds r6, r4, r6 - movs r0, 0xFE - adds r1, r6, 0 - bl SetBGPaletteBufferColorArray - adds r5, 0x8 - adds r4, r5 - movs r0, 0xFF - adds r1, r4, 0 - bl SetBGPaletteBufferColorArray - movs r0, 0xFD - mov r1, r8 - bl nullsub_5 - movs r0, 0xFE - adds r1, r6, 0 - bl nullsub_5 - movs r0, 0xFF - adds r1, r4, 0 - bl nullsub_5 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0803F410: .4byte gDungeon -_0803F414: .4byte 0x000181e8 -_0803F418: .4byte 0x0000ffff -_0803F41C: .4byte 0x00018228 -_0803F420: .4byte gGameOptionsRef -_0803F424: .4byte gUnknown_202D06C - thumb_func_end sub_803F38C - - thumb_func_start sub_803F428 -sub_803F428: - push {r4-r6,lr} - adds r4, r0, 0 - ldr r0, _0803F484 - ldr r3, [r0] - ldr r0, _0803F488 - adds r2, r3, r0 - ldr r5, [r2, 0x10] - movs r6, 0 - ldrsh r1, [r2, r6] - movs r6, 0 - ldrsh r0, [r4, r6] - subs r1, r0 - cmp r1, 0 - bge _0803F446 - negs r1, r1 -_0803F446: - cmp r1, 0x6 - bgt _0803F498 - movs r0, 0x2 - ldrsh r1, [r2, r0] - movs r6, 0x2 - ldrsh r0, [r4, r6] - subs r1, r0 - cmp r1, 0 - bge _0803F45A - negs r1, r1 -_0803F45A: - cmp r1, 0x5 - bgt _0803F498 - ldr r1, _0803F48C - adds r0, r3, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0803F494 - ldr r6, _0803F490 - adds r0, r3, r6 - ldrb r0, [r0] - cmp r0, 0 - bne _0803F494 - cmp r5, 0 - beq _0803F494 - adds r0, r2, 0 - adds r1, r4, 0 - bl IsPositionActuallyInSight - lsls r0, 24 - lsrs r0, 24 - b _0803F49A - .align 2, 0 -_0803F484: .4byte gDungeon -_0803F488: .4byte 0x000181e8 -_0803F48C: .4byte 0x0001820b -_0803F490: .4byte 0x0001820c -_0803F494: - movs r0, 0x1 - b _0803F49A -_0803F498: - movs r0, 0 -_0803F49A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_803F428 - - thumb_func_start sub_803F4A0 -sub_803F4A0: - push {lr} - adds r2, r0, 0 - ldr r0, _0803F4B8 - ldr r1, [r0] - ldr r3, _0803F4BC - adds r0, r1, r3 - str r2, [r0, 0x10] - cmp r2, 0 - bne _0803F4C0 - adds r3, 0x2E - b _0803F4CA - .align 2, 0 -_0803F4B8: .4byte gDungeon -_0803F4BC: .4byte 0x000181e8 -_0803F4C0: - ldr r0, [r2, 0x70] - ldrb r2, [r0, 0x7] - cmp r2, 0 - bne _0803F4D4 - ldr r3, _0803F4D0 -_0803F4CA: - adds r0, r1, r3 - strb r2, [r0] - b _0803F4DC - .align 2, 0 -_0803F4D0: .4byte 0x00018216 -_0803F4D4: - ldr r0, _0803F4FC - adds r1, r0 - movs r0, 0x1 - strb r0, [r1] -_0803F4DC: - movs r0, 0 - bl sub_803F580 - bl sub_803F38C - ldr r0, _0803F500 - ldr r0, [r0] - ldr r1, _0803F504 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0803F4F8 - bl sub_806CD90 -_0803F4F8: - pop {r0} - bx r0 - .align 2, 0 -_0803F4FC: .4byte 0x00018216 -_0803F500: .4byte gDungeon -_0803F504: .4byte 0x0001356c - thumb_func_end sub_803F4A0 - - thumb_func_start sub_803F508 -sub_803F508: - push {r4,r5,lr} - adds r3, r0, 0 - ldr r0, _0803F520 - ldr r1, [r0] - ldr r0, _0803F524 - adds r4, r1, r0 - cmp r3, 0 - bne _0803F52C - ldr r2, _0803F528 - adds r0, r1, r2 - strb r3, [r0] - b _0803F548 - .align 2, 0 -_0803F520: .4byte gDungeon -_0803F524: .4byte 0x000181e8 -_0803F528: .4byte 0x00018216 -_0803F52C: - ldr r0, [r3, 0x70] - ldrb r2, [r0, 0x7] - cmp r2, 0 - bne _0803F540 - ldr r5, _0803F53C - adds r0, r1, r5 - strb r2, [r0] - b _0803F548 - .align 2, 0 -_0803F53C: .4byte 0x00018216 -_0803F540: - ldr r0, _0803F574 - adds r1, r0 - movs r0, 0x1 - strb r0, [r1] -_0803F548: - str r3, [r4, 0x10] - movs r0, 0 - bl sub_803F580 - bl sub_803F38C - ldr r0, _0803F578 - ldr r0, [r0] - ldr r1, _0803F57C - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0803F566 - bl sub_806CD90 -_0803F566: - bl sub_8049ED4 - bl sub_8040A84 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0803F574: .4byte 0x00018216 -_0803F578: .4byte gDungeon -_0803F57C: .4byte 0x0001356c - thumb_func_end sub_803F508 - - thumb_func_start sub_803F580 -sub_803F580: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r0, _0803F600 - ldr r4, [r0] - ldr r0, _0803F604 - adds r5, r4, r0 - ldr r6, [r5, 0x10] - cmp r6, 0 - bne _0803F59E - b _0803F7A0 -_0803F59E: - adds r0, r6, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0803F5AC - b _0803F7A0 -_0803F5AC: - ldr r7, [r6, 0x70] - ldr r0, [r5, 0x8] - str r0, [r5, 0xC] - ldr r0, [r5] - str r0, [r5, 0x4] - ldrh r0, [r6, 0x4] - strh r0, [r5] - ldrh r0, [r6, 0x6] - strh r0, [r5, 0x2] - ldr r0, [r6, 0xC] - cmp r0, 0 - bge _0803F5C6 - adds r0, 0xFF -_0803F5C6: - asrs r0, 8 - subs r0, 0x78 - strh r0, [r5, 0x8] - ldr r0, [r6, 0x10] - cmp r0, 0 - bge _0803F5D4 - adds r0, 0xFF -_0803F5D4: - asrs r0, 8 - subs r0, 0x60 - strh r0, [r5, 0xA] - adds r0, r6, 0 - movs r1, 0x11 - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0803F610 - ldrb r0, [r7, 0x7] - cmp r0, 0 - beq _0803F610 - ldr r1, _0803F608 - adds r0, r4, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _0803F60C - adds r0, r4, r2 - strb r1, [r0] - b _0803F626 - .align 2, 0 -_0803F600: .4byte gDungeon -_0803F604: .4byte 0x000181e8 -_0803F608: .4byte 0x0001820d -_0803F60C: .4byte 0x0001820e -_0803F610: - adds r0, r7, 0 - adds r0, 0xF0 - ldrb r0, [r0] - adds r1, r5, 0 - adds r1, 0x25 - strb r0, [r1] - adds r0, r7, 0 - adds r0, 0xF1 - ldrb r0, [r0] - adds r1, 0x1 - strb r0, [r1] -_0803F626: - adds r0, r7, 0 - adds r0, 0xF2 - ldrb r0, [r0] - adds r1, r5, 0 - adds r1, 0x29 - strb r0, [r1] - subs r1, 0x7 - ldrb r0, [r1] - mov r8, r0 - adds r0, r5, 0 - adds r0, 0x2C - ldrb r2, [r0] - adds r4, r1, 0 - cmp r2, 0 - bne _0803F670 - adds r0, r7, 0 - adds r0, 0xE8 - ldrb r1, [r0] - adds r7, r0, 0 - cmp r1, 0x1 - bne _0803F656 - strb r1, [r4] - movs r1, 0xE - b _0803F65A -_0803F656: - strb r2, [r4] - movs r1, 0 -_0803F65A: - ldr r2, _0803F66C - ldr r0, [r2] - cmp r0, r1 - beq _0803F678 - str r1, [r2] - adds r0, r1, 0 - bl SetBGOBJEnableFlags - b _0803F678 - .align 2, 0 -_0803F66C: .4byte gUnknown_202EDFC -_0803F670: - ldr r1, _0803F698 - ldr r0, _0803F69C - str r0, [r1] - adds r7, 0xE8 -_0803F678: - ldrb r4, [r4] - cmp r8, r4 - beq _0803F684 - movs r0, 0 - bl sub_8041888 -_0803F684: - adds r0, r5, 0 - adds r0, 0x28 - ldrb r1, [r0] - mov r8, r1 - ldrb r1, [r7] - adds r2, r0, 0 - cmp r1, 0x2 - bne _0803F6A0 - movs r0, 0x1 - b _0803F6A2 - .align 2, 0 -_0803F698: .4byte gUnknown_202EDFC -_0803F69C: .4byte 0x0000ffff -_0803F6A0: - movs r0, 0 -_0803F6A2: - strb r0, [r2] - ldrb r2, [r2] - cmp r8, r2 - beq _0803F6B4 - bl sub_806CC70 - movs r0, 0 - bl sub_8041888 -_0803F6B4: - adds r4, r5, 0 - adds r4, 0x27 - ldrb r2, [r4] - mov r8, r2 - adds r0, r6, 0 - bl CanSeeInvisibleMonsters - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0803F6CC - movs r0, 0x1 -_0803F6CC: - strb r0, [r4] - ldrb r4, [r4] - cmp r8, r4 - beq _0803F6E2 - bl sub_8049ED4 - bl sub_8040A84 - movs r0, 0 - bl sub_8041888 -_0803F6E2: - mov r0, r9 - cmp r0, 0 - beq _0803F76A - adds r0, r5, 0 - adds r0, 0x2B - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0 - bne _0803F76A - movs r2, 0xC - ldrsh r1, [r5, r2] - movs r2, 0x8 - ldrsh r0, [r5, r2] - subs r1, r0 - cmp r1, 0 - bge _0803F704 - negs r1, r1 -_0803F704: - cmp r1, 0x7 - bgt _0803F71C - movs r0, 0xE - ldrsh r1, [r5, r0] - movs r2, 0xA - ldrsh r0, [r5, r2] - subs r1, r0 - cmp r1, 0 - bge _0803F718 - negs r1, r1 -_0803F718: - cmp r1, 0x7 - ble _0803F726 -_0803F71C: - bl sub_8049ED4 - movs r0, 0x1 - strb r0, [r4] - b _0803F76A -_0803F726: - movs r0, 0xC - ldrsh r1, [r5, r0] - movs r2, 0x8 - ldrsh r0, [r5, r2] - cmp r1, r0 - bge _0803F73C - movs r0, 0xF0 - movs r1, 0 - bl sub_804A1F0 - b _0803F748 -_0803F73C: - cmp r1, r0 - ble _0803F748 - movs r0, 0 - movs r1, 0 - bl sub_804A1F0 -_0803F748: - movs r0, 0xE - ldrsh r1, [r5, r0] - movs r2, 0xA - ldrsh r0, [r5, r2] - cmp r1, r0 - bge _0803F75E - movs r0, 0 - movs r1, 0xA0 - bl sub_804A49C - b _0803F76A -_0803F75E: - cmp r1, r0 - ble _0803F76A - movs r0, 0 - movs r1, 0 - bl sub_804A49C -_0803F76A: - ldr r1, [r5] - ldr r0, [r5, 0x4] - cmp r1, r0 - beq _0803F7A0 - movs r5, 0 -_0803F774: - ldr r0, _0803F7B4 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _0803F7B8 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0803F79A - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl sub_80402AC -_0803F79A: - adds r5, 0x1 - cmp r5, 0x13 - ble _0803F774 -_0803F7A0: - bl sub_80400D4 - bl sub_803F7BC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803F7B4: .4byte gDungeon -_0803F7B8: .4byte 0x000135cc - thumb_func_end sub_803F580 - thumb_func_start sub_803F7BC sub_803F7BC: push {r4-r6,lr} diff --git a/include/bg_palette_buffer.h b/include/bg_palette_buffer.h index 2f613353..eade3fb3 100644 --- a/include/bg_palette_buffer.h +++ b/include/bg_palette_buffer.h @@ -3,7 +3,7 @@ void InitBGPaletteBuffer(void); void nullsub_4(s32 index, const u8 *colorArray, s32, u8 *); -void nullsub_5(void); +void nullsub_5(s32 index, const u8 *colorArray); void SetBGPaletteBufferColorArray(s32 index, const u8 *colorArray); void SetBGPaletteBufferColorRGB(s32 index, const u8 *colorArray, s32, u8 *); void TransferBGPaletteBuffer(void); diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 8c4f56fc..af829054 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -82,39 +82,43 @@ typedef struct DungeonMusicPlayer // Size unknown? typedef struct UnkDungeonGlobal_unk181E8_sub { - /* 0x181E8 */ Position cameraPos; - /* 0x181EC */ Position cameraPosMirror; - /* 0x181F0 */ Position cameraPixelPos; - /* 0x181F4 */ Position cameraPixelPosMirror; - /* 0x181F8 */ Entity *cameraTarget; - u32 unk181FC; - u32 unk18200; - u32 unk18204; - u8 unk18208; - /* 0x18209 */ u8 visibilityRange; // Dungeon light level. - /* 0x1820A */ bool8 blinded; // Blacks out the screen when the player has the Blinker status. - u8 unk1820B; - u8 unk1820C; - u8 unk1820D; - u8 unk1820E; - u8 unk1820F; - /* 0x18210 */ bool8 hallucinating; // Displays Substitute and flower sprites when the player has the Cross-Eyed status. - u8 unk18211; - u8 unk18212; - u8 unk18213; - u8 unk18214; - u8 unk18215; - u8 fill18216; - u8 unk18217; - u8 fill18218; - u8 fill18219; - u8 unk1821A; - u8 unk1821B; - u8 unk1821C; - u8 fill1821D; - u8 fill1821E; - u8 fill1821F; -} UnkDungeonGlobal_unk181E8_sub; + /* 0x181E8 */ Position cameraPos; // x0 + /* 0x181EC */ Position cameraPosMirror; // x4 + /* 0x181F0 */ Position cameraPixelPos; // x8 + /* 0x181F4 */ Position cameraPixelPosMirror; // xC + /* 0x181F8 */ Entity *cameraTarget; // x10 + u32 unk181FC; // x14 + u32 unk18200; // x18 + u32 unk18204; // x1C + u8 unk18208; // x20 + /* 0x18209 */ u8 visibilityRange; // x21 Dungeon light level. + /* 0x1820A */ bool8 blinded; // x22 Blacks out the screen when the player has the Blinker status. + u8 unk1820B; // x23 + u8 unk1820C; // x24 + u8 unk1820D; // x25 + u8 unk1820E; // x26 + u8 unk1820F; // x27 + /* 0x18210 */ bool8 hallucinating; // x28 Displays Substitute and flower sprites when the player has the Cross-Eyed status. + u8 unk18211; // x29 + u8 unk18212; // x2A + u8 unk18213; // x2B + u8 unk18214; // x2C + u8 unk18215; // x2D + u8 unk18216; // x2E + u8 unk18217; // x2F + u8 unk18218; // x30 + u8 unk18219; // x31 + u8 unk1821A; // x32 + u8 unk1821B; // x33 + u8 unk1821C; // x34 + u8 fill1821D; // x35 + s16 unk36; // x36 + s16 unk38; // x38 + s16 unk3A; // x3A + s16 unk3C; // x3C + s16 unk3E; // x3E + s16 unk40; // x40 +} UnkDungeonGlobal_unk181E8_sub; // x44 // Sizeof: 0x1C typedef struct UnkDungeonGlobal_unk1C574 @@ -325,7 +329,7 @@ typedef struct Dungeon /* 0x17B44 */ OpenedFile *sprites[MONSTER_MAX]; /* 0x181E4 */ OpenedFile *paletFile; /* 0x181E8 */ UnkDungeonGlobal_unk181E8_sub unk181e8; - u8 fill18220[0x1C06C - 0x18220]; + u8 fill1822C[0x1C06C - 0x1822C]; u32 unk1C06C; u8 fill1C070[0x1C570 - 0x1C070]; /* 0x1C570 */ DungeonLocation unk1C570; diff --git a/src/bg_palette_buffer.c b/src/bg_palette_buffer.c index 5ccede77..a66bbad6 100644 --- a/src/bg_palette_buffer.c +++ b/src/bg_palette_buffer.c @@ -59,7 +59,7 @@ void nullsub_4(s32 index, const u8 *colorArray, s32 a1, u8 *a2) { } -void nullsub_5(void) +void nullsub_5(s32 index, const u8 *colorArray) { } diff --git a/src/code_803E724.c b/src/code_803E724.c index 9e8cb18a..1c26bf1d 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -9,7 +9,15 @@ #include "code_8009804.h" #include "code_803E46C.h" #include "dungeon_util.h" +#include "dungeon_pokemon_attributes.h" #include "sprite.h" +#include "bg_control.h" +#include "game_options.h" +#include "dungeon_range.h" +#include "code_806CD90.h" +#include "dungeon_items.h" +#include "constants/item.h" +#include "constants/status.h" extern s32 gUnknown_202EDC8; extern u32 gUnknown_202EDD0; @@ -311,7 +319,7 @@ void sub_803ED30(s32 a0, Entity *mon, u8 a2, s32 a3) sub_80098BC((void *) VRAM + 0x142C0, gDungeon->unk18, 0x80); } -SpriteOAM gUnknown_202EDDC; +extern SpriteOAM gUnknown_202EDDC; void sub_803EDF0(void) { @@ -390,4 +398,679 @@ void sub_803EDF0(void) } } +/* +Not even attempting this, opened file unknown structs weirdly put on stack, my head hurts just looking at this +s32 sub_803EF90(s32 a0, u8 a1) +{ + +} +*/ + +NAKED s32 sub_803EF90(s32 a0, u8 a1) +{ + 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, 0x58\n" + " str r0, [sp, 0x48]\n" + " lsls r1, 24\n" + " lsrs r5, r1, 24\n" + " ldr r0, _0803F060\n" + " ldr r0, [r0]\n" + " adds r0, 0x18\n" + " mov r8, r0\n" + " ldr r0, _0803F064\n" + " ldr r1, [r0]\n" + " ldr r0, [r1, 0x4]\n" + " movs r2, 0x92\n" + " lsls r2, 1\n" + " adds r0, r2\n" + " str r0, [sp, 0x24]\n" + " ldr r0, [r1, 0x4]\n" + " movs r3, 0x82\n" + " lsls r3, 1\n" + " adds r0, r3\n" + " str r0, [sp, 0x28]\n" + " ldr r0, [r1, 0x4]\n" + " adds r0, 0xE4\n" + " str r0, [sp, 0x2C]\n" + " ldr r0, [r1, 0x4]\n" + " adds r0, 0xC4\n" + " str r0, [sp, 0x30]\n" + " ldr r0, [r1, 0x4]\n" + " adds r0, 0xA4\n" + " str r0, [sp, 0x34]\n" + " ldr r0, [r1, 0x4]\n" + " adds r0, 0x84\n" + " str r0, [sp, 0x38]\n" + " ldr r0, [r1, 0x4]\n" + " adds r0, 0x64\n" + " str r0, [sp, 0x3C]\n" + " ldr r0, [r1, 0x4]\n" + " adds r0, 0x44\n" + " str r0, [sp, 0x40]\n" + " ldr r0, [r1, 0x4]\n" + " adds r0, 0x24\n" + " str r0, [sp, 0x44]\n" + " add r4, sp, 0x24\n" + " mov r0, sp\n" + " adds r1, r4, 0\n" + " movs r2, 0x24\n" + " bl memcpy\n" + " movs r1, 0\n" + " movs r6, 0x3\n" + " mov r0, r8\n" + "_0803EFFE:\n" + " stm r0!, {r1}\n" + " stm r0!, {r1}\n" + " stm r0!, {r1}\n" + " stm r0!, {r1}\n" + " stm r0!, {r1}\n" + " stm r0!, {r1}\n" + " stm r0!, {r1}\n" + " stm r0!, {r1}\n" + " subs r6, 0x1\n" + " cmp r6, 0\n" + " bge _0803EFFE\n" + " ldr r0, _0803F068\n" + " ldr r1, [sp, 0x48]\n" + " cmp r1, r0\n" + " bne _0803F0A6\n" + " adds r0, r4, 0\n" + " ldr r1, _0803F06C\n" + " ldm r1!, {r2,r3,r5}\n" + " stm r0!, {r2,r3,r5}\n" + " ldr r1, [r1]\n" + " str r1, [r0]\n" + " movs r5, 0\n" + " movs r2, 0\n" + " mov r12, r4\n" + " movs r0, 0x20\n" + " mov r10, r0\n" + "_0803F032:\n" + " mov r3, r8\n" + " ldr r0, _0803F064\n" + " ldr r1, [r0]\n" + " lsls r0, r2, 2\n" + " add r0, r12\n" + " ldr r0, [r0]\n" + " lsls r0, 5\n" + " adds r0, 0x4\n" + " ldr r1, [r1, 0x4]\n" + " adds r4, r1, r0\n" + " movs r1, 0x18\n" + " adds r1, r5\n" + " mov r9, r1\n" + " adds r2, 0x1\n" + " str r2, [sp, 0x54]\n" + " mov r2, r10\n" + " subs r7, r2, r5\n" + " movs r6, 0x7\n" + "_0803F056:\n" + " cmp r5, 0\n" + " bne _0803F070\n" + " movs r1, 0\n" + " ldr r2, [r4]\n" + " b _0803F07A\n" + " .align 2, 0\n" + "_0803F060: .4byte gDungeon\n" + "_0803F064: .4byte gUnknown_202EC9C\n" + "_0803F068: .4byte 0x0000270f\n" + "_0803F06C: .4byte gUnknown_80F6478\n" + "_0803F070:\n" + " ldr r0, [r4]\n" + " adds r1, r0, 0\n" + " lsrs r1, r7\n" + " adds r2, r0, 0\n" + " lsls r2, r5\n" + "_0803F07A:\n" + " adds r4, 0x4\n" + " ldr r0, [r3]\n" + " orrs r0, r2\n" + " str r0, [r3]\n" + " ldr r0, [r3, 0x20]\n" + " orrs r0, r1\n" + " str r0, [r3, 0x20]\n" + " adds r3, 0x4\n" + " subs r6, 0x1\n" + " cmp r6, 0\n" + " bge _0803F056\n" + " mov r5, r9\n" + " cmp r5, 0x1F\n" + " ble _0803F09C\n" + " subs r5, 0x20\n" + " movs r3, 0x20\n" + " add r8, r3\n" + "_0803F09C:\n" + " ldr r2, [sp, 0x54]\n" + " cmp r2, 0x3\n" + " ble _0803F032\n" + " movs r0, 0x4\n" + " b _0803F26A\n" + "_0803F0A6:\n" + " ldr r0, _0803F0D8\n" + " ldr r1, [sp, 0x48]\n" + " cmp r1, r0\n" + " ble _0803F0B0\n" + " str r0, [sp, 0x48]\n" + "_0803F0B0:\n" + " ldr r0, _0803F0DC\n" + " ldr r2, [sp, 0x48]\n" + " cmp r2, r0\n" + " bge _0803F0BA\n" + " str r0, [sp, 0x48]\n" + "_0803F0BA:\n" + " ldr r1, _0803F0E0\n" + " ldr r0, [r1]\n" + " ldr r0, [r0, 0x4]\n" + " movs r3, 0xC2\n" + " lsls r3, 1\n" + " adds r2, r0, r3\n" + " cmp r5, 0\n" + " beq _0803F0F4\n" + " ldr r5, [sp, 0x48]\n" + " cmp r5, 0\n" + " ble _0803F0E4\n" + " movs r1, 0xA2\n" + " lsls r1, 1\n" + " adds r2, r0, r1\n" + " b _0803F0F4\n" + " .align 2, 0\n" + "_0803F0D8: .4byte 0x000003e7\n" + "_0803F0DC: .4byte 0xfffffc19\n" + "_0803F0E0: .4byte gUnknown_202EC9C\n" + "_0803F0E4:\n" + " ldr r3, [sp, 0x48]\n" + " cmp r3, 0\n" + " bge _0803F0F4\n" + " movs r5, 0xB2\n" + " lsls r5, 1\n" + " adds r2, r0, r5\n" + " negs r3, r3\n" + " str r3, [sp, 0x48]\n" + "_0803F0F4:\n" + " ldm r2!, {r0}\n" + " mov r1, r8\n" + " str r0, [r1]\n" + " ldm r2!, {r0}\n" + " str r0, [r1, 0x4]\n" + " ldm r2!, {r0}\n" + " str r0, [r1, 0x8]\n" + " ldm r2!, {r0}\n" + " str r0, [r1, 0xC]\n" + " ldm r2!, {r0}\n" + " str r0, [r1, 0x10]\n" + " ldm r2!, {r0}\n" + " str r0, [r1, 0x14]\n" + " ldm r2!, {r0}\n" + " str r0, [r1, 0x18]\n" + " ldr r0, [r2]\n" + " str r0, [r1, 0x1C]\n" + " movs r5, 0x18\n" + " movs r2, 0x1\n" + " str r2, [sp, 0x4C]\n" + " movs r3, 0\n" + " str r3, [sp, 0x50]\n" + " movs r2, 0\n" + "_0803F122:\n" + " movs r0, 0\n" + " mov r10, r0\n" + " adds r1, r2, 0x1\n" + " str r1, [sp, 0x54]\n" + " lsls r0, r2, 3\n" + " adds r0, r2\n" + " lsls r0, 2\n" + " mov r1, sp\n" + " ldr r2, _0803F15C\n" + " adds r7, r0, r2\n" + "_0803F136:\n" + " ldr r0, [r7]\n" + " ldr r3, [sp, 0x48]\n" + " cmp r0, r3\n" + " bgt _0803F1A2\n" + " ldr r4, [r1]\n" + " mov r2, r8\n" + " movs r0, 0x18\n" + " adds r0, r5\n" + " mov r9, r0\n" + " movs r1, 0x20\n" + " subs r1, r5\n" + " mov r12, r1\n" + " movs r6, 0x7\n" + "_0803F150:\n" + " cmp r5, 0\n" + " bne _0803F160\n" + " movs r3, 0\n" + " ldr r1, [r4]\n" + " b _0803F16C\n" + " .align 2, 0\n" + "_0803F15C: .4byte gUnknown_80F6430\n" + "_0803F160:\n" + " ldr r0, [r4]\n" + " adds r3, r0, 0\n" + " mov r1, r12\n" + " lsrs r3, r1\n" + " adds r1, r0, 0\n" + " lsls r1, r5\n" + "_0803F16C:\n" + " adds r4, 0x4\n" + " ldr r0, [r2]\n" + " orrs r0, r1\n" + " str r0, [r2]\n" + " ldr r0, [r2, 0x20]\n" + " orrs r0, r3\n" + " str r0, [r2, 0x20]\n" + " adds r2, 0x4\n" + " movs r3, 0x1\n" + " str r3, [sp, 0x50]\n" + " subs r6, 0x1\n" + " cmp r6, 0\n" + " bge _0803F150\n" + " mov r5, r9\n" + " cmp r5, 0x1F\n" + " ble _0803F192\n" + " subs r5, 0x20\n" + " movs r0, 0x20\n" + " add r8, r0\n" + "_0803F192:\n" + " ldr r0, [r7]\n" + " ldr r1, [sp, 0x48]\n" + " subs r1, r0\n" + " str r1, [sp, 0x48]\n" + " ldr r2, [sp, 0x4C]\n" + " adds r2, 0x1\n" + " str r2, [sp, 0x4C]\n" + " b _0803F1B0\n" + "_0803F1A2:\n" + " adds r1, 0x4\n" + " adds r7, 0x4\n" + " movs r3, 0x1\n" + " add r10, r3\n" + " mov r0, r10\n" + " cmp r0, 0x8\n" + " ble _0803F136\n" + "_0803F1B0:\n" + " mov r1, r10\n" + " cmp r1, 0x9\n" + " bne _0803F212\n" + " ldr r2, [sp, 0x50]\n" + " cmp r2, 0\n" + " beq _0803F212\n" + " ldr r3, _0803F1DC\n" + " ldr r0, [r3]\n" + " ldr r0, [r0, 0x4]\n" + " adds r4, r0, 0x4\n" + " mov r2, r8\n" + " movs r0, 0x18\n" + " adds r0, r5\n" + " mov r9, r0\n" + " movs r1, 0x20\n" + " subs r7, r1, r5\n" + " movs r6, 0x7\n" + "_0803F1D2:\n" + " cmp r5, 0\n" + " bne _0803F1E0\n" + " movs r3, 0\n" + " ldr r1, [r4]\n" + " b _0803F1EA\n" + " .align 2, 0\n" + "_0803F1DC: .4byte gUnknown_202EC9C\n" + "_0803F1E0:\n" + " ldr r0, [r4]\n" + " adds r3, r0, 0\n" + " lsrs r3, r7\n" + " adds r1, r0, 0\n" + " lsls r1, r5\n" + "_0803F1EA:\n" + " adds r4, 0x4\n" + " ldr r0, [r2]\n" + " orrs r0, r1\n" + " str r0, [r2]\n" + " ldr r0, [r2, 0x20]\n" + " orrs r0, r3\n" + " str r0, [r2, 0x20]\n" + " adds r2, 0x4\n" + " subs r6, 0x1\n" + " cmp r6, 0\n" + " bge _0803F1D2\n" + " mov r5, r9\n" + " cmp r5, 0x1F\n" + " ble _0803F20C\n" + " subs r5, 0x20\n" + " movs r2, 0x20\n" + " add r8, r2\n" + "_0803F20C:\n" + " ldr r3, [sp, 0x4C]\n" + " adds r3, 0x1\n" + " str r3, [sp, 0x4C]\n" + "_0803F212:\n" + " ldr r2, [sp, 0x54]\n" + " cmp r2, 0x1\n" + " ble _0803F122\n" + " ldr r0, _0803F240\n" + " ldr r1, [r0]\n" + " ldr r2, [sp, 0x48]\n" + " lsls r0, r2, 5\n" + " adds r0, 0x4\n" + " ldr r1, [r1, 0x4]\n" + " adds r1, r0\n" + " mov r3, r8\n" + " ldr r0, [sp, 0x4C]\n" + " adds r0, 0x1\n" + " mov r8, r0\n" + " movs r0, 0x20\n" + " subs r7, r0, r5\n" + " movs r6, 0x7\n" + "_0803F234:\n" + " cmp r5, 0\n" + " bne _0803F244\n" + " movs r4, 0\n" + " ldr r2, [r1]\n" + " b _0803F24E\n" + " .align 2, 0\n" + "_0803F240: .4byte gUnknown_202EC9C\n" + "_0803F244:\n" + " ldr r0, [r1]\n" + " adds r4, r0, 0\n" + " lsrs r4, r7\n" + " adds r2, r0, 0\n" + " lsls r2, r5\n" + "_0803F24E:\n" + " adds r1, 0x4\n" + " ldr r0, [r3]\n" + " orrs r0, r2\n" + " str r0, [r3]\n" + " ldr r0, [r3, 0x20]\n" + " orrs r0, r4\n" + " str r0, [r3, 0x20]\n" + " adds r3, 0x4\n" + " subs r6, 0x1\n" + " cmp r6, 0\n" + " bge _0803F234\n" + " mov r1, r8\n" + " str r1, [sp, 0x4C]\n" + " adds r0, r1, 0\n" + "_0803F26A:\n" + " add sp, 0x58\n" + " pop {r3-r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov r10, r5\n" + " pop {r4-r7}\n" + " pop {r1}\n" + " bx r1\n"); +} + +void sub_803F38C(void); + +extern u32 gUnknown_202EDFC; + +void sub_803F27C(bool8 a0) +{ + UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8; + + strPtr->cameraPixelPos.x = 0; + strPtr->cameraPixelPos.y = 0; + strPtr->cameraPos.x = 0; + strPtr->cameraPos.y = 0; + strPtr->cameraPixelPosMirror.x = 0; + strPtr->cameraPixelPosMirror.y = 0; + strPtr->cameraPosMirror.x = 0; + strPtr->cameraPosMirror.y = 0; + + strPtr->unk181FC = 0; + strPtr->unk18216 = 0; + strPtr->unk18217 = 1; + strPtr->unk18218 = 1; + strPtr->unk18219 = 0; + + strPtr->unk18200 = 0; + strPtr->unk18204 = 0; + if (!a0) { + strPtr->blinded = 0; + strPtr->hallucinating = 0; + strPtr->unk1820F = 0; + strPtr->unk1820D = 0; + strPtr->unk18211 = 0; + strPtr->unk1820E = 0; + strPtr->unk1820B = 0; + strPtr->unk1820C = 0; + } + + strPtr->cameraTarget = NULL; + strPtr->unk18208 = 3; + strPtr->unk1821A = 0; + strPtr->unk18212 = 0; + strPtr->unk1821B = 0; + strPtr->unk1821C = 0; + strPtr->unk18214 = 0; + strPtr->unk18215 = 1; + sub_803F38C(); + + gUnknown_202EDFC = 0xFFFF; + if (!a0) { + strPtr->visibilityRange = gDungeon->unk1C574.unk16 & 3; + if (strPtr->visibilityRange == 0) { + strPtr->unk1820C = 1; + } + } +} + +extern u8 gUnknown_202D06C[]; + +void sub_803F38C(void) +{ + s32 palAdd; + UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8; + + strPtr->unk3A = -1; + strPtr->unk3C = -1; + strPtr->unk3E = -1; + strPtr->unk40 = -1; + strPtr->unk36 = -1; + strPtr->unk38 = -1; + + palAdd = (gGameOptionsRef->playerGender != MALE) ? 256 : 0; + + SetBGPaletteBufferColorArray(0xFD, &gUnknown_202D06C[0 + palAdd]); + SetBGPaletteBufferColorArray(0xFE, &gUnknown_202D06C[4 + palAdd]); + SetBGPaletteBufferColorArray(0xFF, &gUnknown_202D06C[8 + palAdd]); + + nullsub_5(0xFD, &gUnknown_202D06C[0 + palAdd]); + nullsub_5(0xFE, &gUnknown_202D06C[4 + palAdd]); + nullsub_5(0xFF, &gUnknown_202D06C[8 + palAdd]); +} + +bool8 sub_803F428(Position *pos) +{ + UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8; + Entity *cameraEntity = strPtr->cameraTarget; + + if (abs(strPtr->cameraPos.x - pos->x) <= 6 && abs(strPtr->cameraPos.y - pos->y) <= 5) { + if (strPtr->unk1820B == 0 && strPtr->unk1820C == 0 && cameraEntity != NULL) { + return IsPositionActuallyInSight(&strPtr->cameraPos, pos); + } + return TRUE; + } + + return FALSE; +} + +void sub_803F580(u8 a0); +void sub_803F7BC(void); +extern void sub_8049ED4(void); +extern void sub_8040A84(void); +extern void sub_80400D4(void); + +void sub_803F4A0(Entity *a0) +{ + UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8; + + strPtr->cameraTarget = a0; + if (a0 == NULL) { + strPtr->unk18216 = 0; + } + else if (!GetEntInfo(a0)->isTeamLeader) { + strPtr->unk18216 = 0; + } + else { + strPtr->unk18216 = 1; + } + + sub_803F580(0); + sub_803F38C(); + if (gDungeon->unk1356C == 0) { + sub_806CD90(); + } +} + +// Very similar to the one above +void sub_803F508(Entity *a0) +{ + UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8; + + if (a0 == NULL) { + strPtr->unk18216 = 0; + } + else if (!GetEntInfo(a0)->isTeamLeader) { + strPtr->unk18216 = 0; + } + else { + strPtr->unk18216 = 1; + } + strPtr->cameraTarget = a0; + + sub_803F580(0); + sub_803F38C(); + if (gDungeon->unk1356C == 0) { + sub_806CD90(); + } + sub_8049ED4(); + sub_8040A84(); +} + +extern void sub_8041888(u8 param_1); +extern void sub_804A1F0(s32 a0, s32 a1); +extern void sub_804A49C(s32 a0, s32 a1); +extern void sub_80402AC(s32, s32); + +void sub_803F580(u8 a0) +{ + UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8; + Entity *cameraTarget = strPtr->cameraTarget; + + if (cameraTarget != NULL && EntityExists(cameraTarget)) { + s32 i; + u32 before, unk18214; + EntityInfo *info = GetEntInfo(cameraTarget); + + strPtr->cameraPixelPosMirror = strPtr->cameraPixelPos; + strPtr->cameraPosMirror = strPtr->cameraPos; + strPtr->cameraPos.x = cameraTarget->pos.x; + strPtr->cameraPos.y = cameraTarget->pos.y; + + strPtr->cameraPixelPos.x = (cameraTarget->pixelPos.x / 256) - 120; + strPtr->cameraPixelPos.y = (cameraTarget->pixelPos.y / 256) - 96; + + if (HasHeldItem(cameraTarget, ITEM_X_RAY_SPECS) && info->isTeamLeader) { + strPtr->unk1820D = 1; + strPtr->unk1820E = 1; + } + else { + strPtr->unk1820D = info->powerEars; + strPtr->unk1820E = info->scanning; + } + + strPtr->unk18211 = info->stairSpotter; + before = strPtr->blinded; + unk18214 = strPtr->unk18214; + if (unk18214 == 0) { + u32 unkVar; + if (info->eyesightStatus.eyesightStatus == STATUS_BLINKER) { + strPtr->blinded = 1; + unkVar = 0xE; + } + else { + strPtr->blinded = unk18214; + unkVar = 0; + } + + if (gUnknown_202EDFC != unkVar) { + gUnknown_202EDFC = unkVar; + SetBGOBJEnableFlags(unkVar); + } + } + else { + gUnknown_202EDFC = 0xFFFF; + } + + if (before != strPtr->blinded) { + sub_8041888(0); + } + + before = strPtr->hallucinating; + if (info->eyesightStatus.eyesightStatus == STATUS_CROSS_EYED) { + strPtr->hallucinating = 1; + } + else { + strPtr->hallucinating = 0; + } + + if (before != strPtr->hallucinating) { + sub_806CC70(); + sub_8041888(0); + } + + before = strPtr->unk1820F; + if (CanSeeInvisibleMonsters(cameraTarget)) { + strPtr->unk1820F = 1; + } + else { + strPtr->unk1820F = 0; + } + + if (before != strPtr->unk1820F) { + sub_8049ED4(); + sub_8040A84(); + sub_8041888(0); + } + + if (a0 && strPtr->unk18213 == 0) { + if (abs(strPtr->cameraPixelPosMirror.x - strPtr->cameraPixelPos.x) > 7 || abs(strPtr->cameraPixelPosMirror.y - strPtr->cameraPixelPos.y) > 7) { + sub_8049ED4(); + strPtr->unk18213 = 1; + } + else { + if (strPtr->cameraPixelPosMirror.x < strPtr->cameraPixelPos.x) { + sub_804A1F0(240, 0); + } + else if (strPtr->cameraPixelPosMirror.x > strPtr->cameraPixelPos.x) { + sub_804A1F0(0, 0); + } + + if (strPtr->cameraPixelPosMirror.y < strPtr->cameraPixelPos.y) { + sub_804A49C(0, 160); + } + else if (strPtr->cameraPixelPosMirror.y > strPtr->cameraPixelPos.y) { + sub_804A49C(0, 0); + } + } + } + + if (strPtr->cameraPos.x != strPtr->cameraPosMirror.x || strPtr->cameraPos.y != strPtr->cameraPosMirror.y) { + for (i = 0; i < DUNGEON_MAX_POKEMON; i++) { + Entity *mon = gDungeon->allPokemon[i]; + if (EntityExists(mon)) { + sub_80402AC(mon->pos.x, mon->pos.y); + } + } + } + } + + sub_80400D4(); + sub_803F7BC(); +} + //