diff --git a/asm/code_800DAC0.s b/asm/code_800DAC0.s deleted file mode 100644 index 91a2b585e..000000000 --- a/asm/code_800DAC0.s +++ /dev/null @@ -1,194 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - - thumb_func_start sub_800E698 -sub_800E698: - push {r4,r5,lr} - adds r4, r1, 0 - adds r5, r2, 0 - bl sub_800E2C0 - adds r1, r0, 0 - movs r3, 0x1 - negs r3, r3 - cmp r1, r3 - beq _0800E6D2 - ldr r2, _0800E6C8 - movs r0, 0xD0 - muls r1, r0 - ldr r0, [r2] - adds r1, r0, r1 - ldr r0, [r4] - str r0, [r1, 0x18] - ldr r0, [r1, 0x20] - cmp r0, r3 - beq _0800E6CC - ldr r0, [r5] - str r0, [r1, 0x1C] - b _0800E6D2 - .align 2, 0 -_0800E6C8: .4byte gUnknown_203B0CC -_0800E6CC: - movs r0, 0 - strh r0, [r1, 0x1C] - strh r0, [r1, 0x1E] -_0800E6D2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_800E698 - - thumb_func_start sub_800E6D8 -sub_800E6D8: - push {lr} - bl sub_800E2C0 - adds r1, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _0800E6EC - adds r0, r1, 0 - b _0800E6F8 -_0800E6EC: - ldr r2, _0800E6FC - movs r0, 0xD0 - muls r1, r0 - ldr r0, [r2] - adds r0, r1 - ldr r0, [r0, 0x20] -_0800E6F8: - pop {r1} - bx r1 - .align 2, 0 -_0800E6FC: .4byte gUnknown_203B0CC - thumb_func_end sub_800E6D8 - - thumb_func_start sub_800E700 -sub_800E700: - push {lr} - lsls r0, 16 - asrs r0, 16 - bl sub_800E900 - pop {r1} - bx r1 - thumb_func_end sub_800E700 - - thumb_func_start sub_800E710 -sub_800E710: - push {r4-r6,lr} - lsls r0, 16 - asrs r5, r0, 16 - lsls r1, 16 - lsrs r1, 16 - adds r0, r1, 0 - bl sub_800ECB8 - adds r4, r0, 0 - ldr r0, [r4, 0x20] - bl sub_800ECD0 - adds r1, r0, 0 - movs r2, 0 - ldr r0, [r4, 0x1C] - cmp r2, r0 - bge _0800E748 - adds r3, r0, 0 -_0800E734: - movs r6, 0 - ldrsh r0, [r1, r6] - cmp r0, r5 - bne _0800E740 - ldr r0, [r1, 0x4] - b _0800E74A -_0800E740: - adds r2, 0x1 - adds r1, 0xC - cmp r2, r3 - blt _0800E734 -_0800E748: - ldr r0, [r4, 0x14] -_0800E74A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_800E710 - - thumb_func_start sub_800E750 -sub_800E750: - push {r4-r6,lr} - lsls r0, 16 - asrs r5, r0, 16 - lsls r1, 16 - lsrs r1, 16 - adds r0, r1, 0 - bl sub_800ECB8 - adds r4, r0, 0 - ldr r0, [r4, 0x20] - bl sub_800ECD0 - adds r1, r0, 0 - movs r2, 0 - ldr r0, [r4, 0x1C] - cmp r2, r0 - bge _0800E788 - adds r3, r0, 0 -_0800E774: - movs r6, 0 - ldrsh r0, [r1, r6] - cmp r0, r5 - bne _0800E780 - ldr r0, [r1, 0x4] - b _0800E78A -_0800E780: - adds r2, 0x1 - adds r1, 0xC - cmp r2, r3 - blt _0800E774 -_0800E788: - ldr r0, [r4, 0x14] -_0800E78A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_800E750 - - thumb_func_start sub_800E790 -sub_800E790: - push {r4-r6,lr} - lsls r0, 16 - asrs r5, r0, 16 - lsls r1, 16 - lsrs r1, 16 - adds r0, r1, 0 - bl sub_800ECB8 - adds r4, r0, 0 - ldr r0, [r4, 0x20] - bl sub_800ECD0 - adds r1, r0, 0 - movs r2, 0 - ldr r0, [r4, 0x1C] - cmp r2, r0 - bge _0800E7C8 - adds r3, r0, 0 -_0800E7B4: - movs r6, 0 - ldrsh r0, [r1, r6] - cmp r0, r5 - bne _0800E7C0 - ldr r0, [r1, 0x8] - b _0800E7CA -_0800E7C0: - adds r2, 0x1 - adds r1, 0xC - cmp r2, r3 - blt _0800E7B4 -_0800E7C8: - ldr r0, [r4, 0x18] -_0800E7CA: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_800E790 - - .align 2,0 diff --git a/data/data_80B9BB0.s b/data/data_80B9BB0.s index fbc0c1c75..c85c4a002 100644 --- a/data/data_80B9BB0.s +++ b/data/data_80B9BB0.s @@ -25,11 +25,6 @@ gUnknown_80B9C60: @ 80B9C60 .byte 0xFF, 0xFF, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00 -gefob001_string:: @ 80B9C6C - .string "efob001\0" - .align 2,0 -gefob000_string:: @ 80B9C74 - .string "efob000\0" - .align 2,0 + diff --git a/include/code_800E9E4.h b/include/code_800E9E4.h index 09883eee9..fed0c4c4b 100644 --- a/include/code_800E9E4.h +++ b/include/code_800E9E4.h @@ -30,7 +30,8 @@ typedef struct unkStruct_80BDBC4 u8 fillA[0x0c - 0x0a]; s32 unkC; s32 unk10; - u8 fill14[0x1c - 0x14]; + s32 unk14; + s32 unk18; s32 unk1C; s32 unk20; } unkStruct_80BDBC4; diff --git a/include/structs/code_800E9E4.h b/include/structs/code_800E9E4.h index d3f594b11..2ad393c6e 100644 --- a/include/structs/code_800E9E4.h +++ b/include/structs/code_800E9E4.h @@ -19,7 +19,8 @@ typedef struct unkStruct_80C183C // size: 0xc s16 unk0; s16 unk2; - u8 fill4[0xc - 0x4]; + s32 unk4; + s32 unk8; } unkStruct_80C183C; typedef struct unkStruct_800EA44 diff --git a/ld_script.ld b/ld_script.ld index d8e89965b..892829ce3 100755 --- a/ld_script.ld +++ b/ld_script.ld @@ -82,7 +82,6 @@ SECTIONS { src/code_800D090.o(.text); src/code_800D090_1.o(.text); src/code_800DAC0.o(.text); - asm/code_800DAC0.o(.text); src/code_800E9A8.o(.text); src/code_800E9E4.o(.text); src/code_800ED38.o(.text); diff --git a/src/code_800DAC0.c b/src/code_800DAC0.c index 61aab41f5..b59c100db 100644 --- a/src/code_800DAC0.c +++ b/src/code_800DAC0.c @@ -26,15 +26,12 @@ struct unkStruct_800F18C }; extern s32 sub_800E2C0(s32); -extern u32 sub_800E900(void); +extern s32 sub_800E900(s32 a0); extern void sub_8009BE4(void); extern void sub_800F204(OpenedFile *file); extern struct unkStruct_800F18C *sub_800F18C(s32); extern void sub_800DCA8(struct unkStruct_203B0CC_sub *); -extern u8 gefob000_string[]; -extern u8 gefob001_string[]; - extern void sub_800F034(void); extern void sub_800ED38(u32); extern void sub_800F078(); @@ -62,14 +59,14 @@ void sub_800DAC0(u32 fileSelection) switch (gUnknown_203B0CC->fileSelection) { case 1: - filePtr = Call_OpenFileAndGetFileDataPtr(gefob001_string, &gEffectFileArchive); + filePtr = Call_OpenFileAndGetFileDataPtr("efob001", &gEffectFileArchive); if (filePtr != NULL) { sub_8005610(filePtr,0x248,0x1f,0); CloseFile(filePtr); } break; case 0: - filePtr = Call_OpenFileAndGetFileDataPtr(gefob000_string, &gEffectFileArchive); + filePtr = Call_OpenFileAndGetFileDataPtr("efob000", &gEffectFileArchive); if (filePtr != NULL) { sub_8005610(filePtr,0x248,0x1f,0); CloseFile(filePtr); @@ -149,9 +146,9 @@ void sub_800DC14(s32 param_1) } } -u32 sub_800DC9C(void) +s32 sub_800DC9C(s32 a0) { - return sub_800E900(); + return sub_800E900(a0); } void sub_800DCA8(struct unkStruct_203B0CC_sub *param_1) @@ -830,4 +827,86 @@ s32 sub_800E52C(struct UnkStruct_8040094 *a0) } } +UNUSED static void sub_800E698(s32 a0, DungeonPos *pos1, DungeonPos *pos2) +{ + s32 id = sub_800E2C0(a0); + if (id != -1) { + struct unkStruct_203B0CC_sub *ptr = &gUnknown_203B0CC->unk0[id]; + ptr->unkC.unk18 = *pos1; + if (ptr->unkC.unk20 != -1) { + ptr->unkC.unk1c = *pos2; + } + else { + ptr->unkC.unk1c.x = 0; + ptr->unkC.unk1c.y = 0; + } + } +} + +s32 sub_800E6D8(s32 a0) +{ + s32 id = sub_800E2C0(a0); + if (id != -1) { + struct unkStruct_203B0CC_sub *ptr = &gUnknown_203B0CC->unk0[id]; + return ptr->unkC.unk20; + } + else { + return -1; + } +} + +s32 sub_800E700(s32 a0) +{ + return sub_800E900((s16) a0); +} + +unkStruct_80C183C *sub_800ECD0(s32 param_1); + +s32 sub_800E710(s32 a0_, s32 a1) +{ + s32 i; + s32 a0 = (s16) (a0_); + unkStruct_80BDBC4 *unkPtr1 = sub_800ECB8(a1); + unkStruct_80C183C *unkPtr2 = sub_800ECD0(unkPtr1->unk20); + + for (i = 0; i < unkPtr1->unk1C; i++, unkPtr2++) { + if (unkPtr2->unk0 == a0) { + return unkPtr2->unk4; + } + } + return unkPtr1->unk14; +} + +// Literally the same as the func above. +s32 sub_800E750(s32 a0_, s32 a1) +{ + s32 i; + s32 a0 = (s16) (a0_); + unkStruct_80BDBC4 *unkPtr1 = sub_800ECB8(a1); + unkStruct_80C183C *unkPtr2 = sub_800ECD0(unkPtr1->unk20); + + for (i = 0; i < unkPtr1->unk1C; i++, unkPtr2++) { + if (unkPtr2->unk0 == a0) { + return unkPtr2->unk4; + } + } + return unkPtr1->unk14; +} + +// Almost the same as the two funcs above, but returns different fields. +s32 sub_800E790(s32 a0_, s32 a1) +{ + s32 i; + s32 a0 = (s16) (a0_); + unkStruct_80BDBC4 *unkPtr1 = sub_800ECB8(a1); + unkStruct_80C183C *unkPtr2 = sub_800ECD0(unkPtr1->unk20); + + for (i = 0; i < unkPtr1->unk1C; i++, unkPtr2++) { + if (unkPtr2->unk0 == a0) { + return unkPtr2->unk8; + } + } + return unkPtr1->unk18; +} + //