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 | |
parent | 22a73c654b33878d8861109a3898bddc0d30c6b3 (diff) |
pokedex_screen through sub_810250C
-rw-r--r-- | asm/pokedex_screen.s | 284 | ||||
-rw-r--r-- | include/sound.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/pokedex_screen.c | 120 |
4 files changed, 122 insertions, 284 deletions
diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index 9c57cff88..ad2b96cdf 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -5,290 +5,6 @@ .text - thumb_func_start sub_81024C0 -sub_81024C0: @ 81024C0 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_81024C0 - - thumb_func_start sub_81024D4 -sub_81024D4: @ 81024D4 - push {lr} - ldr r0, _08102500 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081024EC - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _08102504 -_081024EC: - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - b _08102508 - .align 2, 0 -_08102500: .4byte gPaletteFade -_08102504: - bl UpdatePaletteFade -_08102508: - pop {r0} - bx r0 - thumb_func_end sub_81024D4 - - thumb_func_start sub_810250C -sub_810250C: @ 810250C - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - bl IsNationalPokedexEnabled - lsls r0, 24 - lsrs r6, r0, 24 - bl m4aSoundVSyncOff - movs r0, 0 - bl SetVBlankCallback - bl ResetPaletteFade - bl ResetSpriteData - bl ResetTasks - bl ScanlineEffect_Stop - movs r0, 0x1 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08102598 @ =gUnknown_8451EBC - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - movs r4, 0x80 - lsls r4, 4 - adds r0, r4, 0 - bl Alloc - adds r1, r0, 0 - movs r0, 0x3 - bl SetBgTilemapBuffer - adds r0, r4, 0 - bl Alloc - adds r1, r0, 0 - movs r0, 0x2 - bl SetBgTilemapBuffer - adds r0, r4, 0 - bl Alloc - adds r1, r0, 0 - movs r0, 0x1 - bl SetBgTilemapBuffer - adds r0, r4, 0 - bl Alloc - adds r1, r0, 0 - movs r0, 0 - bl SetBgTilemapBuffer - cmp r6, 0 - beq _081025A0 - ldr r1, _0810259C @ =gUnknown_84403AC - movs r0, 0 - str r0, [sp] - movs r0, 0x3 - adds r2, r4, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap - b _081025AE - .align 2, 0 -_08102598: .4byte gUnknown_8451EBC -_0810259C: .4byte gUnknown_84403AC -_081025A0: - ldr r1, _081026A4 @ =gUnknown_8440274 - str r6, [sp] - movs r0, 0x3 - adds r2, r4, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap -_081025AE: - ldr r0, _081026A8 @ =gUnknown_8451ECC - bl InitWindows - bl DeactivateAllTextPrinters - bl m4aSoundVSyncOn - ldr r0, _081026AC @ =sub_81024C0 - bl SetVBlankCallback - movs r0, 0x1 - bl EnableInterrupts - ldr r0, _081026B0 @ =sub_810287C - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _081026B4 @ =gUnknown_203ACF0 - movs r0, 0x70 - bl Alloc - str r0, [r5] - ldr r1, _081026B8 @ =gUnknown_8451EE4 - movs r2, 0x70 - bl memcpy - ldr r0, [r5] - strb r4, [r0] - movs r0, 0xC1 - lsls r0, 4 - bl Alloc - ldr r1, [r5] - str r0, [r1, 0x44] - movs r0, 0 - movs r1, 0x1 - bl sub_8104BBC - ldr r1, [r5] - adds r1, 0x6A - strh r0, [r1] - movs r0, 0x1 - movs r1, 0x1 - bl sub_8104BBC - ldr r1, [r5] - adds r1, 0x6C - strh r0, [r1] - movs r0, 0 - movs r1, 0 - bl sub_8104BBC - ldr r1, [r5] - adds r1, 0x66 - strh r0, [r1] - movs r0, 0x1 - movs r1, 0 - bl sub_8104BBC - ldr r1, [r5] - adds r1, 0x68 - strh r0, [r1] - movs r0, 0x80 - bl sub_8072474 - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - ldr r2, _081026BC @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - cmp r6, 0 - beq _081026C4 - ldr r0, _081026C0 @ =gUnknown_84406E0 - movs r2, 0x80 - lsls r2, 2 - movs r1, 0 - bl LoadPalette - b _081026D0 - .align 2, 0 -_081026A4: .4byte gUnknown_8440274 -_081026A8: .4byte gUnknown_8451ECC -_081026AC: .4byte sub_81024C0 -_081026B0: .4byte sub_810287C -_081026B4: .4byte gUnknown_203ACF0 -_081026B8: .4byte gUnknown_8451EE4 -_081026BC: .4byte gPaletteFade -_081026C0: .4byte gUnknown_84406E0 -_081026C4: - ldr r0, _08102758 @ =gUnknown_84404C8 - movs r2, 0x80 - lsls r2, 2 - movs r1, 0 - bl LoadPalette -_081026D0: - movs r4, 0x20 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - movs r5, 0x11 - str r5, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - str r4, [sp] - str r4, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - str r4, [sp] - movs r0, 0x2 - mov r8, r0 - str r0, [sp, 0x4] - movs r6, 0xF - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x3 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - str r4, [sp] - movs r0, 0x10 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x2 - bl FillBgTilemapBufferRect - str r4, [sp] - mov r0, r8 - str r0, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0 - movs r1, 0x3 - movs r2, 0 - movs r3, 0x12 - bl FillBgTilemapBufferRect - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08102758: .4byte gUnknown_84404C8 - thumb_func_end sub_810250C - thumb_func_start CB2_OpenPokedexFromStartMenu CB2_OpenPokedexFromStartMenu: @ 810275C push {lr} diff --git a/include/sound.h b/include/sound.h index e5736fad8..73ca1c654 100644 --- a/include/sound.h +++ b/include/sound.h @@ -46,5 +46,6 @@ void SE12PanpotControl(s8 pan); bool8 IsSEPlaying(void); bool8 IsBGMPlaying(void); bool8 IsSpecialSEPlaying(void); +void sub_8072474(u16 volume); #endif // GUARD_SOUND_H diff --git a/ld_script.txt b/ld_script.txt index 0e7cbca77..e46625ad3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -227,6 +227,7 @@ SECTIONS { src/map_preview_screen.o(.text); asm/link_rfu_2.o(.text); asm/link_rfu.o(.text); + src/pokedex_screen.o(.text); asm/pokedex_screen.o(.text); src/list_menu.o(.text); asm/item_menu.o(.text); 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); +} |