diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-02 12:04:35 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-02 12:04:35 -0500 |
commit | 496fb8ce87e38b2c42009fcde62e683126373e3e (patch) | |
tree | 9b01eaa5728636570926d07ff67b831027e5abcc /src | |
parent | 5a4ffc9a8e2a953a0de699733a809f44ed00bb44 (diff) |
through sub_80C0A88
Diffstat (limited to 'src')
-rw-r--r-- | src/region_map.c | 147 |
1 files changed, 142 insertions, 5 deletions
diff --git a/src/region_map.c b/src/region_map.c index 4199b2f17..d4451330f 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1,5 +1,7 @@ #include "global.h" #include "palette.h" +#include "gpu_regs.h" +#include "scanline_effect.h" #include "task.h" #include "malloc.h" #include "overworld.h" @@ -17,7 +19,10 @@ struct UnkStruct_20399D4 { u8 filler_0000[0x0026]; u16 field_0026[5][600]; - u8 filler_1796[0x3000]; + // Inefficiency: these should be u8 or have half the elements each + u16 field_1796[BG_SCREEN_SIZE]; + u16 field_2796[BG_SCREEN_SIZE]; + u16 field_3796[BG_SCREEN_SIZE]; u8 field_4796; u8 field_4797[4]; u8 field_479B; @@ -54,8 +59,10 @@ void sub_80C08B4(void); void sub_80C08E0(void); void sub_80C08F4(void); void sub_80C0904(void); +void sub_80C0A2C(void); void sub_80C0A6C(void); void sub_80C0A88(u8 a0); +void sub_80C0AB8(void); void sub_80C0B18(void); void sub_80C0B9C(void); void sub_80C0BB0(void); @@ -65,25 +72,30 @@ u8 sub_80C0E20(void); void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C2208(u8 taskId, TaskFunc taskFunc); +void sub_80C25BC(void); void sub_80C2C1C(u8 taskId); void sub_80C3008(u16 a0, u16 a1); void sub_80C3154(u8 a0); void sub_80C3178(void); -u8 sub_80C3400(void); -u16 sub_80C3508(void); -u16 sub_80C3514(void); -u16 sub_80C3580(void); +void sub_80C3188(void); u8 sub_80C3AC8(u8 a0); +u8 sub_80C3400(void); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); void sub_80C4324(u8 a0); void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); +void sub_80C4348(void); void sub_80C48BC(u8 a0, u8 a1, u8 a2); void sub_80C4960(u8 a0, u8 a1, u8 a2); +void sub_80C4A04(void); +void sub_80C4D30(void); void sub_80C4E18(const u8 *str); void sub_80C4E74(const u8 *str); void sub_80C4ED0(bool8 a0); void sub_80C4F08(u8 taskId); +u16 sub_80C3508(void); +u16 sub_80C3514(void); +u16 sub_80C3580(void); #include "data/text/map_section_names.h" @@ -96,6 +108,8 @@ extern const u32 gUnknown_83F0C0C[]; extern const u32 gUnknown_83F0CF0[]; extern const u32 gUnknown_83F1978[]; extern const u32 gUnknown_83F19A0[]; +extern const struct BgTemplate gUnknown_83F1A50[4]; +extern const struct WindowTemplate gUnknown_83F1A60[]; extern const u8 sSeviiMapsecs[3][30]; extern const u8 gUnknown_83F1B00[3][4]; @@ -462,3 +476,126 @@ void sub_80C04E4(u8 taskId) break; } } + +void sub_80C07D0(TaskFunc taskFunc) +{ + gUnknown_20399D4->field_47B8 = taskFunc; +} + +TaskFunc sub_80C07E4(void) +{ + return gUnknown_20399D4->field_47B8; +} + +void sub_80C07F8(u8 taskId) +{ + gTasks[taskId].func = gUnknown_20399D4->field_47B8; +} + +void sub_80C0820(u8 taskId) +{ + if (sub_80C0E04(2) == TRUE) + sub_80C25BC(); + sub_80C4A04(); + sub_80C3188(); + sub_80C4348(); + sub_80C4D30(); + DestroyTask(taskId); + FreeAllWindowBuffers(); + if (gUnknown_20399D4->field_47BC == NULL) + SetMainCallback2(gMain.savedCallback); + else + SetMainCallback2(gUnknown_20399D4->field_47BC); + if (gUnknown_20399D4 != NULL) + { + FREE_AND_SET_NULL(gUnknown_20399D4); + } +} + +void sub_80C0898(void) +{ + if (gUnknown_20399D4 != NULL) + { + FREE_AND_SET_NULL(gUnknown_20399D4); + } +} + +void sub_80C08B4(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80C08CC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_80C08E0(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); +} + +void sub_80C08F4(void) +{ + SetVBlankCallback(sub_80C08CC); +} + +void sub_80C0904(void) +{ + DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16Defvars(3, 0, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_83F1A50, NELEMS(gUnknown_83F1A50)); + 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); + InitWindows(gUnknown_83F1A60); + DeactivateAllTextPrinters(); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); + sub_80C0A2C(); + sub_80C0AB8(); +} + +void sub_80C0A2C(void) +{ + SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796); + SetBgTilemapBuffer(1, gUnknown_20399D4->field_2796); + SetBgTilemapBuffer(2, gUnknown_20399D4->field_3796); +} + +void sub_80C0A6C(void) +{ + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); +} + +void sub_80C0A88(u8 mode) +{ + switch (mode) + { + case 0: + ShowBg(0); + ShowBg(3); + break; + case 1: + HideBg(0); + HideBg(3); + break; + } +} |