diff --git a/asm/code_80035F0.s b/asm/code_80035F0.s index dd96da923..05d1d2980 100644 --- a/asm/code_80035F0.s +++ b/asm/code_80035F0.s @@ -5,659 +5,6 @@ .text - @ Unused - thumb_func_start sub_80035F8 -sub_80035F8: - push {lr} - pop {r0} - bx r0 - thumb_func_end sub_80035F8 - - thumb_func_start sub_8003600 -sub_8003600: - push {r4-r6,lr} - ldr r1, _08003650 - ldr r6, _08003654 - movs r2, 0 - ldr r0, _08003658 - movs r3, 0x80 - lsls r3, 2 -_0800360E: - strb r2, [r0] - strb r2, [r0, 0x1] - strb r2, [r0, 0x2] - strb r2, [r0, 0x3] - adds r0, 0x4 - subs r3, 0x1 - cmp r3, 0 - bne _0800360E - movs r0, 0 - movs r5, 0x80 - lsls r5, 1 - ldr r4, _0800365C - movs r3, 0x20 - ldr r2, _08003660 -_0800362A: - strb r0, [r1] - strh r5, [r1, 0x2] - strb r0, [r1, 0x4] - strb r0, [r1, 0x5] - strb r0, [r1, 0x6] - strb r0, [r1, 0x7] - str r0, [r1, 0x8] - str r4, [r1, 0xC] - str r2, [r1, 0x10] - subs r3, 0x1 - adds r1, 0x14 - cmp r3, 0 - bge _0800362A - movs r0, 0x1 - strb r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08003650: .4byte gUnknown_3000C00 -_08003654: .4byte gUnknown_3001B58 -_08003658: .4byte gUnknown_3000400 -_0800365C: .4byte sub_8003A34 -_08003660: .4byte sub_8003A74 - thumb_func_end sub_8003600 - - thumb_func_start sub_8003664 -sub_8003664: - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 2 - ldr r0, _0800369C - adds r2, r0 - movs r3, 0 - movs r4, 0x1 - strb r4, [r2] - movs r0, 0 - strh r1, [r2, 0x2] - strb r0, [r2, 0x4] - strb r0, [r2, 0x5] - strb r0, [r2, 0x6] - strb r0, [r2, 0x7] - str r3, [r2, 0x8] - ldr r0, _080036A0 - str r0, [r2, 0xC] - ldr r0, _080036A4 - str r0, [r2, 0x10] - ldr r0, _080036A8 - strb r4, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800369C: .4byte gUnknown_3000C00 -_080036A0: .4byte sub_8003AC0 -_080036A4: .4byte sub_8003B50 -_080036A8: .4byte gUnknown_3001B58 - thumb_func_end sub_8003664 - - thumb_func_start sub_80036AC -sub_80036AC: - push {r4,lr} - sub sp, 0x4 - str r2, [sp] - lsls r0, 16 - lsrs r0, 16 - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 2 - ldr r0, _080036E4 - adds r2, r0 - movs r3, 0 - movs r4, 0x1 - strb r4, [r2] - strh r1, [r2, 0x2] - ldr r0, [sp] - str r0, [r2, 0x4] - str r3, [r2, 0x8] - ldr r0, _080036E8 - str r0, [r2, 0xC] - ldr r0, _080036EC - str r0, [r2, 0x10] - ldr r0, _080036F0 - strb r4, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080036E4: .4byte gUnknown_3000C00 -_080036E8: .4byte sub_8003C18 -_080036EC: .4byte sub_8003D00 -_080036F0: .4byte gUnknown_3001B58 - thumb_func_end sub_80036AC - - thumb_func_start sub_80036F4 -sub_80036F4: - push {r4,lr} - sub sp, 0x4 - str r2, [sp] - lsls r0, 16 - lsrs r0, 16 - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 2 - ldr r0, _0800372C - adds r2, r0 - movs r3, 0 - movs r4, 0x1 - strb r4, [r2] - strh r1, [r2, 0x2] - ldr r0, [sp] - str r0, [r2, 0x4] - str r3, [r2, 0x8] - ldr r0, _08003730 - str r0, [r2, 0xC] - ldr r0, _08003734 - str r0, [r2, 0x10] - ldr r0, _08003738 - strb r4, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800372C: .4byte gUnknown_3000C00 -_08003730: .4byte sub_8003E2C -_08003734: .4byte sub_8003EC0 -_08003738: .4byte gUnknown_3001B58 - thumb_func_end sub_80036F4 - - thumb_func_start sub_800373C -sub_800373C: - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - lsls r3, r0, 2 - adds r3, r0 - lsls r3, 2 - ldr r0, _08003770 - adds r3, r0 - movs r4, 0x1 - strb r4, [r3] - movs r0, 0 - strh r1, [r3, 0x2] - strb r0, [r3, 0x4] - strb r0, [r3, 0x5] - strb r0, [r3, 0x6] - strb r0, [r3, 0x7] - str r2, [r3, 0x8] - ldr r0, _08003774 - str r0, [r3, 0xC] - ldr r0, _08003778 - str r0, [r3, 0x10] - ldr r0, _0800377C - strb r4, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08003770: .4byte gUnknown_3000C00 -_08003774: .4byte sub_8003F60 -_08003778: .4byte sub_8004034 -_0800377C: .4byte gUnknown_3001B58 - thumb_func_end sub_800373C - - thumb_func_start sub_8003780 -sub_8003780: - push {r4,lr} - sub sp, 0x4 - str r2, [sp] - lsls r0, 16 - lsrs r0, 16 - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 2 - ldr r0, _080037B8 - adds r2, r0 - movs r3, 0 - movs r4, 0x1 - strb r4, [r2] - strh r1, [r2, 0x2] - ldr r0, [sp] - str r0, [r2, 0x4] - str r3, [r2, 0x8] - ldr r0, _080037BC - str r0, [r2, 0xC] - ldr r0, _080037C0 - str r0, [r2, 0x10] - ldr r0, _080037C4 - strb r4, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080037B8: .4byte gUnknown_3000C00 -_080037BC: .4byte sub_8004170 -_080037C0: .4byte sub_8004264 -_080037C4: .4byte gUnknown_3001B58 - thumb_func_end sub_8003780 - - thumb_func_start sub_80037C8 -sub_80037C8: - push {r4,lr} - sub sp, 0x4 - str r2, [sp] - lsls r0, 16 - lsrs r0, 16 - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 2 - ldr r0, _08003800 - adds r2, r0 - movs r3, 0 - movs r4, 0x1 - strb r4, [r2] - strh r1, [r2, 0x2] - ldr r0, [sp] - str r0, [r2, 0x4] - str r3, [r2, 0x8] - ldr r0, _08003804 - str r0, [r2, 0xC] - ldr r0, _08003808 - str r0, [r2, 0x10] - ldr r0, _0800380C - strb r4, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08003800: .4byte gUnknown_3000C00 -_08003804: .4byte sub_8004388 -_08003808: .4byte sub_8004434 -_0800380C: .4byte gUnknown_3001B58 - thumb_func_end sub_80037C8 - - thumb_func_start sub_8003810 -sub_8003810: - sub sp, 0x4 - str r1, [sp] - lsls r0, 16 - lsrs r2, r0, 20 - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 2 - ldr r2, _08003838 - adds r1, r2 - movs r2, 0x1 - strb r2, [r1] - ldr r1, _0800383C - lsrs r0, 14 - adds r0, r1 - ldr r1, [sp] - str r1, [r0] - ldr r0, _08003840 - strb r2, [r0] - add sp, 0x4 - bx lr - .align 2, 0 -_08003838: .4byte gUnknown_3000C00 -_0800383C: .4byte gUnknown_3000400 -_08003840: .4byte gUnknown_3001B58 - thumb_func_end sub_8003810 - - thumb_func_start sub_8003844 -sub_8003844: - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r1, 16 - lsrs r0, 20 - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 2 - ldr r0, _08003880 - adds r2, r0 - movs r5, 0x1 - strb r5, [r2] - adds r0, r1, 0 - bl sub_80027A0 - str r0, [sp] - ldr r0, _08003884 - lsls r4, 2 - adds r4, r0 - ldr r0, [sp] - str r0, [r4] - ldr r0, _08003888 - strb r5, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08003880: .4byte gUnknown_3000C00 -_08003884: .4byte gUnknown_3000400 -_08003888: .4byte gUnknown_3001B58 - thumb_func_end sub_8003844 - - thumb_func_start sub_800388C -sub_800388C: - push {r4-r7,lr} - adds r6, r1, 0 - lsls r0, 16 - lsrs r1, r0, 16 - lsrs r4, r0, 20 - adds r3, r1, r2 - subs r0, r3, 0x1 - cmp r0, 0 - bge _080038A0 - adds r0, 0xF -_080038A0: - lsls r0, 12 - lsrs r3, r0, 16 - lsls r1, 2 - ldr r0, _080038E4 - adds r1, r0 - lsls r5, r4, 2 - ldr r7, _080038E8 - ldr r0, _080038EC - mov r12, r0 - cmp r2, 0 - ble _080038C0 -_080038B6: - ldm r6!, {r0} - stm r1!, {r0} - subs r2, 0x1 - cmp r2, 0 - bne _080038B6 -_080038C0: - adds r0, r5, r4 - lsls r0, 2 - adds r0, r7 - adds r2, r4, 0 - cmp r2, r3 - bgt _080038D8 - movs r1, 0x1 -_080038CE: - strb r1, [r0] - adds r2, 0x1 - adds r0, 0x14 - cmp r2, r3 - ble _080038CE -_080038D8: - movs r0, 0x1 - mov r1, r12 - strb r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080038E4: .4byte gUnknown_3000400 -_080038E8: .4byte gUnknown_3000C00 -_080038EC: .4byte gUnknown_3001B58 - thumb_func_end sub_800388C - - thumb_func_start sub_80038F0 -sub_80038F0: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r5, r1, 0 - lsls r0, 16 - lsrs r1, r0, 16 - lsrs r6, r0, 20 - adds r3, r1, r2 - subs r0, r3, 0x1 - cmp r0, 0 - bge _0800390C - adds r0, 0xF -_0800390C: - lsls r0, 12 - lsrs r7, r0, 16 - lsls r1, 2 - ldr r0, _0800396C - adds r1, r0 - mov r8, r1 - lsls r0, r6, 2 - mov r9, r0 - cmp r2, 0 - ble _0800393C - adds r4, r2, 0 -_08003922: - ldrh r0, [r5] - adds r5, 0x2 - bl sub_80027A0 - str r0, [sp] - mov r1, r8 - adds r1, 0x4 - mov r8, r1 - subs r1, 0x4 - stm r1!, {r0} - subs r4, 0x1 - cmp r4, 0 - bne _08003922 -_0800393C: - mov r1, r9 - adds r0, r1, r6 - lsls r0, 2 - ldr r1, _08003970 - adds r0, r1 - adds r4, r6, 0 - ldr r2, _08003974 - cmp r4, r7 - bgt _0800395A - movs r1, 0x1 -_08003950: - strb r1, [r0] - adds r4, 0x1 - adds r0, 0x14 - cmp r4, r7 - ble _08003950 -_0800395A: - movs r0, 0x1 - strb r0, [r2] - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800396C: .4byte gUnknown_3000400 -_08003970: .4byte gUnknown_3000C00 -_08003974: .4byte gUnknown_3001B58 - thumb_func_end sub_80038F0 - - thumb_func_start sub_8003978 -sub_8003978: - lsls r0, 16 - ldr r1, _08003984 - lsrs r0, 14 - adds r0, r1 - ldr r0, [r0] - bx lr - .align 2, 0 -_08003984: .4byte gUnknown_3000400 - thumb_func_end sub_8003978 - - thumb_func_start sub_8003988 -sub_8003988: - push {lr} - lsls r0, 16 - ldr r1, _080039A0 - lsrs r0, 14 - adds r0, r1 - ldr r0, [r0] - bl sub_8002774 - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_080039A0: .4byte gUnknown_3000400 - thumb_func_end sub_8003988 - - thumb_func_start sub_80039A4 -sub_80039A4: - lsls r0, 16 - lsrs r0, 16 - ldr r2, _080039B4 - ldrh r1, [r2] - orrs r0, r1 - strh r0, [r2] - bx lr - .align 2, 0 -_080039B4: .4byte gUnknown_3001B5A - thumb_func_end sub_80039A4 - - thumb_func_start sub_80039B8 -sub_80039B8: - push {r4,r5,lr} - ldr r0, _08003A28 - ldrb r0, [r0] - cmp r0, 0 - beq _08003A20 - ldr r4, _08003A2C - movs r1, 0x96 - lsls r1, 1 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080039DA - movs r0, 0xA0 - lsls r0, 2 - adds r1, r4, r0 - movs r0, 0x1 - strb r0, [r1] -_080039DA: - movs r5, 0 -_080039DC: - ldrb r0, [r4] - cmp r0, 0 - beq _080039F0 - lsls r0, r5, 16 - lsrs r0, 16 - ldr r1, [r4, 0x10] - bl _call_via_r1 - movs r0, 0 - strb r0, [r4] -_080039F0: - adds r5, 0x1 - adds r4, 0x14 - cmp r5, 0x1F - ble _080039DC - ldr r0, _08003A2C - movs r1, 0xA0 - lsls r1, 2 - adds r5, r0, r1 - ldrb r0, [r5] - cmp r0, 0 - beq _08003A14 - ldr r2, [r4, 0xC] - movs r0, 0x20 - movs r1, 0xF0 - bl _call_via_r2 - movs r0, 0 - strb r0, [r5] -_08003A14: - ldr r1, _08003A30 - movs r0, 0x3 - strh r0, [r1] - ldr r1, _08003A28 - movs r0, 0 - strb r0, [r1] -_08003A20: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08003A28: .4byte gUnknown_3001B58 -_08003A2C: .4byte gUnknown_3000C00 -_08003A30: .4byte gUnknown_3001B5A - thumb_func_end sub_80039B8 - - thumb_func_start sub_8003A34 -sub_8003A34: - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, r1, 16 - lsrs r0, 16 - lsls r5, r0, 2 - ldr r1, _08003A70 - adds r5, r1 - ldrb r1, [r5, 0x2] - movs r2, 0xF8 - adds r3, r2, 0 - ands r3, r1 - lsls r3, 7 - ldrb r4, [r5, 0x1] - adds r1, r2, 0 - ands r1, r4 - lsls r1, 2 - orrs r3, r1 - ldrb r1, [r5] - ands r2, r1 - lsrs r2, 3 - orrs r2, r3 - mov r1, sp - strh r2, [r1] - bl SetBGPaletteBufferColor - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08003A70: .4byte gUnknown_3000400 - thumb_func_end sub_8003A34 - - thumb_func_start sub_8003A74 -sub_8003A74: - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 20 - lsrs r6, r0, 16 - lsls r1, r6, 2 - ldr r0, _08003ABC - adds r4, r1, r0 - movs r5, 0 - movs r7, 0xF8 -_08003A86: - ldrb r0, [r4, 0x2] - adds r1, r7, 0 - ands r1, r0 - lsls r1, 7 - ldrb r2, [r4, 0x1] - adds r0, r7, 0 - ands r0, r2 - lsls r0, 2 - orrs r1, r0 - ldrb r2, [r4] - adds r0, r7, 0 - ands r0, r2 - lsrs r0, 3 - orrs r0, r1 - mov r1, sp - strh r0, [r1] - adds r0, r6, r5 - bl SetBGPaletteBufferColor - adds r4, 0x4 - adds r5, 0x1 - cmp r5, 0xF - ble _08003A86 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08003ABC: .4byte gUnknown_3000400 - thumb_func_end sub_8003A74 - thumb_func_start sub_8003AC0 sub_8003AC0: push {r4-r7,lr} diff --git a/include/bg_palette_buffer.h b/include/bg_palette_buffer.h index ab3593aec..e2db2993b 100644 --- a/include/bg_palette_buffer.h +++ b/include/bg_palette_buffer.h @@ -8,6 +8,7 @@ void nullsub_4(s32 index, const RGB *color, s32 brightness, const RGB *ramp); void nullsub_5(s32 index, const RGB *color); void SetBGPaletteBufferColorArray(s32 index, const RGB *color); void SetBGPaletteBufferColorRGB(s32 index, const RGB *color, s32 brightness, const RGB *ramp); +void SetBGPaletteBufferColor(s32 index, u16 *color); void TransferBGPaletteBuffer(void); #endif // GUARD_BG_PALETTE_BUFFER_H diff --git a/include/code_8002774.h b/include/code_8002774.h index 69e492d90..0a47a6be3 100644 --- a/include/code_8002774.h +++ b/include/code_8002774.h @@ -3,6 +3,18 @@ #include "structs/str_position.h" +#define UNK_STRUCT_ARR_COUNT 4 + +struct S_sub +{ + u8 x0[UNK_STRUCT_ARR_COUNT]; +}; + +struct S +{ + struct S_sub x0; +}; + void sub_800290C(PixelPos *param_1, s32 param_2); void sub_8002934(PixelPos *param_1, PixelPos *param_2, PixelPos *param_3, s32 param_4, s32 param_5); s32 sub_8002A70(s32 a0, s32 a1, s32 a2); @@ -10,5 +22,7 @@ s32 sub_8002B04(s32, s32); s32 VecDirection8Radial(PixelPos *param_1); s8 SizedDeltaDirection4(const PixelPos *r0, const PixelPos *r1, const PixelPos *r2, const PixelPos *r3); s8 SizedDeltaDirection8(const PixelPos *r0, const PixelPos *r1, const PixelPos *r2, const PixelPos *r3); +struct S sub_80027A0(u16 a0); +u16 sub_8002774(struct S_sub s); #endif // GUARD_CODE_8002774_H diff --git a/ld_script.ld b/ld_script.ld index 99e396318..203de78f5 100755 --- a/ld_script.ld +++ b/ld_script.ld @@ -53,6 +53,7 @@ SECTIONS { src/event_flag.o(.text); src/code_8002774.o(.text); src/memory.o(.text); + src/code_80035F0.o(.text); asm/code_80035F0.o(.text); src/other_random.o(.text); src/util.o(.text); diff --git a/src/code_8002774.c b/src/code_8002774.c index f8e5dfea7..a94f5dfa0 100644 --- a/src/code_8002774.c +++ b/src/code_8002774.c @@ -5,13 +5,6 @@ #include "structs/str_position.h" #include "other_random.h" -#define UNK_STRUCT_ARR_COUNT 4 - -struct S -{ - u8 x0[UNK_STRUCT_ARR_COUNT]; -}; - const u8 sUnknown_8002774[] = {0, 0, 0, 0, 0, 0, 0, 0}; const PixelPos gVectorDirections[NUM_DIRECTIONS] = { @@ -27,7 +20,7 @@ const PixelPos gVectorDirections[NUM_DIRECTIONS] = { static s8 VecDirection4Radial(PixelPos *pixelPos); -u16 sub_8002774(struct S s) +u16 sub_8002774(struct S_sub s) { return ((s.x0[2] & 0xF8) << 7) | ((s.x0[1] & 0xF8) << 2) | ((s.x0[0] & 0xF8) >> 3); } @@ -36,10 +29,10 @@ struct S sub_80027A0(u16 a0) { struct S ret; - ret.x0[0] = (a0 & 0x1F) << 3 | ((a0 & 1) ? 7 : 0); - ret.x0[1] = (a0 & 0x3E0) >> 2 | ((a0 & 0x20) ? 7 : 0); - ret.x0[2] = (a0 & 0x7C00) >> 7 | ((a0 & 0x400) ? 7 : 0); - ret.x0[3] = 0; + ret.x0.x0[0] = (a0 & 0x1F) << 3 | ((a0 & 1) ? 7 : 0); + ret.x0.x0[1] = (a0 & 0x3E0) >> 2 | ((a0 & 0x20) ? 7 : 0); + ret.x0.x0[2] = (a0 & 0x7C00) >> 7 | ((a0 & 0x400) ? 7 : 0); + ret.x0.x0[3] = 0; return ret; } @@ -48,7 +41,7 @@ UNUSED static void sub_8002804(struct S *r0, s32 r1, struct S *r2) s32 i; for (i = 0; i < UNK_STRUCT_ARR_COUNT; i++) { - r0->x0[i] = (r1 * r2->x0[i]) / 256; + r0->x0.x0[i] = (r1 * r2->x0.x0[i]) / 256; } } @@ -60,19 +53,19 @@ UNUSED static void sub_800282C(struct S *dst, s32 a1, struct S *a2, struct S *a3 float f0 = 1.0f / a1; for (i = 0; i < 4; i++) { - s8 asSigned = (s8) a2->x0[i]; + s8 asSigned = (s8) a2->x0.x0[i]; float f = (float)(asSigned); if (asSigned < 0) { f += 256.0f; } spFloats[i] = f; - floatsMul[i] = (float)(a3->x0[i] - a2->x0[i]) * f0; + floatsMul[i] = (float)(a3->x0.x0[i] - a2->x0.x0[i]) * f0; } *dst++ = *a2; for (i = 1; i < a1 - 1; dst++, i++) { for (j = 0; j < 4; j++) { - dst->x0[j] = (unsigned int)((spFloats[j] += floatsMul[j])); + dst->x0.x0[j] = (unsigned int)((spFloats[j] += floatsMul[j])); } } diff --git a/src/code_80035F0.c b/src/code_80035F0.c index d521f7d86..723581935 100644 --- a/src/code_80035F0.c +++ b/src/code_80035F0.c @@ -1,4 +1,380 @@ #include "global.h" -IWRAM_INIT u16 gUnknown_3001B58 = 0; +#include "bg_palette_buffer.h" +#include "code_8002774.h" + +IWRAM_INIT u8 gUnknown_3001B58 = 0; IWRAM_INIT u16 gUnknown_3001B5A = 0; + +typedef struct unkStruct_3000C00_sub +{ + u8 unk0[4]; +} unkStruct_3000C00_sub; + +typedef struct unkStruct_3000C00 +{ + // size: 0x14 + u8 unk0; + u8 unk1; // ? + s16 unk2; + unkStruct_3000C00_sub unk4; + s32 unk8; + void (*unkC)(u32, u32); + void (*unk10)(u32); +} unkStruct_3000C00; + +unkStruct_3000C00 gUnknown_3000C00[0x20]; + +struct S gUnknown_3000400[0x200]; + +void sub_8003A34(u32, u32); +void sub_8003AC0(u32, u32); +void sub_8003C18(u32, u32); +void sub_8003E2C(u32, u32); +void sub_8003F60(u32, u32); +void sub_8004170(u32, u32); +void sub_8004388(u32, u32); +void sub_8003B50(u32); +void sub_8003D00(u32); +void sub_8003EC0(u32); +void sub_8004034(u32); +void sub_8004264(u32); +void sub_8004434(u32); +void sub_8003A74(u32); + +NAKED +UNUSED static void sub_80035F8(void) +{ + asm_unified(" .text\n" +" push {lr}\n" +" pop {r0}\n" +" bx r0\n"); +} + +void sub_8003600(void) { + unkStruct_3000C00 *it1; + struct S *it2; + u8 *r6; + s32 i; + s32 zero; + + it1 = &gUnknown_3000C00[0]; + r6 = &gUnknown_3001B58; + zero = 0; + it2 = &gUnknown_3000400[0]; + + for (i = 0; i < 0x200; it2++, i++) + { + it2->x0.x0[0] = zero; + it2->x0.x0[1] = zero; + it2->x0.x0[2] = zero; + it2->x0.x0[3] = zero; + } + + for (i = 0; i < 0x21; i++, it1++) + { + it1->unk0 = 0; + it1->unk2 = 0x100; + it1->unk4.unk0[0] = 0; + it1->unk4.unk0[1] = 0; + it1->unk4.unk0[2] = 0; + it1->unk4.unk0[3] = 0; + it1->unk8 = 0; + it1->unkC = &sub_8003A34; + it1->unk10 = &sub_8003A74; + } + + *r6 = 1; +} + +void sub_8003664(s32 param_1, s16 param_2) { + u16 idx; + unkStruct_3000C00 *ptr; + idx = param_1; + ptr = &gUnknown_3000C00[idx]; + + ptr->unk0 = 1; + ptr->unk2 = param_2; + ptr->unk4.unk0[0] = 0; + ptr->unk4.unk0[1] = 0; + ptr->unk4.unk0[2] = 0; + ptr->unk4.unk0[3] = 0; + ptr->unk8 = 0; + ptr->unkC = &sub_8003AC0; + ptr->unk10 = &sub_8003B50; + + gUnknown_3001B58 = 1; +} + +void sub_80036AC(s32 param_1, s16 param_2, unkStruct_3000C00_sub param_3) { + u16 idx; + unkStruct_3000C00 *ptr; + idx = param_1; + ptr = &gUnknown_3000C00[idx]; + + ptr->unk0 = 1; + ptr->unk2 = param_2; + ptr->unk4 = param_3; + ptr->unk8 = 0; + ptr->unkC = &sub_8003C18; + ptr->unk10 = &sub_8003D00; + + gUnknown_3001B58 = 1; +} + +void sub_80036F4(s32 param_1, s16 param_2, unkStruct_3000C00_sub param_3) { + u16 idx; + unkStruct_3000C00 *ptr; + idx = param_1; + ptr = &gUnknown_3000C00[idx]; + + ptr->unk0 = 1; + ptr->unk2 = param_2; + ptr->unk4 = param_3; + ptr->unk8 = 0; + ptr->unkC = &sub_8003E2C; + ptr->unk10 = &sub_8003EC0; + + gUnknown_3001B58 = 1; +} + +UNUSED void sub_800373C(s32 param_1, s16 param_2, s32 param_3) +{ + u16 idx; + unkStruct_3000C00 *ptr; + idx = param_1; + ptr = &gUnknown_3000C00[idx]; + + ptr->unk0 = 1; + ptr->unk2 = param_2; + ptr->unk4.unk0[0] = 0; + ptr->unk4.unk0[1] = 0; + ptr->unk4.unk0[2] = 0; + ptr->unk4.unk0[3] = 0; + ptr->unk8 = param_3; + ptr->unkC = &sub_8003F60; + ptr->unk10 = &sub_8004034; + + gUnknown_3001B58 = 1; +} + +void sub_8003780(s32 param_1, s16 param_2, unkStruct_3000C00_sub param_3) { + u16 idx; + unkStruct_3000C00 *ptr; + idx = param_1; + ptr = &gUnknown_3000C00[idx]; + + ptr->unk0 = 1; + ptr->unk2 = param_2; + ptr->unk4 = param_3; + ptr->unk8 = 0; + ptr->unkC = &sub_8004170; + ptr->unk10 = &sub_8004264; + + gUnknown_3001B58 = 1; +} + +void sub_80037C8(s32 param_1, s16 param_2, unkStruct_3000C00_sub param_3) { + u16 idx; + unkStruct_3000C00 *ptr; + idx = param_1; + ptr = &gUnknown_3000C00[idx]; + + ptr->unk0 = 1; + ptr->unk2 = param_2; + ptr->unk4 = param_3; + ptr->unk8 = 0; + ptr->unkC = &sub_8004388; + ptr->unk10 = &sub_8004434; + + gUnknown_3001B58 = 1; +} + +void sub_8003810(u32 param_1, struct S param_2) +{ + u16 idx; + unkStruct_3000C00 *a; + idx = (u16) param_1; + a = &gUnknown_3000C00[idx >> 4]; + a->unk0 = 1; + + gUnknown_3000400[idx] = param_2; + gUnknown_3001B58 = 1; +} + +UNUSED void sub_8003844(u32 param_1, u32 param_2) +{ + u16 idx1; + u16 idx2; + unkStruct_3000C00 *a; + idx1 = param_1; + idx2 = param_2; + a = &gUnknown_3000C00[idx1 >> 4]; + a->unk0 = 1; + + gUnknown_3000400[idx1] = sub_80027A0(idx2); + gUnknown_3001B58 = 1; +} + +void sub_800388C(u32 param_1, struct S *param_2, s32 param_3) +{ + u16 idx1; + u16 idx2; + s32 sVar1; + u16 sVar2; + struct S *ptr1; + unkStruct_3000C00 *ptr3; + s32 i; + + idx1 = param_1; + idx2 = idx1 / 16; + sVar1 = idx1 + param_3 - 1; + if (sVar1 < 0) + { + sVar1 += 0xf; + } + + sVar1 = (sVar1 << 0xc) >> 0x10; + sVar2 = sVar1; + ptr1 = &gUnknown_3000400[idx1]; + + for (i = 0; i < param_3; param_2++, ptr1++, i++) + { + *ptr1 = *param_2; + } + + ptr3 = &gUnknown_3000C00[idx2]; + + for (i = idx2; i <= sVar2; i++, ptr3++) + { + ptr3->unk0 = 1; + } + + gUnknown_3001B58 = 1; +} + +UNUSED void sub_80038F0(u32 param_1, s16 *param_2, s32 param_3) +{ + u16 idx1; + u16 idx2; + u16 uVar; + struct S *ptr1; + unkStruct_3000C00 *ptr2; + s32 i; + + idx1 = param_1; + idx2 = idx1 / 16; + uVar = (idx1 + param_3 - 1) / 16; + ptr1 = &gUnknown_3000400[idx1]; + + for (i = 0; i < param_3; i++) + { + *ptr1 = sub_80027A0(*param_2++); + ptr1++; + } + + ptr2 = &gUnknown_3000C00[idx2]; + + for (i = idx2; i <= uVar; i++, ptr2++) + { + ptr2->unk0 = 1; + } + + gUnknown_3001B58 = 1; +} + +UNUSED struct S_sub sub_8003978(u32 param_1) +{ + u16 idx; + idx = param_1; + return gUnknown_3000400[idx].x0; +} + +UNUSED u16 sub_8003988(u32 param_1) { + u16 idx; + idx = param_1; + return sub_8002774(gUnknown_3000400[idx].x0); +} + +UNUSED void sub_80039A4(u32 param_1) +{ + u16 idx; + idx = param_1; + gUnknown_3001B5A |= idx; +} + +void sub_80039B8(void) { + s32 i; + unkStruct_3000C00* ptr1; + unkStruct_3000C00* ptr2; + + if (gUnknown_3001B58) + { + ptr1 = gUnknown_3000C00; + if (gUnknown_3000C00[0xf].unk0) + { + gUnknown_3000C00[0x20].unk0 = 1; + } + + for (i = 0; i < 0x20; i++, ptr1++) + { + if (ptr1->unk0) + { + ptr1->unk10((u16) i); + ptr1->unk0 = 0; + } + } + + if (gUnknown_3000C00[0x20].unk0) + { + ptr2 = &gUnknown_3000C00[0x20]; + // here ptr2 == ptr1 + ptr1->unkC(0x20, 0xf0); + ptr2->unk0 = 0; + } + + gUnknown_3001B5A = 3; + gUnknown_3001B58 = 0; + } +} + +void sub_8003A34(u32 param_1, u32 param_2) { + u16 idx; + struct S *ptr1; + u32 uVar1; + u32 uVar2; + u32 uVar3; + u16 color; + + idx = param_2; + ptr1 = &gUnknown_3000400[idx]; + uVar1 = (ptr1->x0.x0[2] & 0xf8) << 7; + uVar2 = (ptr1->x0.x0[1] & 0xf8) << 2; + uVar1 |= uVar2; + uVar3 = (ptr1->x0.x0[0] & 0xf8) >> 3; + color = uVar3 | uVar1; + SetBGPaletteBufferColor(idx, &color); +} + +void sub_8003A74(u32 param_1) { + u16 idx; + struct S *ptr1; + u32 uVar1; + u32 uVar2; + u32 uVar3; + s32 i; + u16 color; + + idx = param_1 << 4; + ptr1 = &gUnknown_3000400[idx]; + + for (i = 0; i <= 0xf; ptr1++, i++) + { + uVar1 = (ptr1->x0.x0[2] & 0xf8) << 7; + uVar2 = (ptr1->x0.x0[1] & 0xf8) << 2; + uVar1 |= uVar2; + uVar3 = (ptr1->x0.x0[0] & 0xf8) >> 3; + color = uVar3 | uVar1; + SetBGPaletteBufferColor(idx + i, &color); + } +}