diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-12-06 16:57:33 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-12-06 16:57:33 -0500 |
commit | 7871a505b39e5452f0a39f96ce2deea810099906 (patch) | |
tree | 7d4786cae7b6fdd01cda645fdcd6ddd7b17d2e93 /src | |
parent | 22a73c654b33878d8861109a3898bddc0d30c6b3 (diff) |
pokedex_screen through sub_810250C
Diffstat (limited to 'src')
-rw-r--r-- | src/pokedex_screen.c | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c new file mode 100644 index 000000000..1731f1cec --- /dev/null +++ b/src/pokedex_screen.c @@ -0,0 +1,120 @@ +#include "global.h" +#include "bg.h" +#include "malloc.h" +#include "palette.h" +#include "graphics.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "m4a.h" +#include "scanline_effect.h" +#include "task.h" +#include "text.h" +#include "window.h" +#include "new_menu_helpers.h" +#include "sound.h" +#include "event_data.h" + +struct PokedexScreenData +{ + u8 field_00; + u8 filler_01[0x43]; + void * field_44; + u8 filler_48[0x1E]; + u16 field_66; + u16 field_68; + u16 field_6A; + u16 field_6C; +}; + +EWRAM_DATA struct PokedexScreenData * gUnknown_203ACF0 = NULL; + +void sub_810287C(u8 taskId); +u16 sub_8104BBC(u8 a0, u8 a1); + +extern const u32 gUnknown_8440274[]; +extern const u32 gUnknown_84403AC[]; +extern const u16 gUnknown_84404C8[]; +extern const u16 gUnknown_84406E0[]; +extern const struct BgTemplate gUnknown_8451EBC[4]; +extern const struct WindowTemplate gUnknown_8451ECC[]; +extern const struct PokedexScreenData gUnknown_8451EE4; + +void sub_81024C0(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_81024D4(void) +{ + if (!gPaletteFade.active || IsDma3ManagerBusyWithBgCopy()) + { + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + } + else + { + UpdatePaletteFade(); + } +} + +void sub_810250C(void) +{ + bool8 natDex; + u8 taskId; + + natDex = IsNationalPokedexEnabled(); + m4aSoundVSyncOff(); + SetVBlankCallback(NULL); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + ScanlineEffect_Stop(); + ResetBgsAndClearDma3BusyFlags(TRUE); + InitBgsFromTemplates(0, gUnknown_8451EBC, NELEMS(gUnknown_8451EBC)); + SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(2, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(0, Alloc(BG_SCREEN_SIZE)); + if (natDex) + DecompressAndLoadBgGfxUsingHeap(3, gUnknown_84403AC, BG_SCREEN_SIZE, 0, 0); + else + DecompressAndLoadBgGfxUsingHeap(3, gUnknown_8440274, BG_SCREEN_SIZE, 0, 0); + InitWindows(gUnknown_8451ECC); + DeactivateAllTextPrinters(); + m4aSoundVSyncOn(); + SetVBlankCallback(sub_81024C0); + EnableInterrupts(INTR_FLAG_VBLANK); + taskId = CreateTask(sub_810287C, 0); + gUnknown_203ACF0 = Alloc(sizeof(*gUnknown_203ACF0)); + *gUnknown_203ACF0 = gUnknown_8451EE4; + gUnknown_203ACF0->field_00 = taskId; + gUnknown_203ACF0->field_44 = Alloc(0xC10); + gUnknown_203ACF0->field_6A = sub_8104BBC(0, 1); + gUnknown_203ACF0->field_6C = sub_8104BBC(1, 1); + gUnknown_203ACF0->field_66 = sub_8104BBC(0, 0); + gUnknown_203ACF0->field_68 = sub_8104BBC(1, 0); + sub_8072474(0x80); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + gPaletteFade.bufferTransferDisabled = TRUE; + if (natDex) + LoadPalette(gUnknown_84406E0, 0, 0x200); + else + LoadPalette(gUnknown_84404C8, 0, 0x200); + FillBgTilemapBufferRect(3, 0x001, 0, 0, 32, 32, 0); + FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); + FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 0x11); + FillBgTilemapBufferRect(0, 0x0003, 0, 0, 32, 2, 0xF); + FillBgTilemapBufferRect(0, 0x0000, 0, 2, 32, 16, 0x11); + FillBgTilemapBufferRect(0, 0x003, 0, 18, 32, 2, 0xF); +} |