diff --git a/asm/code_803E724.s b/asm/code_803E724.s index e43d76df4..8c7ffbc71 100644 --- a/asm/code_803E724.s +++ b/asm/code_803E724.s @@ -6,602 +6,6 @@ .text - - - thumb_func_start sub_803EAF0 -sub_803EAF0: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldr r0, _0803EB20 - ldr r0, [r0] - cmp r4, r0 - bne _0803EB00 - b _0803EC88 -_0803EB00: - cmp r4, 0x5 - bne _0803EB06 - b _0803EC1C -_0803EB06: - cmp r4, 0x5 - bhi _0803EB2E - cmp r4, 0x2 - bne _0803EB10 - b _0803EBFC -_0803EB10: - cmp r4, 0x2 - bhi _0803EB24 - cmp r4, 0 - beq _0803EB70 - cmp r4, 0x1 - beq _0803EB50 - b _0803EC84 - .align 2, 0 -_0803EB20: .4byte gUnknown_202EDD0 -_0803EB24: - cmp r4, 0x3 - beq _0803EB98 - cmp r4, 0x4 - beq _0803EBFC - b _0803EC84 -_0803EB2E: - cmp r4, 0x8 - bne _0803EB34 - b _0803EC34 -_0803EB34: - cmp r4, 0x8 - bhi _0803EB42 - cmp r4, 0x6 - beq _0803EBBC - cmp r4, 0x7 - beq _0803EBDC - b _0803EC84 -_0803EB42: - cmp r4, 0xA - bne _0803EB48 - b _0803EC80 -_0803EB48: - cmp r4, 0xA - bcs _0803EB4E - b _0803EC54 -_0803EB4E: - b _0803EC84 -_0803EB50: - ldr r0, _0803EB6C - ldrb r0, [r0] - cmp r0, 0 - beq _0803EB5E - movs r0, 0 - bl sub_8052210 -_0803EB5E: - bl ResetUnusedInputStruct - bl sub_803EC94 - movs r0, 0 - movs r1, 0x1 - b _0803EC6E - .align 2, 0 -_0803EB6C: .4byte gUnknown_203B40C -_0803EB70: - bl sub_803EC94 - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl xxx_call_save_unk_text_struct_800641C - ldr r0, _0803EB94 - ldrb r0, [r0] - cmp r0, 0 - bne _0803EB88 - b _0803EC84 -_0803EB88: - bl sub_8040A84 - movs r0, 0 - bl sub_8040ABC - b _0803EC84 - .align 2, 0 -_0803EB94: .4byte gUnknown_203B40C -_0803EB98: - ldr r0, _0803EBB4 - movs r1, 0x1 - movs r2, 0x1 - bl xxx_call_save_unk_text_struct_800641C - ldr r0, _0803EBB8 - ldrb r0, [r0] - cmp r0, 0 - beq _0803EC84 - movs r0, 0x1 - bl sub_8040ABC - b _0803EC84 - .align 2, 0 -_0803EBB4: .4byte gUnknown_80F62B0 -_0803EBB8: .4byte gUnknown_203B40C -_0803EBBC: - ldr r0, _0803EBD4 - ldrb r0, [r0] - cmp r0, 0 - beq _0803EBCA - movs r0, 0 - bl sub_8052210 -_0803EBCA: - bl ResetUnusedInputStruct - ldr r0, _0803EBD8 - movs r1, 0x1 - b _0803EC6E - .align 2, 0 -_0803EBD4: .4byte gUnknown_203B40C -_0803EBD8: .4byte gUnknown_80F6310 -_0803EBDC: - ldr r0, _0803EBF4 - ldrb r0, [r0] - cmp r0, 0 - beq _0803EBEA - movs r0, 0 - bl sub_8052210 -_0803EBEA: - bl ResetUnusedInputStruct - ldr r0, _0803EBF8 - movs r1, 0x1 - b _0803EC6E - .align 2, 0 -_0803EBF4: .4byte gUnknown_203B40C -_0803EBF8: .4byte gUnknown_80F6370 -_0803EBFC: - ldr r0, _0803EC18 - ldrb r0, [r0] - cmp r0, 0 - beq _0803EC0A - movs r0, 0 - bl sub_8052210 -_0803EC0A: - bl ResetUnusedInputStruct - bl sub_803EC94 - movs r0, 0 - movs r1, 0x1 - b _0803EC6E - .align 2, 0 -_0803EC18: .4byte gUnknown_203B40C -_0803EC1C: - ldr r0, _0803EC30 - ldrb r0, [r0] - cmp r0, 0 - beq _0803EC2A - movs r0, 0 - bl sub_8052210 -_0803EC2A: - movs r0, 0 - movs r1, 0x1 - b _0803EC6E - .align 2, 0 -_0803EC30: .4byte gUnknown_203B40C -_0803EC34: - ldr r0, _0803EC50 - ldrb r0, [r0] - cmp r0, 0 - beq _0803EC46 - bl sub_8083D44 - movs r0, 0 - bl sub_8052210 -_0803EC46: - movs r0, 0x2 - adds r1, r5, 0 - bl CreateConfirmNameMenu - b _0803EC84 - .align 2, 0 -_0803EC50: .4byte gUnknown_203B40C -_0803EC54: - ldr r0, _0803EC78 - ldrb r0, [r0] - cmp r0, 0 - beq _0803EC66 - movs r0, 0 - bl sub_8052210 - bl sub_8083D44 -_0803EC66: - bl ResetUnusedInputStruct - ldr r0, _0803EC7C - movs r1, 0 -_0803EC6E: - movs r2, 0x1 - bl xxx_call_save_unk_text_struct_800641C - b _0803EC84 - .align 2, 0 -_0803EC78: .4byte gUnknown_203B40C -_0803EC7C: .4byte gUnknown_80F63D0 -_0803EC80: - bl sub_8083D44 -_0803EC84: - ldr r0, _0803EC90 - str r4, [r0] -_0803EC88: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0803EC90: .4byte gUnknown_202EDD0 - thumb_func_end sub_803EAF0 - - thumb_func_start sub_803EC94 -sub_803EC94: - push {lr} - ldr r0, _0803ECB0 - movs r1, 0 - strh r1, [r0, 0x1E] - strh r1, [r0, 0x20] - strh r1, [r0, 0xC] - strh r1, [r0, 0xE] - strh r1, [r0, 0x14] - adds r0, 0x28 - bl sub_801317C - pop {r0} - bx r0 - .align 2, 0 -_0803ECB0: .4byte gUnknown_202EE10 - thumb_func_end sub_803EC94 - - thumb_func_start sub_803ECB4 -sub_803ECB4: - push {r4,r5,lr} - adds r5, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - ldr r1, _0803ECDC - movs r0, 0xA - str r0, [r1] - movs r0, 0 - bl sub_8052210 - bl ResetUnusedInputStruct - adds r0, r5, 0 - movs r1, 0x1 - adds r2, r4, 0 - bl xxx_call_save_unk_text_struct_800641C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0803ECDC: .4byte gUnknown_202EDD0 - thumb_func_end sub_803ECB4 - - thumb_func_start sub_803ECE0 -sub_803ECE0: - push {lr} - ldr r1, _0803ED24 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - cmp r0, 0 - bge _0803ECF2 - movs r0, 0 - str r0, [r1] -_0803ECF2: - ldr r0, [r1] - cmp r0, 0xB - ble _0803ECFC - movs r0, 0 - str r0, [r1] -_0803ECFC: - ldr r0, _0803ED28 - ldr r2, [r0] - ldr r0, [r1] - cmp r0, 0 - bge _0803ED08 - adds r0, 0x3 -_0803ED08: - asrs r1, r0, 2 - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 6 - ldr r1, [r2, 0x4] - adds r1, r0 - movs r2, 0x90 - lsls r2, 2 - ldr r0, _0803ED2C - bl sub_80098BC - pop {r0} - bx r0 - .align 2, 0 -_0803ED24: .4byte gUnknown_202EDD8 -_0803ED28: .4byte gUnknown_202EC94 -_0803ED2C: .4byte 0x06014400 - thumb_func_end sub_803ECE0 - - thumb_func_start sub_803ED30 -sub_803ED30: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - adds r7, r1, 0 - mov r9, r3 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - cmp r5, 0 - beq _0803EDDA - ldr r0, _0803EDAC - ldr r0, [r0] - ldr r1, _0803EDB0 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0803EDDA - movs r4, 0 - ldr r1, _0803EDB4 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0803ED78 - adds r6, r1, 0 -_0803ED64: - movs r0, 0x29 - bl sub_803E46C - adds r4, 0x1 - cmp r4, 0x13 - bgt _0803ED78 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _0803ED64 -_0803ED78: - adds r0, r5, 0 - mov r1, r8 - bl sub_803EF90 - ldr r3, _0803EDB4 - movs r2, 0 - movs r1, 0x3C - strh r1, [r3] - str r7, [r3, 0x4] - ldrh r1, [r7, 0x26] - str r1, [r3, 0x8] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 8 - negs r1, r1 - str r1, [r3, 0xC] - str r2, [r3, 0x10] - mov r2, r9 - cmp r2, 0 - bge _0803EDC8 - ldr r0, _0803EDB8 - cmp r5, r0 - bge _0803EDBC - movs r0, 0x6 - b _0803EDCA - .align 2, 0 -_0803EDAC: .4byte gDungeon -_0803EDB0: .4byte 0x0001820a -_0803EDB4: .4byte gUnknown_202EDE8 -_0803EDB8: .4byte 0xfffffc19 -_0803EDBC: - cmp r5, 0 - blt _0803EDC4 - movs r0, 0xA - b _0803EDCA -_0803EDC4: - movs r0, 0x3 - b _0803EDCA -_0803EDC8: - mov r0, r9 -_0803EDCA: - strh r0, [r3, 0x2] - ldr r0, _0803EDE8 - ldr r1, _0803EDEC - ldr r1, [r1] - adds r1, 0x18 - movs r2, 0x80 - bl sub_80098BC -_0803EDDA: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803EDE8: .4byte 0x060142c0 -_0803EDEC: .4byte gDungeon - thumb_func_end sub_803ED30 - - thumb_func_start sub_803EDF0 -sub_803EDF0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r6, _0803EE18 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _0803EE06 - b _0803EF42 -_0803EE06: - ldr r0, [r6, 0x4] - bl EntityExists - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0803EE1C - strh r0, [r6] - b _0803EF42 - .align 2, 0 -_0803EE18: .4byte gUnknown_202EDE8 -_0803EE1C: - ldr r1, [r6, 0x4] - ldr r0, [r6, 0x8] - ldrh r2, [r1, 0x26] - cmp r0, r2 - beq _0803EE2C - movs r0, 0 - strh r0, [r6] - b _0803EF42 -_0803EE2C: - ldrh r0, [r6] - subs r0, 0x1 - strh r0, [r6] - ldr r4, [r6, 0x10] - adds r3, r4, 0 - subs r3, 0x2E - str r3, [r6, 0x10] - ldr r2, [r1, 0x70] - movs r5, 0xB8 - lsls r5, 1 - adds r0, r2, r5 - movs r1, 0 - ldrsh r0, [r0, r1] - ldr r1, [r6, 0xC] - cmp r1, 0 - bge _0803EE4E - adds r1, 0xFF -_0803EE4E: - asrs r1, 8 - adds r1, r0, r1 - ldr r0, _0803EF50 - ldr r0, [r0] - mov r12, r0 - ldr r0, _0803EF54 - add r0, r12 - movs r5, 0 - ldrsh r0, [r0, r5] - subs r7, r1, r0 - movs r1, 0xB9 - lsls r1, 1 - adds r0, r2, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - adds r1, r3, 0 - cmp r1, 0 - bge _0803EE76 - adds r1, r4, 0 - adds r1, 0xD1 -_0803EE76: - asrs r1, 8 - adds r1, r0, r1 - ldr r0, _0803EF58 - add r0, r12 - movs r3, 0 - ldrsh r0, [r0, r3] - adds r0, 0x18 - subs r2, r1, r0 - movs r0, 0x20 - negs r0, r0 - cmp r7, r0 - blt _0803EF42 - adds r0, 0x18 - cmp r2, r0 - blt _0803EF42 - cmp r7, 0xEF - bgt _0803EF42 - cmp r2, 0x9F - bgt _0803EF42 - ldr r1, _0803EF5C - ands r1, r2 - lsls r1, 4 - ldr r0, _0803EF60 - ldrh r2, [r0, 0x6] - movs r4, 0xF - mov r8, r4 - mov r3, r8 - ands r3, r2 - orrs r3, r1 - strh r3, [r0, 0x6] - ldrh r2, [r0] - ldr r1, _0803EF64 - ands r1, r2 - ldr r2, _0803EF68 - ands r1, r2 - movs r5, 0x3 - mov r9, r5 - ldr r2, _0803EF6C - mov r10, r2 - ands r1, r2 - ldr r2, _0803EF70 - ands r1, r2 - ldr r2, _0803EF74 - ands r1, r2 - movs r5, 0x80 - lsls r5, 7 - ldr r4, _0803EF78 - ands r1, r4 - orrs r1, r5 - strh r1, [r0] - ldr r1, _0803EF7C - ands r7, r1 - ldrh r2, [r0, 0x2] - movs r1, 0xFE - lsls r1, 8 - ands r1, r2 - orrs r1, r7 - ldr r2, _0803EF80 - ands r1, r2 - ands r1, r4 - orrs r1, r5 - strh r1, [r0, 0x2] - ldr r4, _0803EF84 - ldrh r2, [r0, 0x4] - movs r1, 0xFC - lsls r1, 8 - ands r1, r2 - orrs r1, r4 - movs r2, 0 - orrs r1, r2 - strh r1, [r0, 0x4] - ldr r2, _0803EF88 - add r2, r12 - ldrb r2, [r2] - mov r4, r9 - ands r2, r4 - lsls r2, 10 - mov r5, r10 - ands r1, r5 - orrs r1, r2 - movs r4, 0x2 - ldrsh r2, [r6, r4] - mov r5, r8 - ands r2, r5 - lsls r2, 12 - ldr r4, _0803EF5C - ands r1, r4 - orrs r1, r2 - strh r1, [r0, 0x4] - ldr r1, _0803EF8C - ands r3, r1 - subs r1, 0x1 - ands r3, r1 - subs r1, 0x2 - ands r3, r1 - strh r3, [r0, 0x6] - movs r1, 0x80 - lsls r1, 1 - movs r2, 0 - movs r3, 0 - bl AddSprite -_0803EF42: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803EF50: .4byte gDungeon -_0803EF54: .4byte 0x000181f0 -_0803EF58: .4byte 0x000181f2 -_0803EF5C: .4byte 0x00000fff -_0803EF60: .4byte gUnknown_202EDDC -_0803EF64: .4byte 0x0000feff -_0803EF68: .4byte 0x0000fdff -_0803EF6C: .4byte 0x0000f3ff -_0803EF70: .4byte 0x0000efff -_0803EF74: .4byte 0x0000dfff -_0803EF78: .4byte 0x00003fff -_0803EF7C: .4byte 0x000001ff -_0803EF80: .4byte 0x0000c1ff -_0803EF84: .4byte 0x00000216 -_0803EF88: .4byte 0x00018208 -_0803EF8C: .4byte 0x0000fffe - thumb_func_end sub_803EDF0 - thumb_func_start sub_803EF90 sub_803EF90: push {r4-r7,lr} diff --git a/include/code_8009804.h b/include/code_8009804.h index 11de16a16..d698ffa59 100644 --- a/include/code_8009804.h +++ b/include/code_8009804.h @@ -5,7 +5,7 @@ struct unkStruct_202D240 { u32 *unk0; - u32 *unk4; + const u32 *unk4; u32 size; }; @@ -19,7 +19,7 @@ void vram_related_8009804(void); void InitFontPalette(void); void sub_80098A0(void); -void sub_80098BC(u32 *, u32 *, u32); +void sub_80098BC(u32 *, const u32 *, u32); void sub_80098F8(u32); void sub_8009908(void); void sub_80099C0(void); diff --git a/include/cpu.h b/include/cpu.h index 4d3459db4..9042fa8a2 100644 --- a/include/cpu.h +++ b/include/cpu.h @@ -2,7 +2,7 @@ #define GUARD_CPU_H void CpuClear(void *, s32); -void CpuCopy(void *, void *, s32); +void CpuCopy(void *dest, const void *src, s32 size); void nullsub_23(bool8); void SetWindowTitle(u8 *); void sub_800CDA8(u32); diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index a22886bcb..8c4f56fc4 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -180,7 +180,7 @@ typedef struct Dungeon u8 unk11; s16 unk12; s16 unk14; - u8 fill14[0xB8 - 0x16]; + u32 unk18[(0xB8 - 0x18) / 4]; Entity *unkB8; Entity *unkBC; u8 fillC0[0x13C - 0xC0]; diff --git a/include/text1.h b/include/text1.h index c2e068b62..81468c476 100644 --- a/include/text1.h +++ b/include/text1.h @@ -13,6 +13,6 @@ void SelectCharmap(u32); u32 UpdateFadeInTile(u32 a0); u32 sub_80063B0(void); -void xxx_call_save_unk_text_struct_800641C(UnkTextStruct2 *a0, bool8 a1, bool8 a2); +void xxx_call_save_unk_text_struct_800641C(const UnkTextStruct2 *a0, bool8 a1, bool8 a2); -#endif // GUARD_TEXT1_H \ No newline at end of file +#endif // GUARD_TEXT1_H diff --git a/src/code_8009804.c b/src/code_8009804.c index b57403083..50bb2c15c 100644 --- a/src/code_8009804.c +++ b/src/code_8009804.c @@ -79,7 +79,7 @@ void sub_80098A0(void) gUnknown_202D238[3] = 0; } -void sub_80098BC(u32 *r0, u32 *r1, u32 r2) +void sub_80098BC(u32 *r0, const u32 *r1, u32 r2) { if (gUnknown_202D23C < 8) { gUnknown_202D240[gUnknown_202D23C].unk0 = r0; diff --git a/src/code_803E724.c b/src/code_803E724.c index 000db2df5..9e8cb18a5 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -2,8 +2,18 @@ #include "dungeon.h" #include "bg_palette_buffer.h" #include "code_8004AA0.h" +#include "input.h" +#include "text1.h" +#include "code_801602C.h" +#include "menu_input.h" +#include "code_8009804.h" +#include "code_803E46C.h" +#include "dungeon_util.h" +#include "sprite.h" extern s32 gUnknown_202EDC8; +extern u32 gUnknown_202EDD0; +extern s32 gUnknown_202EDD8; struct DungeonPalFile { @@ -13,11 +23,18 @@ struct DungeonPalFile extern struct DungeonPalFile *gDungeonPaletteFile; extern struct DungeonPalFile *gDungeonNameBannerPalette; +extern struct DungeonPalFile *gUnknown_202EC94; extern u8 gUnknown_202ECA4[]; extern u8 gUnknown_202D058[]; extern const u8 gUnknown_80F62AC[]; +extern void sub_8052210(u32); +extern void sub_8040A84(); +extern void sub_8083D44(void); + +void sub_803EC94(void); + void sub_803E874(bool8 r10, s32 r9) { s32 i, index, count; @@ -117,3 +134,260 @@ void sub_803EA10(void) SetBGPaletteBufferColorRGB(248, gUnknown_202D058, gUnknown_202EDC8, NULL); } + +extern u8 gUnknown_203B40C; + +extern const struct UnkTextStruct2 gUnknown_80F62B0[]; +extern const struct UnkTextStruct2 gUnknown_80F6310[]; +extern const struct UnkTextStruct2 gUnknown_80F6370[]; +extern const struct UnkTextStruct2 gUnknown_80F63D0[]; + +void sub_8040ABC(u8 a0); + +void sub_803EAF0(u32 a0, u8 *a1) +{ + if (a0 == gUnknown_202EDD0) + return; + + switch (a0) { + case 1: + if (gUnknown_203B40C != 0) { + sub_8052210(0); + } + ResetUnusedInputStruct(); + sub_803EC94(); + xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE); + break; + case 0: + sub_803EC94(); + xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE); + if (gUnknown_203B40C != 0) { + sub_8040A84(); + sub_8040ABC(0); + } + break; + case 3: + xxx_call_save_unk_text_struct_800641C(gUnknown_80F62B0, TRUE, TRUE); + if (gUnknown_203B40C != 0) { + sub_8040ABC(1); + } + break; + case 6: + if (gUnknown_203B40C != 0) { + sub_8052210(0); + } + ResetUnusedInputStruct(); + xxx_call_save_unk_text_struct_800641C(gUnknown_80F6310, TRUE, TRUE); + break; + case 7: + if (gUnknown_203B40C != 0) { + sub_8052210(0); + } + ResetUnusedInputStruct(); + xxx_call_save_unk_text_struct_800641C(gUnknown_80F6370, TRUE, TRUE); + break; + case 2: + case 4: + if (gUnknown_203B40C != 0) { + sub_8052210(0); + } + ResetUnusedInputStruct(); + sub_803EC94(); + xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE); + break; + case 5: + if (gUnknown_203B40C != 0) { + sub_8052210(0); + } + xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE); + break; + case 8: + if (gUnknown_203B40C != 0) { + sub_8083D44(); + sub_8052210(0); + } + CreateConfirmNameMenu(2, a1); + break; + case 9: + if (gUnknown_203B40C != 0) { + sub_8052210(0); + sub_8083D44(); + } + ResetUnusedInputStruct(); + xxx_call_save_unk_text_struct_800641C(gUnknown_80F63D0, FALSE, TRUE); + break; + case 10: + sub_8083D44(); + break; + case 150: // Dummy case put here to match, any value >= 150 works + break; + } + + gUnknown_202EDD0 = a0; +} + +extern MenuInputStruct gUnknown_202EE10; + +void sub_803EC94(void) +{ + gUnknown_202EE10.unk1E = 0; + gUnknown_202EE10.unk20 = 0; + gUnknown_202EE10.unkC = 0; + gUnknown_202EE10.unkE = 0; + gUnknown_202EE10.unk14.x = 0; + sub_801317C(&gUnknown_202EE10.unk28); +} + +extern void sub_8052210(u32); + +void sub_803ECB4(UnkTextStruct2 *a0, bool8 a1) +{ + gUnknown_202EDD0 = 10; + sub_8052210(0); + ResetUnusedInputStruct(); + xxx_call_save_unk_text_struct_800641C(a0, TRUE, a1); +} + +void sub_803ECE0(void) +{ + gUnknown_202EDD8++; + if (gUnknown_202EDD8 < 0) + gUnknown_202EDD8 = 0; + if (gUnknown_202EDD8 > 11) + gUnknown_202EDD8 = 0; + + sub_80098BC((void *)VRAM + 0x14400, gUnknown_202EC94->unk4 + ((gUnknown_202EDD8 / 4) * 0x240), 0x240); +} + +s32 sub_803EF90(s32 a0, u8 a1); + +struct UnkStruct_202EDE8 +{ + s16 unk0; + s16 unk2; + Entity *unk4; + s32 unk8; + s32 unkC; + s32 unk10; +}; + +extern struct UnkStruct_202EDE8 gUnknown_202EDE8; + +void sub_803ED30(s32 a0, Entity *mon, u8 a2, s32 a3) +{ + s32 i, var; + + if (a0 == 0 || gDungeon->unk181e8.blinded) + return; + + for (i = 0; i < 20; i++) { + if (gUnknown_202EDE8.unk0 == 0) + break; + sub_803E46C(0x29); + } + + var = sub_803EF90(a0, a2); + gUnknown_202EDE8.unk0 = 60; + gUnknown_202EDE8.unk4 = mon; + gUnknown_202EDE8.unk8 = mon->spawnGenID; + gUnknown_202EDE8.unkC = -(var * 768); + gUnknown_202EDE8.unk10 = 0; + + if (a3 < 0) { + if (a0 < -999) { + gUnknown_202EDE8.unk2 = 6; + } + else if (a0 >= 0) { + gUnknown_202EDE8.unk2 = 10; + } + else { + gUnknown_202EDE8.unk2 = 3; + } + } + else { + gUnknown_202EDE8.unk2 = a3; + } + + sub_80098BC((void *) VRAM + 0x142C0, gDungeon->unk18, 0x80); +} + +SpriteOAM gUnknown_202EDDC; + +void sub_803EDF0(void) +{ + EntityInfo *entInfo; + s32 x, y, y1, y2; + + if (gUnknown_202EDE8.unk0 == 0) + return; + if (!EntityExists(gUnknown_202EDE8.unk4)) { + gUnknown_202EDE8.unk0 = 0; + return; + } + if (gUnknown_202EDE8.unk8 != gUnknown_202EDE8.unk4->spawnGenID) { + gUnknown_202EDE8.unk0 = 0; + return; + } + + gUnknown_202EDE8.unk0--; + gUnknown_202EDE8.unk10 -= 46; + entInfo = GetEntInfo(gUnknown_202EDE8.unk4); + x = (entInfo->pixelPos.x + (gUnknown_202EDE8.unkC / 256)) - gDungeon->unk181e8.cameraPixelPos.x; + y1 = (entInfo->pixelPos.y + (gUnknown_202EDE8.unk10 / 256)); + y2 = (gDungeon->unk181e8.cameraPixelPos.y + 24); + y = y1 - y2; + + // sprite oam memes strike again + if (x >= -32 && y >= -8 && x < 240 && y < 160) { + u32 r9; + u32 unk6; + u32 shape, spriteX, palNum, prio, tileNum; + + unk6 = y & SPRITEOAM_MAX_UNK6_4; + unk6 <<= SPRITEOAM_SHIFT_UNK6_4; + gUnknown_202EDDC.unk6 &= ~SPRITEOAM_MASK_UNK6_4; + gUnknown_202EDDC.unk6 |= unk6; + + gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1; + gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2; + r9 = 3; + gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_OBJMODE; + gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_MOSAIC; + gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_BPP; + + shape = 1 << SPRITEOAM_SHIFT_SHAPE; + gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_SHAPE; + gUnknown_202EDDC.attrib1 |= shape; + + spriteX = x & SPRITEOAM_MAX_X; + gUnknown_202EDDC.attrib2 &= ~SPRITEOAM_MASK_X; + gUnknown_202EDDC.attrib2 |= spriteX; + + gUnknown_202EDDC.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM; + gUnknown_202EDDC.attrib2 &= ~SPRITEOAM_MASK_SIZE; + gUnknown_202EDDC.attrib2 |= 1 << SPRITEOAM_SHIFT_SIZE; + + tileNum = 0x216 << SPRITEOAM_SHIFT_TILENUM; + gUnknown_202EDDC.attrib3 &= ~SPRITEOAM_MASK_TILENUM; + gUnknown_202EDDC.attrib3 |= tileNum; + + prio = gDungeon->unk181e8.unk18208 & r9; + prio <<= SPRITEOAM_SHIFT_PRIORITY; + gUnknown_202EDDC.attrib3 &= ~SPRITEOAM_MASK_PRIORITY; + gUnknown_202EDDC.attrib3 |= prio; + + palNum = gUnknown_202EDE8.unk2; + palNum &= 0xF; + palNum <<= SPRITEOAM_SHIFT_PALETTENUM; + gUnknown_202EDDC.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM; + gUnknown_202EDDC.attrib3 |= palNum; + + gUnknown_202EDDC.unk6 &= 0xFFFE; + gUnknown_202EDDC.unk6 &= 0xFFFD; + gUnknown_202EDDC.unk6 &= 0xFFFB; + + AddSprite(&gUnknown_202EDDC, 0x100, NULL, NULL); + } +} + +// diff --git a/src/cpu.c b/src/cpu.c index 862a611ef..d0c6a2338 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -35,7 +35,7 @@ UNUSED static bool8 sub_800CDE0(void) return TRUE; } -void CpuCopy(void *dest, void *src, s32 size) +void CpuCopy(void *dest, const void *src, s32 size) { CpuCopy32(src, dest, size); } diff --git a/src/text1.c b/src/text1.c index a46d98b37..4908b3176 100644 --- a/src/text1.c +++ b/src/text1.c @@ -144,7 +144,7 @@ void SetCharacterMask(int a0) } // TODO: Move xxx_call_save_unk_text_struct_800641C and SaveUnkTextStructAndXXX_8006438 to text2.c ? data.s shows text1 and text2 are merged somehow but not fully -void xxx_call_save_unk_text_struct_800641C(UnkTextStruct2 *a0, bool8 a1, bool8 a2) +void xxx_call_save_unk_text_struct_800641C(const UnkTextStruct2 *a0, bool8 a1, bool8 a2) { UnkTextStruct2_sub r3 = {0, 0}; SaveUnkTextStructAndXXX_8006438(a0, a1, a2, &r3); @@ -186,4 +186,4 @@ static void SaveUnkTextStructAndXXX_8006438(const UnkTextStruct2 *a0, bool8 a1, ptr1 = &gUnknown_20274A5; *ptr2 = ptr0; *ptr1 = 1; -} \ No newline at end of file +}