1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#include "global.h"
#include "asm.h"
#include "main.h"
#include "menu.h"
#include "palette.h"
#include "sprite.h"
#include "text.h"
extern void sub_80FA8EC(u32, u8);
extern void sub_80FAB10(void);
extern u8 sub_80FAB60(void);
extern void sub_80FBCF0(u32, u8);
extern void sub_80FBB3C(u16, u16);
struct RegionMapStruct
{
u8 str[0x16];
u8 unk16;
u8 filler[0x869];
};
struct UnkStruct
{
MainCallback callback;
u8 filler[4];
struct RegionMapStruct unk8;
u16 unk888;
};
extern struct UnkStruct unk_2000000;
extern u8 gOtherText_Hoenn[];
void CB2_FieldInitRegionMap(void);
void CB2_FieldRegionMap(void);
void VBlankCB_FieldRegionMap(void);
void sub_813EFDC(void);
void sub_813F0C8(void);
void FieldInitRegionMap(MainCallback callback)
{
SetVBlankCallback(NULL);
unk_2000000.unk888 = 0;
unk_2000000.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();
sub_80FA8EC((u32)&unk_2000000.unk8, 0);
sub_80FBCF0(0, 0);
sub_80FBB3C(1, 1);
SetUpWindowConfig(&gWindowConfig_81E709C);
InitMenuWindow(&gWindowConfig_81E709C);
MenuZeroFillScreen();
REG_BG0CNT = 7936;
MenuDrawTextWindow(21, 0, 29, 3);
sub_8072BD8(gOtherText_Hoenn, 0x16, 1, 0x38);
MenuDrawTextWindow(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 (unk_2000000.unk888)
{
case 0:
REG_DISPCNT = 5441;
unk_2000000.unk888++;
break;
case 1:
if (!gPaletteFade.active)
unk_2000000.unk888++;
break;
case 2:
switch (sub_80FAB60())
{
case 3:
sub_813F0C8();
break;
case 4:
case 5:
unk_2000000.unk888++;
}
break;
case 3:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
unk_2000000.unk888++;
break;
case 4:
if (!gPaletteFade.active)
{
sub_80FAB10();
SetMainCallback2(unk_2000000.callback);
}
break;
}
}
void sub_813F0C8(void)
{
MenuFillWindowRectWithBlankTile(17, 17, 28, 18);
if (unk_2000000.unk8.unk16)
MenuPrint(unk_2000000.unk8.str, 17, 17);
}
|