diff options
Diffstat (limited to 'src/field_region_map.c')
-rw-r--r-- | src/field_region_map.c | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/field_region_map.c b/src/field_region_map.c new file mode 100644 index 000000000..54091459f --- /dev/null +++ b/src/field_region_map.c @@ -0,0 +1,123 @@ +#include "global.h" +#include "field_region_map.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "region_map.h" +#include "sprite.h" +#include "strings2.h" +#include "text.h" +#include "ewram.h" + +struct RegionMapStruct +{ + u8 str[0x16]; + u8 unk16; + u8 filler[0x869]; +}; + +struct UnkStruct +{ + MainCallback callback; + u8 filler[4]; + // This should be RegionMap, but I can't do that because it overlaps unk888. + struct RegionMapStruct unk8; + u16 unk888; +}; + +void FieldInitRegionMap(MainCallback callback) +{ + SetVBlankCallback(NULL); + ewram0_5.unk888 = 0; + ewram0_5.callback = callback; + SetMainCallback2(CB2_FieldInitRegionMap); +} + +void CB2_FieldInitRegionMap(void) +{ + REG_DISPCNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + ResetSpriteData(); + FreeAllSpritePalettes(); + // TODO: remove this cast + InitRegionMap((void *)&ewram0_5.unk8, 0); + CreateRegionMapPlayerIcon(0, 0); + CreateRegionMapCursor(1, 1); + Text_LoadWindowTemplate(&gWindowTemplate_81E709C); + InitMenuWindow(&gWindowTemplate_81E709C); + Menu_EraseScreen(); + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_TXT256x256; + Menu_DrawStdWindowFrame(21, 0, 29, 3); + sub_8072BD8(gOtherText_Hoenn, 0x16, 1, 0x38); + Menu_DrawStdWindowFrame(16, 16, 29, 19); + sub_813F0C8(); + SetMainCallback2(CB2_FieldRegionMap); + SetVBlankCallback(VBlankCB_FieldRegionMap); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); +} + +void VBlankCB_FieldRegionMap(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_FieldRegionMap(void) +{ + sub_813EFDC(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_813EFDC(void) +{ + switch (ewram0_5.unk888) + { + case 0: + REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + ewram0_5.unk888++; + break; + case 1: + if (!gPaletteFade.active) + ewram0_5.unk888++; + break; + case 2: + switch (sub_80FAB60()) + { + case 3: + sub_813F0C8(); + break; + case 4: + case 5: + ewram0_5.unk888++; + } + break; + case 3: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + ewram0_5.unk888++; + break; + case 4: + if (!gPaletteFade.active) + { + FreeRegionMapIconResources(); + SetMainCallback2(ewram0_5.callback); + } + break; + } +} + +void sub_813F0C8(void) +{ + Menu_BlankWindowRect(17, 17, 28, 18); + if (ewram0_5.unk8.unk16) + Menu_PrintText(ewram0_5.unk8.str, 17, 17); +} |