diff --git a/asm/code_0804B9F8.s b/asm/code_0804B9F8.s deleted file mode 100644 index a564376f..00000000 --- a/asm/code_0804B9F8.s +++ /dev/null @@ -1,63 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start FadeMain -FadeMain: @ 0x0804FF98 - push {r4, r5, r6, r7, lr} - ldr r6, _0804FFD4 @ =gUnk_020354C0 - ldr r1, _0804FFD8 @ =gUsedPalettes - ldr r4, [r1] - movs r0, #0 - str r0, [r1] - movs r5, #0 - cmp r4, #0 - beq _0804FFD0 - ldr r7, _0804FFDC @ =gUnk_03005E98 -_0804FFAC: - movs r0, #1 - ands r0, r4 - cmp r0, #0 - beq _0804FFC6 - ldr r0, _0804FFE0 @ =gPaletteBuffer - adds r0, r5, r0 - movs r2, #0xa0 - lsls r2, r2, #0x13 - adds r1, r5, r2 - ldrh r2, [r6, #2] - ldrb r3, [r6, #1] - bl _call_via_r7 -_0804FFC6: - adds r5, #0x20 - adds r6, #4 - lsrs r4, r4, #1 - cmp r4, #0 - bne _0804FFAC -_0804FFD0: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0804FFD4: .4byte gUnk_020354C0 -_0804FFD8: .4byte gUsedPalettes -_0804FFDC: .4byte gUnk_03005E98 -_0804FFE0: .4byte gPaletteBuffer - - thumb_func_start sub_0804FFE4 -sub_0804FFE4: @ 0x0804FFE4 - push {r4, lr} - ldr r4, _08050000 @ =gFadeControl - adds r0, r4, #0 - movs r1, #0x1c - bl MemClear - ldr r0, _08050004 @ =gUnk_020354C0 - movs r1, #0x80 - bl MemClear - movs r0, #1 - rsbs r0, r0, #0 - str r0, [r4, #4] - pop {r4, pc} - .align 2, 0 -_08050000: .4byte gFadeControl -_08050004: .4byte gUnk_020354C0 diff --git a/include/gba/defines.h b/include/gba/defines.h index 09f9b07b..a135969e 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -31,6 +31,7 @@ #define PLTT 0x5000000 #define PLTT_SIZE 0x400 +#define PAL_RAM ((u8*)(PLTT)) #define BG_PLTT PLTT #define BG_PLTT_SIZE 0x200 diff --git a/include/structures.h b/include/structures.h index bc5f13ea..b58a8f9e 100644 --- a/include/structures.h +++ b/include/structures.h @@ -107,6 +107,14 @@ typedef struct { extern FadeControl gFadeControl; +typedef struct { + u8 unk0; + u8 unk1; + u16 unk2; +} struct_020354C0; + +extern struct_020354C0 gUnk_020354C0[0x20]; + typedef struct { u8 filler0[0x1A]; u16 rButtonX; diff --git a/linker.ld b/linker.ld index 0c415391..f59b8391 100644 --- a/linker.ld +++ b/linker.ld @@ -276,7 +276,7 @@ SECTIONS { . = 0x00005D5C; gUnk_03005D5C = .; . = 0x00005D90; gIntrMain = .; . = 0x00005E60; gUnk_03005E60 = .; - . = 0x00005E98; gUnk_03005E98 = .; + . = 0x00005E98; gMakeFadeBuff256 = .; . = 0x00005F24; _ClearAndUpdateEntities = .; . = 0x00005F40; UpdateEntities_arm = .; . = 0x00005FBC; gUnk_03005FBC = .; @@ -480,7 +480,7 @@ SECTIONS { src/loadRoom.o(.text); asm/code_0804B058.o(.text); src/room.o(.text); - asm/code_0804B9F8.o(.text); + src/code_0804B9F8.o(.text); src/sub_08050008.o(.text); src/fade.o(.text); asm/code_08050038.o(.text); diff --git a/src/code_0804B9F8.c b/src/code_0804B9F8.c new file mode 100644 index 00000000..0c1937b3 --- /dev/null +++ b/src/code_0804B9F8.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "utils.h" +#include "fileScreen.h" + +extern u16 gPaletteBuffer[]; +extern u32 gUsedPalettes; + +// function pointer to overlay (0x03005e98) in ram calls rom function MakeFadeBuff256 +extern u32 gMakeFadeBuff256; +typedef void (*fptrMakeFadeBuff256)(u8*, u8*, u16, u8); + +void FadeMain() { + fptrMakeFadeBuff256 func; + u32 usedPalettesTmp, palIdx; + + struct_020354C0* ptrUnk = gUnk_020354C0; + usedPalettesTmp = gUsedPalettes; + gUsedPalettes = 0; + palIdx = 0; + + while (usedPalettesTmp != 0) { + if ((usedPalettesTmp & 1) == 1) { + func = (fptrMakeFadeBuff256)&gMakeFadeBuff256; + func(&((u8*)gPaletteBuffer)[palIdx], &PAL_RAM[palIdx], ptrUnk->unk2, ptrUnk->unk1); + } + palIdx += 0x20; + + ptrUnk++; + usedPalettesTmp /= 2; + } +} + +void sub_0804FFE4() { + MemClear(&gFadeControl, sizeof(gFadeControl)); + MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0)); + gFadeControl.mask = 0xffffffff; +} diff --git a/src/sub_08050008.c b/src/sub_08050008.c index 580c3a32..4124df8f 100644 --- a/src/sub_08050008.c +++ b/src/sub_08050008.c @@ -2,9 +2,7 @@ #include "utils.h" #include "structures.h" -extern u32 gUnk_020354C0; - void sub_08050008() { - MemClear(&gUnk_020354C0, 128); + MemClear(&gUnk_020354C0, sizeof(gUnk_020354C0)); gFadeControl.mask = 0xFFFFFFFF; }