forked from rh-hideout/pokeemerald-expansion
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtext_window.c
281 lines (257 loc) · 16.1 KB
/
text_window.c
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
#include "global.h"
#include "text.h"
#include "text_window.h"
#include "window.h"
#include "palette.h"
#include "bg.h"
#include "graphics.h"
#include "menu.h"
const u8 gTextWindowFrame1_Gfx[] = INCBIN_U8("graphics/text_window/1.4bpp");
const u8 sTextWindowFrame2_Gfx[] = INCBIN_U8("graphics/text_window/2.4bpp");
const u8 sTextWindowFrame3_Gfx[] = INCBIN_U8("graphics/text_window/3.4bpp");
const u8 sTextWindowFrame4_Gfx[] = INCBIN_U8("graphics/text_window/4.4bpp");
const u8 sTextWindowFrame5_Gfx[] = INCBIN_U8("graphics/text_window/5.4bpp");
const u8 sTextWindowFrame6_Gfx[] = INCBIN_U8("graphics/text_window/6.4bpp");
const u8 sTextWindowFrame7_Gfx[] = INCBIN_U8("graphics/text_window/7.4bpp");
const u8 sTextWindowFrame8_Gfx[] = INCBIN_U8("graphics/text_window/8.4bpp");
const u8 sTextWindowFrame9_Gfx[] = INCBIN_U8("graphics/text_window/9.4bpp");
const u8 sTextWindowFrame10_Gfx[] = INCBIN_U8("graphics/text_window/10.4bpp");
const u8 sTextWindowFrame11_Gfx[] = INCBIN_U8("graphics/text_window/11.4bpp");
const u8 sTextWindowFrame12_Gfx[] = INCBIN_U8("graphics/text_window/12.4bpp");
const u8 sTextWindowFrame13_Gfx[] = INCBIN_U8("graphics/text_window/13.4bpp");
const u8 sTextWindowFrame14_Gfx[] = INCBIN_U8("graphics/text_window/14.4bpp");
const u8 sTextWindowFrame15_Gfx[] = INCBIN_U8("graphics/text_window/15.4bpp");
const u8 sTextWindowFrame16_Gfx[] = INCBIN_U8("graphics/text_window/16.4bpp");
const u8 sTextWindowFrame17_Gfx[] = INCBIN_U8("graphics/text_window/17.4bpp");
const u8 sTextWindowFrame18_Gfx[] = INCBIN_U8("graphics/text_window/18.4bpp");
const u8 sTextWindowFrame19_Gfx[] = INCBIN_U8("graphics/text_window/19.4bpp");
const u8 sTextWindowFrame20_Gfx[] = INCBIN_U8("graphics/text_window/20.4bpp");
const u8 sTextWindowFrame21_Gfx[] = INCBIN_U8("graphics/text_window/21.4bpp");
const u16 gTextWindowFrame1_Pal[] = INCBIN_U16("graphics/text_window/1.gbapal");
const u16 sTextWindowFrame2_Pal[] = INCBIN_U16("graphics/text_window/2.gbapal");
const u16 sTextWindowFrame3_Pal[] = INCBIN_U16("graphics/text_window/3.gbapal");
const u16 sTextWindowFrame4_Pal[] = INCBIN_U16("graphics/text_window/4.gbapal");
const u16 sTextWindowFrame5_Pal[] = INCBIN_U16("graphics/text_window/5.gbapal");
const u16 sTextWindowFrame6_Pal[] = INCBIN_U16("graphics/text_window/6.gbapal");
const u16 sTextWindowFrame7_Pal[] = INCBIN_U16("graphics/text_window/7.gbapal");
const u16 sTextWindowFrame8_Pal[] = INCBIN_U16("graphics/text_window/8.gbapal");
const u16 sTextWindowFrame9_Pal[] = INCBIN_U16("graphics/text_window/9.gbapal");
const u16 sTextWindowFrame10_Pal[] = INCBIN_U16("graphics/text_window/10.gbapal");
const u16 sTextWindowFrame11_Pal[] = INCBIN_U16("graphics/text_window/11.gbapal");
const u16 sTextWindowFrame12_Pal[] = INCBIN_U16("graphics/text_window/12.gbapal");
const u16 sTextWindowFrame13_Pal[] = INCBIN_U16("graphics/text_window/13.gbapal");
const u16 sTextWindowFrame14_Pal[] = INCBIN_U16("graphics/text_window/14.gbapal");
const u16 sTextWindowFrame15_Pal[] = INCBIN_U16("graphics/text_window/15.gbapal");
const u16 sTextWindowFrame16_Pal[] = INCBIN_U16("graphics/text_window/16.gbapal");
const u16 sTextWindowFrame17_Pal[] = INCBIN_U16("graphics/text_window/17.gbapal");
const u16 sTextWindowFrame18_Pal[] = INCBIN_U16("graphics/text_window/18.gbapal");
const u16 sTextWindowFrame19_Pal[] = INCBIN_U16("graphics/text_window/19.gbapal");
const u16 sTextWindowFrame20_Pal[] = INCBIN_U16("graphics/text_window/20.gbapal");
const u16 sTextWindowFrame21_Pal1[] = INCBIN_U16("graphics/text_window/21.gbapal");
const u16 sTextWindowFrame21_Pal2[] = INCBIN_U16("graphics/text_window/21_2.gbapal");
const u16 sTextWindowFrame21_Pal3[] = INCBIN_U16("graphics/text_window/21_3.gbapal");
const u16 sTextWindowFrame21_Pal4[] = INCBIN_U16("graphics/text_window/21_4.gbapal");
const u16 sTextWindowFrame21_Pal5[] = INCBIN_U16("graphics/text_window/21_5.gbapal");
const u16 sTextWindowFrame21_Pal6[] = INCBIN_U16("graphics/text_window/21_6.gbapal");
const u16 sTextWindowFrame21_Pal7[] = INCBIN_U16("graphics/text_window/21_7.gbapal");
const u16 sTextWindowFrame21_Pal8[] = INCBIN_U16("graphics/text_window/21_8.gbapal");
const u8 gTextWindowFrame1_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/1.4bpp");
const u8 sTextWindowFrame2_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/2.4bpp");
const u8 sTextWindowFrame3_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/3.4bpp");
const u8 sTextWindowFrame4_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/4.4bpp");
const u8 sTextWindowFrame5_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/5.4bpp");
const u8 sTextWindowFrame6_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/6.4bpp");
const u8 sTextWindowFrame7_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/7.4bpp");
const u8 sTextWindowFrame8_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/8.4bpp");
const u8 sTextWindowFrame9_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/9.4bpp");
const u8 sTextWindowFrame10_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/10.4bpp");
const u8 sTextWindowFrame11_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/11.4bpp");
const u8 sTextWindowFrame12_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/12.4bpp");
const u8 sTextWindowFrame13_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/13.4bpp");
const u8 sTextWindowFrame14_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/14.4bpp");
const u8 sTextWindowFrame15_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/15.4bpp");
const u8 sTextWindowFrame16_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/16.4bpp");
const u8 sTextWindowFrame17_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/17.4bpp");
const u8 sTextWindowFrame18_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/18.4bpp");
const u8 sTextWindowFrame19_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/19.4bpp");
const u8 sTextWindowFrame20_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/20.4bpp");
const u8 sTextWindowFrame21_GfxOpaque[] = INCBIN_U8("graphics/text_window/opaque/21.4bpp");
const u16 gTextWindowFrame1_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/1.gbapal");
const u16 sTextWindowFrame2_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/2.gbapal");
const u16 sTextWindowFrame3_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/3.gbapal");
const u16 sTextWindowFrame4_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/4.gbapal");
const u16 sTextWindowFrame5_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/5.gbapal");
const u16 sTextWindowFrame6_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/6.gbapal");
const u16 sTextWindowFrame7_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/7.gbapal");
const u16 sTextWindowFrame8_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/8.gbapal");
const u16 sTextWindowFrame9_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/9.gbapal");
const u16 sTextWindowFrame10_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/10.gbapal");
const u16 sTextWindowFrame11_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/11.gbapal");
const u16 sTextWindowFrame12_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/12.gbapal");
const u16 sTextWindowFrame13_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/13.gbapal");
const u16 sTextWindowFrame14_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/14.gbapal");
const u16 sTextWindowFrame15_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/15.gbapal");
const u16 sTextWindowFrame16_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/16.gbapal");
const u16 sTextWindowFrame17_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/17.gbapal");
const u16 sTextWindowFrame18_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/18.gbapal");
const u16 sTextWindowFrame19_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/19.gbapal");
const u16 sTextWindowFrame20_PalOpaque[] = INCBIN_U16("graphics/text_window/opaque/20.gbapal");
const u16 sTextWindowFrame21_Pal1Opaque[] = INCBIN_U16("graphics/text_window/opaque/21.gbapal");
const u16 sTextWindowFrame21_Pal2Opaque[] = INCBIN_U16("graphics/text_window/opaque/21_2.gbapal");
const u16 sTextWindowFrame21_Pal3Opaque[] = INCBIN_U16("graphics/text_window/opaque/21_3.gbapal");
const u16 sTextWindowFrame21_Pal4Opaque[] = INCBIN_U16("graphics/text_window/opaque/21_4.gbapal");
const u16 sTextWindowFrame21_Pal5Opaque[] = INCBIN_U16("graphics/text_window/opaque/21_5.gbapal");
const u16 sTextWindowFrame21_Pal6Opaque[] = INCBIN_U16("graphics/text_window/opaque/21_6.gbapal");
const u16 sTextWindowFrame21_Pal7Opaque[] = INCBIN_U16("graphics/text_window/opaque/21_7.gbapal");
const u16 sTextWindowFrame21_Pal8Opaque[] = INCBIN_U16("graphics/text_window/opaque/21_8.gbapal");
static const u16 sTextWindowPalettes[][16] =
{
INCBIN_U16("graphics/text_window/message_box.gbapal"),
INCBIN_U16("graphics/text_window/text_pal1.gbapal"),
INCBIN_U16("graphics/text_window/text_pal2.gbapal"),
INCBIN_U16("graphics/text_window/text_pal3.gbapal"),
INCBIN_U16("graphics/text_window/text_pal4.gbapal")
};
static const struct TilesPal sWindowFrames[WINDOW_FRAMES_COUNT] =
{
{gTextWindowFrame1_Gfx, gTextWindowFrame1_Pal},
{sTextWindowFrame2_Gfx, sTextWindowFrame2_Pal},
{sTextWindowFrame3_Gfx, sTextWindowFrame3_Pal},
{sTextWindowFrame4_Gfx, sTextWindowFrame4_Pal},
{sTextWindowFrame5_Gfx, sTextWindowFrame5_Pal},
{sTextWindowFrame6_Gfx, sTextWindowFrame6_Pal},
{sTextWindowFrame7_Gfx, sTextWindowFrame7_Pal},
{sTextWindowFrame8_Gfx, sTextWindowFrame8_Pal},
{sTextWindowFrame9_Gfx, sTextWindowFrame9_Pal},
{sTextWindowFrame10_Gfx, sTextWindowFrame10_Pal},
{sTextWindowFrame11_Gfx, sTextWindowFrame11_Pal},
{sTextWindowFrame12_Gfx, sTextWindowFrame12_Pal},
{sTextWindowFrame13_Gfx, sTextWindowFrame13_Pal},
{sTextWindowFrame14_Gfx, sTextWindowFrame14_Pal},
{sTextWindowFrame15_Gfx, sTextWindowFrame15_Pal},
{sTextWindowFrame16_Gfx, sTextWindowFrame16_Pal},
{sTextWindowFrame17_Gfx, sTextWindowFrame17_Pal},
{sTextWindowFrame18_Gfx, sTextWindowFrame18_Pal},
{sTextWindowFrame19_Gfx, sTextWindowFrame19_Pal},
{sTextWindowFrame20_Gfx, sTextWindowFrame20_Pal},
{sTextWindowFrame21_Gfx, sTextWindowFrame21_Pal1},
{sTextWindowFrame21_Gfx, sTextWindowFrame21_Pal2},
{sTextWindowFrame21_Gfx, sTextWindowFrame21_Pal3},
{sTextWindowFrame21_Gfx, sTextWindowFrame21_Pal4},
{sTextWindowFrame21_Gfx, sTextWindowFrame21_Pal5},
{sTextWindowFrame21_Gfx, sTextWindowFrame21_Pal6},
{sTextWindowFrame21_Gfx, sTextWindowFrame21_Pal7},
{sTextWindowFrame21_Gfx, sTextWindowFrame21_Pal8},
};
static const u16 sTextWindowDexNavFrame[] = INCBIN_U16("graphics/text_window/dexnav_pal.gbapal");
static const struct TilesPal sDexNavWindowFrame = {gTextWindowFrame1_Gfx, sTextWindowDexNavFrame};
// code
const struct TilesPal *GetWindowFrameTilesPal(u8 id)
{
if (id >= WINDOW_FRAMES_COUNT)
return &sWindowFrames[0];
else
return &sWindowFrames[id];
}
void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset)
{
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gMessageBox_Gfx, 0x1C0, destOffset);
LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, PLTT_SIZE_4BPP);
}
void LoadSignBoxGfx(u8 windowId, u16 destOffset, u8 palOffset)
{
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gSignpostWindow_Gfx, 0x1C0, destOffset);
LoadPalette(GetTextWindowPalette(1), palOffset, PLTT_SIZE_4BPP);
}
void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset)
{
LoadUserWindowBorderGfx(windowId, destOffset, palOffset);
}
void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset)
{
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), sWindowFrames[frameId].tiles, 0x120, destOffset);
LoadPalette(sWindowFrames[frameId].pal, palOffset, PLTT_SIZE_4BPP);
}
void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset)
{
LoadWindowGfx(windowId, gSaveBlock2Ptr->optionsWindowFrameType, destOffset, palOffset);
}
void DrawTextBorderOuter(u8 windowId, u16 tileNum, u8 palNum)
{
u8 bgLayer = GetWindowAttribute(windowId, WINDOW_BG);
u16 tilemapLeft = GetWindowAttribute(windowId, WINDOW_TILEMAP_LEFT);
u16 tilemapTop = GetWindowAttribute(windowId, WINDOW_TILEMAP_TOP);
u16 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
u16 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
FillBgTilemapBufferRect(bgLayer, tileNum + 0, tilemapLeft - 1, tilemapTop - 1, 1, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 1, tilemapLeft, tilemapTop - 1, width, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 2, tilemapLeft + width, tilemapTop - 1, 1, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 3, tilemapLeft - 1, tilemapTop, 1, height, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 5, tilemapLeft + width, tilemapTop, 1, height, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 6, tilemapLeft - 1, tilemapTop + height, 1, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 7, tilemapLeft, tilemapTop + height, width, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 8, tilemapLeft + width, tilemapTop + height, 1, 1, palNum);
}
void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum)
{
u8 bgLayer = GetWindowAttribute(windowId, WINDOW_BG);
u16 tilemapLeft = GetWindowAttribute(windowId, WINDOW_TILEMAP_LEFT);
u16 tilemapTop = GetWindowAttribute(windowId, WINDOW_TILEMAP_TOP);
u16 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
u16 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
FillBgTilemapBufferRect(bgLayer, tileNum + 0, tilemapLeft, tilemapTop, 1, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 1, tilemapLeft + 1, tilemapTop, width - 2, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 2, tilemapLeft + width - 1, tilemapTop, 1, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 3, tilemapLeft, tilemapTop + 1, 1, height - 2, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 5, tilemapLeft + width - 1, tilemapTop + 1, 1, height - 2, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 6, tilemapLeft, tilemapTop + height - 1, 1, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 7, tilemapLeft + 1, tilemapTop + height - 1, width - 2, 1, palNum);
FillBgTilemapBufferRect(bgLayer, tileNum + 8, tilemapLeft + width - 1, tilemapTop + height - 1, 1, 1, palNum);
}
void rbox_fill_rectangle(u8 windowId)
{
u8 bgLayer = GetWindowAttribute(windowId, WINDOW_BG);
u16 tilemapLeft = GetWindowAttribute(windowId, WINDOW_TILEMAP_LEFT);
u16 tilemapTop = GetWindowAttribute(windowId, WINDOW_TILEMAP_TOP);
u16 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
u16 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
FillBgTilemapBufferRect(bgLayer, 0, tilemapLeft - 1, tilemapTop - 1, width + 2, height + 2, 0x11);
}
const u16 *GetTextWindowPalette(u8 id)
{
switch (id)
{
case 0:
id = 0x00;
break;
case 1:
id = 0x10;
break;
case 2:
id = 0x20;
break;
case 3:
id = 0x30;
break;
case 4:
default:
id = 0x40;
break;
}
return (const u16 *)(sTextWindowPalettes) + id;
}
const u16 *GetOverworldTextboxPalettePtr(void)
{
return gMessageBox_Pal;
}
// Effectively LoadUserWindowBorderGfx but specifying the bg directly instead of a window from that bg
void LoadUserWindowBorderGfxOnBg(u8 bg, u16 destOffset, u8 palOffset)
{
LoadBgTiles(bg, sWindowFrames[gSaveBlock2Ptr->optionsWindowFrameType].tiles, 0x120, destOffset);
LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, PLTT_SIZE_4BPP);
}
void LoadDexNavWindowGfx(u8 windowId, u16 destOffset, u8 palOffset)
{
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), sDexNavWindowFrame.tiles, 0x120, destOffset);
LoadPalette(sDexNavWindowFrame.pal, palOffset, 32);
}