diff --git a/asm/code_8040094.s b/asm/code_8040094.s index 48176725e..a5aa409fc 100644 --- a/asm/code_8040094.s +++ b/asm/code_8040094.s @@ -5,100 +5,6 @@ .text - thumb_func_start sub_8040150 -sub_8040150: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r0, 0 - ldr r2, _080401EC -_08040164: - movs r4, 0 - lsls r1, r0, 3 - adds r3, r0, 0x1 - mov r8, r3 - subs r1, r0 - lsls r0, r1, 7 - ldr r3, _080401F0 - adds r6, r0, r3 - lsls r5, r1, 2 -_08040176: - ldr r0, [r2] - adds r0, r6 - lsls r1, r4, 5 - adds r0, r1 - movs r1, 0x20 - str r2, [sp] - bl CpuClear - ldr r2, [sp] - ldr r0, [r2] - adds r1, r4, r5 - ldr r3, _080401F4 - adds r0, r3 - adds r0, r1 - movs r7, 0 - strb r7, [r0] - adds r4, 0x1 - cmp r4, 0x1B - ble _08040176 - mov r0, r8 - cmp r0, 0xF - ble _08040164 - mov r0, r9 - cmp r0, 0 - bne _080401B0 - ldr r1, _080401F8 - movs r0, 0x64 - strh r0, [r1] - strh r0, [r1, 0x2] -_080401B0: - ldr r3, _080401EC - ldr r0, [r3] - ldr r2, _080401FC - adds r1, r0, r2 - str r7, [r1] - ldr r1, _08040200 - adds r0, r1 - movs r2, 0x1 - strb r2, [r0] - ldr r0, [r3] - ldr r3, _08040204 - adds r0, r3 - strb r7, [r0] - ldr r0, _08040208 - strb r2, [r0] - ldr r1, _0804020C - ldr r0, _08040210 - str r0, [r1] - ldr r0, _08040214 - strb r2, [r0] - bl sub_8040238 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080401EC: .4byte gDungeon -_080401F0: .4byte 0x0001822c -_080401F4: .4byte 0x0001ba2c -_080401F8: .4byte gUnknown_203B410 -_080401FC: .4byte 0x0001bdcc -_08040200: .4byte 0x0001bdd0 -_08040204: .4byte 0x0001bdd2 -_08040208: .4byte gUnknown_202EE00 -_0804020C: .4byte gUnknown_202EE08 -_08040210: .4byte 0x06001700 -_08040214: .4byte gUnknown_202EE01 - thumb_func_end sub_8040150 - thumb_func_start sub_8040218 sub_8040218: push {lr} diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index c5e73164e..5c4122a78 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -332,6 +332,25 @@ typedef struct unkDungeon57C #define UNK12A18_ARR_COUNT 29 #define UNK12A18_ARR_COUNT_2 9 +struct UnkDungeonGlobal_1822C_Sub +{ + u8 fill0[0x20]; +}; + +#define UNK1822C_ARR_COUNT 16 +#define UNK1822C_ARR_COUNT_2 28 + +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]; + s32 unk1BDCC; + u8 unk1BDD0; + u8 fill1BDD1; + u8 unk1BDD2; +}; + // size: 0x1CEDC typedef struct Dungeon { @@ -447,8 +466,8 @@ typedef struct Dungeon /* 0x17B44 */ OpenedFile *sprites[MONSTER_MAX]; /* 0x181E4 */ OpenedFile *paletFile; /* 0x181E8 */ UnkDungeonGlobal_unk181E8_sub unk181e8; - u8 fill18220[0x1BDD4 - 0x1822C]; - struct UnkStructDungeon1BDD4 unk1BDD4; + /* 0x1822C */ struct UnkDungeonGlobal_1822C unk1822C; + /* 0x1BDD4 */ struct UnkStructDungeon1BDD4 unk1BDD4; /* 0x1BE14 */ struct MessageLogString messageLogStrings[MESSAGE_LOG_STRINGS_COUNT]; /* 0x1C570 */ DungeonLocation unk1C570; /* 0x1C574 */ FloorProperties unk1C574; diff --git a/src/code_8040094.c b/src/code_8040094.c index 323f7a101..47e26f463 100644 --- a/src/code_8040094.c +++ b/src/code_8040094.c @@ -9,6 +9,8 @@ #include "dungeon_music.h" #include "file_system.h" #include "play_time.h" +#include "cpu.h" +#include "dungeon.h" extern s32 gUnknown_80F6568[]; extern u8 gUnknown_202EE01; @@ -81,3 +83,34 @@ void sub_8040130(void) { gUnknown_202EE04 = OpenFileAndGetFileDataPtr(&gUnknown_80F6604, &gDungeonFileArchive); } + +extern DungeonPos gUnknown_203B410; +extern u8 gUnknown_202EE00; +extern void *gUnknown_202EE08; + +void sub_8040238(void); + +void sub_8040150(bool8 a0) +{ + s32 i, j; + + for (i = 0; i < UNK1822C_ARR_COUNT; i++) { + for (j = 0; j < UNK1822C_ARR_COUNT_2; j++) { + CpuClear(&gDungeon->unk1822C.unk1822C[i][j], sizeof(struct UnkDungeonGlobal_1822C_Sub)); + gDungeon->unk1822C.unk1BA2C[i][j] = 0; + } + } + + if (!a0) { + gUnknown_203B410.x = 100; + gUnknown_203B410.y = 100; + } + + gDungeon->unk1822C.unk1BDCC = 0; + gDungeon->unk1822C.unk1BDD0 = 1; + gDungeon->unk1822C.unk1BDD2 = 0; + gUnknown_202EE00 = 1; + gUnknown_202EE08 = (void *) VRAM + 0x1700; + gUnknown_202EE01 = 1; + sub_8040238(); +}