From 8686fa4c7309dcbdeffb5e12d4b07cf8b9998ee8 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 6 Mar 2025 13:12:11 +0100 Subject: [PATCH] sub_80402AC and game version defines --- asm/code_8040094.s | 715 ---------------------------------- include/global.h | 4 + include/structs/str_dungeon.h | 7 +- src/code_8040094.c | 328 ++++++++++++++++ 4 files changed, 336 insertions(+), 718 deletions(-) diff --git a/asm/code_8040094.s b/asm/code_8040094.s index a5aa409fc..58091e35e 100644 --- a/asm/code_8040094.s +++ b/asm/code_8040094.s @@ -5,721 +5,6 @@ .text - thumb_func_start sub_8040218 -sub_8040218: - push {lr} - ldr r0, _08040230 - ldr r0, [r0] - cmp r0, 0 - beq _08040226 - bl CloseFile -_08040226: - bl sub_8040124 - pop {r0} - bx r0 - .align 2, 0 -_08040230: .4byte gUnknown_202EE04 - thumb_func_end sub_8040218 - - thumb_func_start nullsub_203 -nullsub_203: - bx lr - thumb_func_end nullsub_203 - - thumb_func_start sub_8040238 -sub_8040238: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r1, _0804026C - ldr r0, [r1] - cmp r0, 0 - beq _080402A0 - ldr r0, _08040270 - ldrb r0, [r0] - cmp r0, 0 - beq _080402A0 - movs r6, 0 - ldr r0, _08040274 - mov r8, r0 - adds r7, r1, 0 -_08040256: - cmp r6, 0xE - bne _08040278 - movs r0, 0xEE - mov r1, r8 - bl SetBGPaletteBufferColorArray - movs r0, 0xEE - mov r1, r8 - bl nullsub_5 - b _0804029A - .align 2, 0 -_0804026C: .4byte gUnknown_202EE04 -_08040270: .4byte gUnknown_202EE01 -_08040274: .4byte gFontPalette + 0x4 -_08040278: - adds r5, r6, 0 - adds r5, 0xE0 - ldr r0, [r7] - ldr r0, [r0, 0x4] - lsls r4, r6, 2 - ldr r1, [r0, 0x4] - adds r1, r4 - adds r0, r5, 0 - bl SetBGPaletteBufferColorArray - ldr r0, [r7] - ldr r0, [r0, 0x4] - ldr r1, [r0, 0x4] - adds r1, r4 - adds r0, r5, 0 - bl nullsub_5 -_0804029A: - adds r6, 0x1 - cmp r6, 0xF - ble _08040256 -_080402A0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8040238 - - thumb_func_start sub_80402AC -sub_80402AC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - mov r8, r0 - str r1, [sp] - ldr r4, _0804034C - ldr r0, [r4] - str r0, [sp, 0x4] - movs r1, 0x1 - mov r10, r1 - ldr r0, _08040350 - ldr r0, [r0] - cmp r0, 0 - bne _080402D0 - b _08040776 -_080402D0: - ldr r0, _08040354 - ldrb r0, [r0] - cmp r0, 0 - bne _080402DA - b _08040776 -_080402DA: - bl sub_800EC74 - lsls r0, 24 - cmp r0, 0 - beq _080402E6 - b _08040776 -_080402E6: - mov r2, r8 - cmp r2, 0 - bge _080402EE - b _08040776 -_080402EE: - ldr r3, [sp] - cmp r3, 0x1 - bgt _080402F6 - b _08040776 -_080402F6: - cmp r2, 0x37 - ble _080402FC - b _08040776 -_080402FC: - cmp r3, 0x1E - ble _08040302 - b _08040776 -_08040302: - mov r0, r8 - adds r1, r3, 0 - bl GetTile - mov r9, r0 - ldrh r0, [r0] - movs r5, 0x3 - ands r5, r0 - str r5, [sp, 0x8] - ldr r0, [r4] - ldr r7, _08040358 - adds r1, r0, r7 - ldrb r1, [r1] - str r1, [sp, 0xC] - ldr r2, _0804035C - adds r1, r0, r2 - ldrb r5, [r1] - ldr r3, _08040360 - adds r1, r0, r3 - ldrb r1, [r1] - str r1, [sp, 0x14] - subs r7, 0x2 - adds r1, r0, r7 - ldrb r1, [r1] - str r1, [sp, 0x10] - ldr r1, _08040364 - adds r0, r1 - ldrb r0, [r0] - cmp r5, 0 - beq _08040368 - mov r2, r9 - ldrb r0, [r2, 0x4] - mov r7, r10 - ands r7, r0 - movs r3, 0 - str r3, [sp, 0x18] - b _0804039C - .align 2, 0 -_0804034C: .4byte gDungeon -_08040350: .4byte gUnknown_202EE04 -_08040354: .4byte gUnknown_202EE01 -_08040358: .4byte 0x00018210 -_0804035C: .4byte 0x0001820a -_08040360: .4byte 0x0001820f -_08040364: .4byte 0x0001820b -_08040368: - cmp r0, 0 - beq _08040370 - movs r7, 0x1 - b _08040378 -_08040370: - mov r7, r9 - ldrb r0, [r7, 0x4] - mov r7, r10 - ands r7, r0 -_08040378: - bl GetFloorType - lsls r0, 24 - cmp r0, 0 - bne _08040398 - ldr r0, _08040390 - ldr r0, [r0] - ldr r1, _08040394 - adds r0, r1 - ldrb r0, [r0] - str r0, [sp, 0x18] - b _0804039C - .align 2, 0 -_08040390: .4byte gDungeon -_08040394: .4byte 0x00018211 -_08040398: - movs r2, 0 - str r2, [sp, 0x18] -_0804039C: - bl sub_8094C48 - lsls r0, 24 - cmp r0, 0 - bne _080403A8 - b _08040632 -_080403A8: - ldr r0, _080403FC - ldr r0, [r0] - ldr r3, _08040400 - adds r0, r3 - ldrb r0, [r0] - cmp r0, 0 - beq _080403B8 - b _08040632 -_080403B8: - movs r6, 0 - cmp r5, 0 - bne _0804045E - mov r0, r9 - ldr r4, [r0, 0x10] - cmp r4, 0 - beq _0804045E - adds r0, r4, 0 - bl GetEntityType - adds r1, r0, 0 - ldr r0, _08040404 - ldrb r0, [r0] - cmp r0, 0 - beq _0804045E - cmp r1, 0x1 - bne _0804045E - adds r0, r4, 0 - bl sub_8045804 - lsls r0, 24 - cmp r0, 0 - beq _0804045E - ldr r1, [r4, 0x70] - adds r0, r1, 0 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _080403F6 - cmp r0, 0x47 - bne _08040408 -_080403F6: - movs r0, 0x1 - b _0804040A - .align 2, 0 -_080403FC: .4byte gDungeon -_08040400: .4byte 0x0001356c -_08040404: .4byte gUnknown_202EE00 -_08040408: - movs r0, 0 -_0804040A: - cmp r0, 0 - bne _08040458 - adds r0, r1, 0 - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08040458 - cmp r0, 0x4 - beq _08040458 - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _08040426 - movs r6, 0x2 - b _0804045A -_08040426: - ldrb r0, [r1, 0x7] - cmp r0, 0 - beq _08040458 - ldr r0, _0804044C - mov r1, r8 - strh r1, [r0] - mov r2, sp - ldrh r2, [r2] - strh r2, [r0, 0x2] - ldr r0, _08040450 - ldr r0, [r0] - ldr r3, _08040454 - adds r0, r3 - ldrb r0, [r0] - cmp r0, 0 - beq _0804045A - movs r6, 0x8 - b _0804045A - .align 2, 0 -_0804044C: .4byte gUnknown_203B410 -_08040450: .4byte gDungeon -_08040454: .4byte 0x00018214 -_08040458: - movs r6, 0xA -_0804045A: - movs r0, 0 - mov r10, r0 -_0804045E: - mov r1, r10 - cmp r1, 0 - beq _0804054E - cmp r5, 0 - bne _08040548 - mov r2, r9 - ldr r4, [r2, 0x14] - cmp r4, 0 - beq _08040500 - adds r0, r4, 0 - bl GetEntityType - adds r5, r0, 0 - cmp r7, 0 - bne _0804049E - movs r6, 0 - cmp r5, 0x3 - bne _0804054E - ldr r3, [sp, 0x10] - cmp r3, 0 - bne _08040494 - mov r5, r9 - ldrh r1, [r5, 0x4] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0804054E -_08040494: - ldr r0, [sp, 0x8] - cmp r0, 0 - beq _0804054E - movs r6, 0x3 - b _0804054E -_0804049E: - cmp r5, 0x2 - bne _080404C4 - adds r0, r4, 0 - adds r0, 0x20 - ldrb r0, [r0] - cmp r0, 0 - bne _080404B2 - ldr r1, [sp, 0x14] - cmp r1, 0 - beq _080404C4 -_080404B2: - adds r0, r4, 0 - bl GetTrapData - ldr r1, _080404FC - ldrb r0, [r0] - adds r0, r1 - ldrb r6, [r0] - movs r2, 0 - mov r10, r2 -_080404C4: - mov r3, r10 - cmp r3, 0 - beq _0804054E - cmp r5, 0x3 - bne _080404EC - ldr r5, [sp, 0x10] - cmp r5, 0 - bne _080404E0 - mov r0, r9 - ldrh r1, [r0, 0x4] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080404EC -_080404E0: - ldr r1, [sp, 0x8] - cmp r1, 0 - beq _080404EC - movs r6, 0x3 - movs r2, 0 - mov r10, r2 -_080404EC: - mov r3, r10 - cmp r3, 0 - beq _0804054E - ldr r5, [sp, 0x8] - cmp r5, 0x1 - beq _08040548 - movs r6, 0 - b _0804054E - .align 2, 0 -_080404FC: .4byte gUnknown_80F65F0 -_08040500: - cmp r7, 0 - bne _08040528 - ldr r0, [sp, 0x18] - cmp r0, 0 - beq _08040548 - mov r2, r9 - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _08040548 - bl GetFloorType - lsls r0, 24 - movs r6, 0x5 - cmp r0, 0 - bne _0804054E - movs r6, 0x6 - b _0804054E -_08040528: - mov r3, r9 - ldrh r1, [r3] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _08040548 - bl GetFloorType - lsls r0, 24 - movs r6, 0x5 - cmp r0, 0 - bne _08040544 - movs r6, 0x6 -_08040544: - movs r5, 0 - mov r10, r5 -_08040548: - mov r0, r10 - cmp r0, 0 - bne _0804055A -_0804054E: - ldr r1, [sp, 0xC] - cmp r1, 0 - beq _0804055A - cmp r6, 0 - beq _0804055E - movs r6, 0xB -_0804055A: - cmp r6, 0 - bne _08040606 -_0804055E: - cmp r7, 0 - beq _08040568 - ldr r2, [sp, 0x8] - cmp r2, 0x1 - beq _0804056C -_08040568: - movs r6, 0x1 - b _08040606 -_0804056C: - movs r4, 0xF - ldr r3, [sp] - cmp r3, 0x1E - bgt _0804058A - adds r1, r3, 0 - adds r1, 0x1 - mov r0, r8 - bl GetTile - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x1 - bne _0804058A - movs r4, 0xE -_0804058A: - ldr r5, [sp] - cmp r5, 0 - ble _080405AA - adds r1, r5, 0 - subs r1, 0x1 - mov r0, r8 - bl GetTile - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x1 - bne _080405AA - movs r0, 0x5 - negs r0, r0 - ands r4, r0 -_080405AA: - mov r7, r8 - cmp r7, 0x36 - bgt _080405CA - mov r0, r8 - adds r0, 0x1 - ldr r1, [sp] - bl GetTile - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x1 - bne _080405CA - movs r0, 0x3 - negs r0, r0 - ands r4, r0 -_080405CA: - mov r0, r8 - cmp r0, 0 - ble _080405E8 - subs r0, 0x1 - ldr r1, [sp] - bl GetTile - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x1 - bne _080405E8 - movs r0, 0x9 - negs r0, r0 - ands r4, r0 -_080405E8: - lsls r0, r4, 16 - asrs r6, r0, 16 - mov r2, r9 - ldrh r1, [r2, 0x4] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080405FE - adds r0, r6, 0 - adds r0, 0x10 - b _08040602 -_080405FE: - adds r0, r6, 0 - adds r0, 0x20 -_08040602: - lsls r0, 16 - asrs r6, r0, 16 -_08040606: - ldr r0, _08040618 - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0x6 - bne _0804061C - adds r0, r6, 0 - adds r0, 0x80 - b _0804062C - .align 2, 0 -_08040618: .4byte gGameOptionsRef -_0804061C: - bl DoesNotHaveShadedMap - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0804063A - adds r0, r6, 0 - adds r0, 0x40 -_0804062C: - lsls r0, 16 - asrs r6, r0, 16 - b _0804063A -_08040632: - movs r6, 0x1 - ldr r1, _0804074C - movs r0, 0x64 - strh r0, [r1] -_0804063A: - mov r3, r8 - lsrs r0, r3, 31 - add r0, r8 - asrs r0, 1 - mov r9, r0 - ldr r0, [sp] - subs r0, 0x2 - lsrs r1, r0, 31 - adds r1, r0, r1 - asrs r1, 1 - mov r5, r9 - lsls r3, r5, 1 - mov r7, r8 - subs r3, r7, r3 - lsls r2, r1, 1 - subs r0, r2 - lsls r0, 1 - adds r3, r0 - lsls r0, r1, 3 - subs r5, r0, r1 - lsls r0, r5, 7 - ldr r1, _08040750 - adds r0, r1 - ldr r2, [sp, 0x4] - adds r0, r2, r0 - mov r7, r9 - lsls r1, r7, 5 - adds r4, r0, r1 - ldr r0, _08040754 - ldr r0, [r0] - ldr r1, [r0, 0x4] - lsls r0, r6, 2 - adds r0, r3 - ldr r1, [r1] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - ldr r0, [r4] - ldr r1, [r2] - ands r0, r1 - ldr r1, [r2, 0x4] - orrs r0, r1 - str r0, [r4] - ldr r0, [r4, 0x4] - ldr r1, [r2, 0x8] - ands r0, r1 - ldr r1, [r2, 0xC] - orrs r0, r1 - str r0, [r4, 0x4] - ldr r0, [r4, 0x8] - ldr r1, [r2, 0x10] - ands r0, r1 - ldr r1, [r2, 0x14] - orrs r0, r1 - str r0, [r4, 0x8] - ldr r0, [r4, 0xC] - ldr r1, [r2, 0x18] - ands r0, r1 - ldr r1, [r2, 0x1C] - orrs r0, r1 - str r0, [r4, 0xC] - ldr r0, [r4, 0x10] - ldr r1, [r2, 0x20] - ands r0, r1 - ldr r1, [r2, 0x24] - orrs r0, r1 - str r0, [r4, 0x10] - ldr r0, [r4, 0x14] - ldr r1, [r2, 0x28] - ands r0, r1 - ldr r1, [r2, 0x2C] - orrs r0, r1 - str r0, [r4, 0x14] - ldr r0, [r4, 0x18] - ldr r1, [r2, 0x30] - ands r0, r1 - ldr r1, [r2, 0x34] - orrs r0, r1 - str r0, [r4, 0x18] - ldr r0, [r4, 0x1C] - ldr r1, [r2, 0x38] - ands r0, r1 - ldr r1, [r2, 0x3C] - orrs r0, r1 - str r0, [r4, 0x1C] - ldr r0, [sp, 0x4] - ldr r1, _08040758 - adds r2, r0, r1 - ldrb r0, [r2] - cmp r0, 0 - bne _08040776 - lsls r5, 2 - mov r10, r5 - mov r3, r9 - add r3, r10 - ldr r5, _0804075C - mov r8, r5 - ldr r0, [sp, 0x4] - add r0, r8 - adds r1, r0, r3 - ldrb r0, [r1] - cmp r0, 0 - bne _08040776 - movs r0, 0x1 - strb r0, [r1] - ldr r7, [sp, 0x4] - ldr r1, _08040760 - adds r6, r7, r1 - ldr r5, [r6] - cmp r5, 0x27 - bgt _08040774 - lsls r1, r5, 1 - adds r1, r5 - lsls r1, 2 - ldr r0, _08040764 - adds r2, r7, r0 - adds r2, r1 - ldr r0, _08040768 - lsls r3, 5 - ldr r0, [r0] - adds r0, r3 - str r0, [r2] - ldr r2, _0804076C - adds r0, r7, r2 - adds r0, r1 - str r4, [r0] - ldr r3, _08040770 - adds r2, r7, r3 - adds r2, r1 - mov r0, r10 - add r0, r8 - adds r0, r7, r0 - add r0, r9 - str r0, [r2] - adds r0, r5, 0x1 - str r0, [r6] - b _08040776 - .align 2, 0 -_0804074C: .4byte gUnknown_203B410 -_08040750: .4byte 0x0001822c -_08040754: .4byte gUnknown_202EE04 -_08040758: .4byte 0x0001bdd1 -_0804075C: .4byte 0x0001ba2c -_08040760: .4byte 0x0001bdcc -_08040764: .4byte 0x0001bbec -_08040768: .4byte gUnknown_202EE08 -_0804076C: .4byte 0x0001bbf0 -_08040770: .4byte 0x0001bbf4 -_08040774: - strb r0, [r2] -_08040776: - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80402AC thumb_func_start sub_8040788 sub_8040788: diff --git a/include/global.h b/include/global.h index de3274263..38f0ab311 100644 --- a/include/global.h +++ b/include/global.h @@ -8,6 +8,10 @@ #include "constants/global.h" #include "constants/monster.h" +#define VERSION_BLUE 0 +#define VERSION_RED 1 +#define GAME_VERSION VERSION_RED + // IDE support #if defined(__APPLE__) || defined(__CYGWIN__) #define _(x) x diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 5c4122a78..6a2ab0d03 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -332,9 +332,10 @@ typedef struct unkDungeon57C #define UNK12A18_ARR_COUNT 29 #define UNK12A18_ARR_COUNT_2 9 +// Some palette? struct UnkDungeonGlobal_1822C_Sub { - u8 fill0[0x20]; + u32 arr[8]; }; #define UNK1822C_ARR_COUNT 16 @@ -344,10 +345,10 @@ struct UnkDungeonGlobal_1822C { struct UnkDungeonGlobal_1822C_Sub unk1822C[UNK1822C_ARR_COUNT][UNK1822C_ARR_COUNT_2]; u8 unk1BA2C[UNK1822C_ARR_COUNT][UNK1822C_ARR_COUNT_2]; - u8 fillUnk[0x1e0]; + void *unk1BBEC[40][3]; s32 unk1BDCC; u8 unk1BDD0; - u8 fill1BDD1; + u8 unk1BDD1; u8 unk1BDD2; }; diff --git a/src/code_8040094.c b/src/code_8040094.c index 47e26f463..50819b8d8 100644 --- a/src/code_8040094.c +++ b/src/code_8040094.c @@ -11,6 +11,14 @@ #include "play_time.h" #include "cpu.h" #include "dungeon.h" +#include "game_options.h" +#include "bg_palette_buffer.h" +#include "code_8009804.h" +#include "code_800E9E4.h" +#include "dungeon_generation.h" +#include "dungeon_util.h" +#include "trap.h" +#include "constants/dungeon.h" extern s32 gUnknown_80F6568[]; extern u8 gUnknown_202EE01; @@ -114,3 +122,323 @@ void sub_8040150(bool8 a0) gUnknown_202EE01 = 1; sub_8040238(); } + +void sub_8040218(void) +{ + if (gUnknown_202EE04 != NULL) { + CloseFile(gUnknown_202EE04); + } + sub_8040124(); +} + +UNUSED static void nullsub_203(void) +{ + +} + +struct UnkStruct1 +{ + u32 **unk0; +}; + +struct UnkPaletteFileData +{ + struct UnkStruct1 *unk0; + RGB *pal; +}; + +void sub_8040238(void) +{ + s32 i; + + if (gUnknown_202EE04 == NULL) + return; + if (!gUnknown_202EE01) + return; + + for (i = 0; i < 16; i++) { + if (i == 14) { + SetBGPaletteBufferColorArray(238, &gFontPalette[1]); + nullsub_5(238, &gFontPalette[1]); + } + else { + SetBGPaletteBufferColorArray(i + 224, &((struct UnkPaletteFileData *)(gUnknown_202EE04->data))->pal[i]); + nullsub_5(i + 224, &((struct UnkPaletteFileData *)(gUnknown_202EE04->data))->pal[i]); + } + } +} + +extern u8 GetFloorType(void); +extern bool8 sub_8094C48(void); +extern bool8 sub_8045804(Entity *ent); +extern const u8 gUnknown_80F65F0[]; +extern bool8 DoesNotHaveShadedMap(void); + +void sub_80402AC(s32 x, s32 y) +{ + s32 yAdd = 0; + const Tile *tile; + Dungeon *dungeon; + bool8 blinded; + u32 terrainType; + bool8 hallucinating; + bool8 var_2C; + bool8 var_28; + bool8 r0; + bool8 var_24; + bool8 r7; + s32 r6; + s32 xDiv2, yDiv2; + u32 *src, *dst; + bool8 r10; + s32 r3, yMinus; + + dungeon = gDungeon; + r10 = TRUE; + + if (gUnknown_202EE04 == NULL) + return; + if (!gUnknown_202EE01) + return; + if (sub_800EC74()) + return; + if (GAME_VERSION == VERSION_BLUE) { + if (gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM) { + if (x < 0 || y < 1 || x >= DUNGEON_MAX_SIZE_X || y >= DUNGEON_MAX_SIZE_Y) + return; + yAdd = 1; + } + else { + if (x < 0 || y < 2 || x >= DUNGEON_MAX_SIZE_X || y >= DUNGEON_MAX_SIZE_Y) + return; + yAdd = 0; + } + // FUN_0001d198(); Unknown function call which doesn't exist in red + } + else if (GAME_VERSION == VERSION_RED) { + if (x < 0 || y < 2 || x >= DUNGEON_MAX_SIZE_X || y >= DUNGEON_MAX_SIZE_Y - 1) + return; + } + + tile = GetTile(x, y); + terrainType = GetTerrainType(tile); + hallucinating = gDungeon->unk181e8.hallucinating; + blinded = gDungeon->unk181e8.blinded; + var_28 = gDungeon->unk181e8.unk1820F; + var_2C = gDungeon->unk181e8.unk1820E; + r0 = gDungeon->unk181e8.unk1820B; + if (blinded) { + r7 = tile->spawnOrVisibilityFlags & 1; + var_24 = FALSE; + } + else { + if (r0) { + r7 = TRUE; + } + else { + r7 = tile->spawnOrVisibilityFlags & 1; + } + + if (GetFloorType() == FLOOR_TYPE_NORMAL) { + var_24 = gDungeon->unk181e8.unk18211; + } + else { + var_24 = FALSE; + } + } + + if (sub_8094C48() && !gDungeon->unk1356C) { + r6 = 0; + if (!blinded) { + Entity *entity = tile->monster; + if (entity != NULL) { + s32 entType = GetEntityType(entity); + if (gUnknown_202EE00 && entType == ENTITY_MONSTER && sub_8045804(entity)) { + EntityInfo *entInfo = GetEntInfo(entity); + if (IsExperienceLocked(entInfo->joinedAt.id) || entInfo->monsterBehavior == 1 || entInfo->monsterBehavior == 4) { + r6 = 10; + } + else { + if (entInfo->isNotTeamMember) { + r6 = 2; + } + else if (entInfo->isTeamLeader) { + gUnknown_203B410.x = x; + gUnknown_203B410.y = y; + if (gDungeon->unk181e8.unk18214) { + r6 = 8; + } + } + else { + r6 = 10; + } + } + r10 = FALSE; + } + } + } + if (r10 && !blinded) { + Entity *entity = tile->object; + if (entity != NULL) { + s32 entType = GetEntityType(entity); + if (!r7) { + r6 = 0; + if (entType == ENTITY_ITEM) { + if ((var_2C || (tile->spawnOrVisibilityFlags & 2)) && terrainType != TERRAIN_TYPE_WALL) { + r6 = 3; + } + } + r10 = FALSE; + } + else { + if (entType == ENTITY_TRAP) { + if (entity->isVisible || var_28) { + Trap *trap = GetTrapData(entity); + r6 = gUnknown_80F65F0[trap->id]; + r10 = FALSE; + } + } + } + + if (r10) { + if (entType == ENTITY_ITEM) { + if ((var_2C || (tile->spawnOrVisibilityFlags & 2)) && terrainType != TERRAIN_TYPE_WALL) { + r6 = 3; + r10 = FALSE; + } + } + } + if (r10) { + if (terrainType != TERRAIN_TYPE_NORMAL) { + r6 = 0; + r10 = FALSE; + } + } + } + else { + if (!r7) { + if (var_24 && (tile->terrainType & TERRAIN_TYPE_STAIRS)) { + if (GetFloorType() == FLOOR_TYPE_NORMAL) { + r6 = 6; + } + else { + r6 = 5; + } + r10 = FALSE; + } + } + else { + if ((tile->terrainType & TERRAIN_TYPE_STAIRS)) { + if (GetFloorType() == FLOOR_TYPE_NORMAL) { + r6 = 6; + } + else { + r6 = 5; + } + r10 = FALSE; + } + } + } + } + if (!r10) { + if (hallucinating) { + if (r6 != 0) { + r6 = 11; + } + } + } + if (r6 == 0) { + if (!r7) { + r6 = 1; + } + else if (terrainType != TERRAIN_TYPE_NORMAL) { + r6 = 1; + } + else { + s32 r4 = 1 | 2 | 4 | 8; + if (y < DUNGEON_MAX_SIZE_Y - 1) { + const Tile *adjacentTile = GetTile(x, y + 1); + if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) { + r4 &= ~(1); + } + } + if (y >= 1) { + const Tile *adjacentTile = GetTile(x, y - 1); + if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) { + r4 &= ~(4); + } + } + if (x < DUNGEON_MAX_SIZE_X - 1) { + const Tile *adjacentTile = GetTile(x + 1, y); + if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) { + r4 &= ~(2); + } + } + if (x >= 1) { + const Tile *adjacentTile = GetTile(x - 1, y); + if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) { + r4 &= ~(8); + } + } + + r6 = (s16) r4; + if (tile->spawnOrVisibilityFlags & 2) { + r6 = (s16) (r6 + 16); + } + else { + r6 = (s16) (r6 + 32); + } + } + } + + // Not possible on GBA. + if (gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM) { + r6 = (s16) (r6 + 128); + } + else if (DoesNotHaveShadedMap() == TRUE) { + r6 = (s16) (r6 + 64); + } + } + else { + r6 = 1; + gUnknown_203B410.x = 100; + } + + xDiv2 = x / 2; + yMinus = (y - 2) + yAdd; + yDiv2 = (yMinus / 2); + r3 = x - (xDiv2 * 2); + r3 += (yMinus - (yDiv2 * 2)) * 2; + dst = dungeon->unk1822C.unk1822C[yDiv2][xDiv2].arr; + { + struct UnkPaletteFileData *ptr = ((struct UnkPaletteFileData *)(&gUnknown_202EE04->data)); + src = ptr->unk0->unk0[r6 * 4 + r3]; + } + + dst[0] = (dst[0] & src[0]) | src[1]; + dst[1] = (dst[1] & src[2]) | src[3]; + dst[2] = (dst[2] & src[4]) | src[5]; + dst[3] = (dst[3] & src[6]) | src[7]; + dst[4] = (dst[4] & src[8]) | src[9]; + dst[5] = (dst[5] & src[10]) | src[11]; + dst[6] = (dst[6] & src[12]) | src[13]; + dst[7] = (dst[7] & src[14]) | src[15]; + + if (!dungeon->unk1822C.unk1BDD1 && !dungeon->unk1822C.unk1BA2C[yDiv2][xDiv2]) { + s32 id; + + dungeon->unk1822C.unk1BA2C[yDiv2][xDiv2] = 1; + id = dungeon->unk1822C.unk1BDCC; + if (id < 40) { + dungeon->unk1822C.unk1BBEC[id][0] = gUnknown_202EE08 + ((xDiv2 + yDiv2 * 28) * 32); + dungeon->unk1822C.unk1BBEC[id][1] = dst; + dungeon->unk1822C.unk1BBEC[id][2] = &dungeon->unk1822C.unk1BA2C[yDiv2][xDiv2]; + dungeon->unk1822C.unk1BDCC++; + } + else { + dungeon->unk1822C.unk1BDD1 = 1; + } + } +} + +//