3#include "message_ids.h"
7#include "charset/postcard.png.h"
8#include "charset/letter_content_1.png.h"
12 return (s32)(f + 0.999f);
60 { .v = { .ob = {1, 0, 0}, .tc = {0, 0}, .cn = {255, 255, 248, 255} } },
61 { .v = { .ob = {0x20, 0, 0}, .tc = {0x400, 0}, .cn = {255, 255, 248, 255} } },
62 { .v = { .ob = {0x1, 0xFFC0, 0}, .tc = {0, 0x800}, .cn = {191, 184, 176, 255} } },
63 { .v = { .ob = {0x20, 0xFFC0, 0}, .tc = {0x400, 0x800}, .cn = {191, 184, 176, 255} } },
67 { .v = { .ob = {0x20, 0, 0}, .tc = {0, 0}, .cn = {255, 255, 248, 255} } },
68 { .v = { .ob = {0xE1, 0, 0}, .tc = {0x100, 0}, .cn = {255, 255, 248, 255} } },
69 { .v = { .ob = {0x20, 0xFFC0, 0}, .tc = {0, 0x800}, .cn = {191, 184, 176, 255} } },
70 { .v = { .ob = {0xE1, 0xFFC0, 0}, .tc = {0x100, 0x800}, .cn = {191, 184, 176, 255} } },
74 { .v = { .ob = {0xE1, 0, 0}, .tc = {0, 0}, .cn = {255, 255, 248, 255} } },
75 { .v = { .ob = {0x100, 0, 0}, .tc = {0x400, 0}, .cn = {255, 255, 248, 255} } },
76 { .v = { .ob = {0xE1, 0xFFC0, 0}, .tc = {0, 0x800}, .cn = {191, 184, 176, 255} } },
77 { .v = { .ob = {0x100, 0xFFC0, 0}, .tc = {0x400, 0x800}, .cn = {191, 184, 176, 255} } },
81 { .v = { .ob = {0xFFF1, 0x001E, 0}, .tc = {0, 0}, .cn = {191, 184, 176, 255} } },
82 { .v = { .ob = {0xF, 0x001E, 0}, .tc = {0x1E0, 0}, .cn = {191, 184, 176, 255} } },
83 { .v = { .ob = {0xFFFF, 0, 0}, .tc = {0, 0x1E0}, .cn = {191, 184, 176, 255} } },
84 { .v = { .ob = {1, 0, 0}, .tc = {0x1E0, 0x1E0}, .cn = {191, 184, 176, 255} } },
88 { .v = { .ob = {0xFFF1, 0x001E, 0}, .tc = {0, 0}, .cn = {191, 184, 176, 255} } },
89 { .v = { .ob = {0xF, 0x001E, 0}, .tc = {0x1E0, 0}, .cn = {191, 184, 176, 255} } },
90 { .v = { .ob = {0xFFFF, 0, 0}, .tc = {0, 0x1E0}, .cn = {191, 184, 176, 255} } },
91 { .v = { .ob = {1, 0, 0}, .tc = {0x1E0, 0x1E0}, .cn = {191, 184, 176, 255} } },
114u8 D_8014C588[] = { 105, 100, 77, 57, 40, 27, 16, 8, 3, 0, 0, 0};
141 switch (
printer->windowState) {
144 rotZ = (4 -
printer->fadeInCounter) * 3;
152 rotZ = -
printer->fadeOutCounter;
160 switch (
printer->windowState) {
177#define MSG_NORMAL_WIDTH 192
178#define MSG_NORMAL_X 32
179#define MSG_NORMAL_WIN_WIDTH 256
180#define MSG_NORMAL_WIN_HEIGHT 64
181#define MSG_NORMAL_TEXT_Y 8
182#define MSG_NORMAL_ARROW_X 253
183#define MSG_NORMAL_ARROW_Y 56
184#define MSG_NORMAL_HEIGHT_CAP 64
185#define MSG_NORMAL_PAGE_HT 16
186#define MSG_INSPECT_TEXT_Y 5
187#define MSG_SIGN_TEXT_Y 13
188#define MSG_SIGN_WIDTH 240
189#define MSG_SIGN_OFFSET_X 20
190#define MSG_POPUP_TEXT_Y 8
191#define MSG_EPILOGUE_TEXT_Y 0
193#define MSG_NORMAL_WIDTH 218
194#define MSG_NORMAL_X 22
195#define MSG_NORMAL_WIN_WIDTH 296
196#define MSG_NORMAL_WIN_HEIGHT 68
197#define MSG_NORMAL_TEXT_Y 6
198#define MSG_NORMAL_ARROW_X 276
199#define MSG_NORMAL_ARROW_Y 57
200#define MSG_NORMAL_HEIGHT_CAP 68
201#define MSG_NORMAL_PAGE_HT 14
202#define MSG_INSPECT_TEXT_Y 3
203#define MSG_SIGN_TEXT_Y 11
204#define MSG_SIGN_WIDTH 280
205#define MSG_SIGN_OFFSET_X 0
206#define MSG_POPUP_TEXT_Y 4
207#define MSG_EPILOGUE_TEXT_Y -2
214 u16 flag,
u8 alpha) {
305 msg_drawState = &D_80155D20;
318 msg_drawState->
clipX[0] = 0;
319 msg_drawState->
clipY[0] = 0;
324 msg_drawState->
unk_29 = 0;
326 msg_drawState->
unk_2C = 0;
333 msg_drawState->
font = 0;
344 msg_drawState->
font = 1;
401 msg_drawState->
nextPos[1] += 5;
433 if (
printer->maxLinesPerPage == 1) {
437 }
else if (
printer->maxLinesPerPage == 2) {
447 switch (
printer->maxLinesPerPage) {
489 printer->windowSize.y = height;
527 if (
printer->fadeInCounter == 7) {
550 if (
printer->fadeOutCounter >= 5) {
558 if (((
u32)(
printer->openStartPos.x - 20) <= 280) && (
printer->openStartPos.y <= 220)) {
564 msg_drawState->
clipX[0] = 20;
586 if (
printer->fadeInCounter == 6) {
611 if (
printer->fadeOutCounter >= 5) {
650 printer->rewindArrowPos.x = msg_drawState->
clipX[1] - 17;
651 printer->rewindArrowPos.y = msg_drawState->
clipY[1] - 17;
673 if (
printer->fadeOutCounter == 4) {
693 msg_drawState->
nextPos[1] -= 2;
707 msg_drawState->
clipY[0] = 40;
710 printer->rewindArrowPos.x = msg_drawState->
clipX[1] - 16;
711 printer->rewindArrowPos.y = msg_drawState->
clipY[1] - 9;
717 if (
printer->fadeInCounter == 3) {
725 if (
printer->fadeOutCounter == 3) {
739 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_sign_side_top_png,
G_IM_FMT_CI, 32, 0, 0, 0, 31, 15, 0,
G_TX_NOMIRROR |
G_TX_WRAP,
743 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_sign_side_left_png,
G_IM_FMT_CI, 16, 0, 0, 0, 15, 31, 0,
G_TX_NOMIRROR |
G_TX_WRAP,
747 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_sign_side_right_png,
G_IM_FMT_CI, 16, 0, 0, 0, 15, 31, 0,
G_TX_NOMIRROR |
G_TX_WRAP,
751 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_sign_side_bottom_png,
G_IM_FMT_CI, 32, 0, 0, 0, 31, 15, 0,
G_TX_NOMIRROR |
G_TX_WRAP,
755 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_sign_fill_png,
G_IM_FMT_CI, 8, 0, 0, 0, 7, 7, 0,
G_TX_NOMIRROR |
G_TX_WRAP,
768 msg_drawState->
clipX[0] = 45;
769 msg_drawState->
clipY[0] = 32;
770 msg_drawState->
clipX[1] = 272;
771 msg_drawState->
clipY[1] = 81;
772 printer->rewindArrowPos.x = msg_drawState->
clipX[1] - 21;
773 printer->rewindArrowPos.y = msg_drawState->
clipY[1] - 20;
783 if (
printer->fadeInCounter == 3) {
791 if (
printer->fadeOutCounter == 3) {
809 msg_drawState->
clipX[0] = 0;
811 msg_drawState->
clipY[0] = 0;
822 printer->windowSize.y, 255, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
NULL, 0,
NULL,
830 printer->windowBasePos.y = 110;
861 if (
printer->maxLinesPerPage >= 2) {
863 if (
printer->maxLinesPerPage == 2) {
867 if (
printer->unk_4C8 <= 0x10) {
979 msg_drawState->
clipX[0], msg_drawState->
clipY[0], msg_drawState->
clipX[1] - msg_drawState->
clipX[0],
997 msg_drawState->
clipY[0], msg_drawState->
clipX[1] - msg_drawState->
clipX[0],
1087 msg_drawState->
nextPos[0] += 14;
1243 msg_drawState->
nextPos[0] = 0;
1488 if (palette !=
sp9E) {
1523 for (i = 0; i < 5; i++) {
1584 varImgHasBorder =
FALSE;
1585 if (
printer->varImageScreenPos.x != 0) {
1586 s16 varImgFinalAlpha;
1588 varImgFinalAlpha =
printer->varImgFinalAlpha;
1591 switch (
printer->varImgHasBorder) {
1594 if (
printer->varImgHasBorder) {
1595 varImgHasBorder =
TRUE;
1597 switch (
printer->varImageDisplayState) {
1600 varImgFinalAlpha =
printer->varImageFadeTimer *
printer->varImgAlphaFadeStep;
1601 if (
printer->varImgFinalAlpha <= varImgFinalAlpha) {
1602 varImgFinalAlpha =
printer->varImgFinalAlpha;
1603 printer->varImageFadeTimer = 0;
1604 printer->varImageDisplayState = 1;
1612 varImgFinalAlpha =
printer->varImgFinalAlpha -
printer->varImgAlphaFadeStep *
printer->varImageFadeTimer;
1613 if (varImgFinalAlpha < 1) {
1614 printer->varImageScreenPos.x = 0;
1624 if (varImgFinalAlpha > 0) {
1625 if (varImgHasBorder) {
1632 printer->varImageScreenPos.x,
printer->varImageScreenPos.y, 0, 0,
1660 s32 ulx, texOffsetX;
1661 s32 uly, texOffsetY;
1789 u16
lrX = posX + sizeX;
1790 u16
lrY = posY + sizeY;
1810 switch (msg_drawState->
unk_29) {
1832 if (opacity == 255 && scaleX == 1.0 && scaleY == 1.0) {
1865 if (scaleX != 1.0 || scaleY != 1.0) {
1883 if (
printer->maxLinesPerPage == 3) {
1889 if (opacity >= 255) {
1913 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_bubble_left_png,
G_IM_FMT_CI, 32, 0, 0, 0, 31, 63, 0,
1917 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_bubble_mid_png,
G_IM_FMT_CI, 8, 0, 0, 0, 7, 63, 0,
1921 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_bubble_right_png,
G_IM_FMT_CI, 32, 0, 0, 0, 31, 63, 0,
1929 s16 targetX, targetY;
1942 if (
printer->openStartPos.x == 0) {
1949 printer->maxLinesPerPage == 3) {
1963 if (
printer->openStartPos.x < targetX) {
1967 if (
abs(angle) < 45) {
1974 if (
printer->openStartPos.x > targetX) {
1978 if (
abs(angle) < 45) {
2007 if (
abs(angle) >= 75) {
2035 gDPLoadTextureTile_4b(
gMainGfxPos++,
ui_msg_arrow_png,
G_IM_FMT_CI, 16, 0, 0, 0, 15, 15, 0,
G_TX_NOMIRROR |
G_TX_WRAP,
G_TX_NOMIRROR |
G_TX_WRAP, 4, 4,
G_TX_NOLOD,
G_TX_NOLOD);
2050 if (sizeX < 16 || sizeY < 16) {
2086 if (posX + sizeX - 8 > 0) {
2104 gDPLoadTextureBlock_4b(
gMainGfxPos++,
ui_msg_background_png,
G_IM_FMT_I, 64, 64, 0,
G_TX_NOMIRROR |
G_TX_WRAP,
G_TX_NOMIRROR |
G_TX_WRAP, 6, 6,
G_TX_NOLOD,
G_TX_NOLOD);
2117 quads[2].ulx = (posX + 16) * 4;
2118 quads[2].uly = posY * 4;
2119 quads[2].lrx = (posX + sizeX - 16) * 4;
2120 quads[2].lry = (posY + 8) * 4;
2122 quads[13].ulx = (posX + 16) * 4;
2123 quads[13].uly = (posY + sizeY - 8) * 4;
2124 quads[13].lrx = (posX + sizeX - 16) * 4;
2125 quads[13].lry = (posY + sizeY) * 4;
2126 }
else if (sizeX > 16 && sizeX < 24) {
2127 quads[2].ulx = (posX + 8) * 4;
2128 quads[2].uly = posY * 4;
2129 quads[2].lrx = (posX + sizeX - 8) * 4;
2130 quads[2].lry = (posY + 8) * 4;
2132 quads[13].ulx = (posX + 8) * 4;
2133 quads[13].uly = (posY + sizeY - 8) * 4;
2134 quads[13].lrx = (posX + sizeX - 8) * 4;
2135 quads[13].lry = (posY + sizeY) * 4;
2137 quads[2].ulx = 10000;
2138 quads[13].ulx = 10000;
2142 quads[7].ulx = posX * 4;
2143 quads[7].uly = (posY + 16) * 4;
2144 quads[7].lrx = (posX + 8) * 4;
2145 quads[7].lry = (posY + sizeY - 16) * 4;
2147 quads[8].ulx = (posX + sizeX - 8) * 4;
2148 quads[8].uly = (posY + 16) * 4;
2149 quads[8].lrx = (posX + sizeX) * 4;
2150 quads[8].lry = (posY + sizeY - 16) * 4;
2151 }
else if (sizeY > 16 && sizeY < 24) {
2152 quads[7].ulx = posX * 4;
2153 quads[7].uly = (posY + 8) * 4;
2154 quads[7].lrx = (posX + 8) * 4;
2155 quads[7].lry = (posY + sizeY - 8) * 4;
2157 quads[8].ulx = (posX + sizeX - 8) * 4;
2158 quads[8].uly = (posY + 8) * 4;
2159 quads[8].lrx = (posX + sizeX) * 4;
2160 quads[8].lry = (posY + sizeY - 8) * 4;
2162 quads[7].ulx = 10000;
2163 quads[8].ulx = 10000;
2167 quads[1].ulx = (posX + 8) * 4;
2168 quads[1].uly = posY * 4;
2169 quads[1].lrx = (posX + 16) * 4;
2170 quads[1].lry = (posY + 8) * 4;
2172 quads[3].ulx = (posX + sizeX - 16) * 4;
2173 quads[3].uly = posY * 4;
2174 quads[3].lrx = (posX + sizeX - 8) * 4;
2175 quads[3].lry = (posY + 8) * 4;
2177 quads[12].ulx = (posX + 8) * 4;
2178 quads[12].uly = (posY + sizeY - 8) * 4;
2179 quads[12].lrx = (posX + 16) * 4;
2180 quads[12].lry = (posY + sizeY) * 4;
2182 quads[14].ulx = (posX + sizeX - 16) * 4;
2183 quads[14].uly = (posY + sizeY - 8) * 4;
2184 quads[14].lrx = (posX + sizeX - 8) * 4;
2185 quads[14].lry = (posY + sizeY) * 4;
2187 quads[1].ulx = 10000;
2188 quads[3].ulx = 10000;
2189 quads[12].ulx = 10000;
2190 quads[14].ulx = 10000;
2194 quads[5].ulx = posX * 4;
2195 quads[5].uly = (posY + 8) * 4;
2196 quads[5].lrx = (posX + 8) * 4;
2197 quads[5].lry = (posY + 16) * 4;
2199 quads[6].ulx = (posX + sizeX - 8) * 4;
2200 quads[6].uly = (posY + 8) * 4;
2201 quads[6].lrx = (posX + sizeX) * 4;
2202 quads[6].lry = (posY + 16) * 4;
2204 quads[9].ulx = posX * 4;
2205 quads[9].uly = (posY + sizeY - 16) * 4;
2206 quads[9].lrx = (posX + 8) * 4;
2207 quads[9].lry = (posY + sizeY - 8) * 4;
2209 quads[10].ulx = (posX + sizeX - 8) * 4;
2210 quads[10].uly = (posY + sizeY - 16) * 4;
2211 quads[10].lrx = (posX + sizeX) * 4;
2212 quads[10].lry = (posY + sizeY - 8) * 4;
2214 quads[5].ulx = 10000;
2215 quads[6].ulx = 10000;
2216 quads[9].ulx = 10000;
2217 quads[10].ulx = 10000;
2220 quads[0].ulx = posX * 4;
2221 quads[0].uly = posY * 4;
2222 quads[0].lrx = (posX + 8) * 4;
2223 quads[0].lry = (posY + 8) * 4;
2225 quads[4].ulx = (posX + sizeX - 8) * 4;
2226 quads[4].uly = posY * 4;
2227 quads[4].lrx = (posX + sizeX) * 4;
2228 quads[4].lry = (posY + 8) * 4;
2230 quads[11].ulx = posX * 4;
2231 quads[11].uly = (posY + sizeY - 8) * 4;
2232 quads[11].lrx = (posX + 8) * 4;
2233 quads[11].lry = (posY + sizeY) * 4;
2235 quads[15].ulx = (posX + sizeX - 8) * 4;
2236 quads[15].uly = (posY + sizeY - 8) * 4;
2237 quads[15].lrx = (posX + sizeX) * 4;
2238 quads[15].lry = (posY + sizeY) * 4;
2269 gDPLoadTextureTile_4b(
gMainGfxPos++,
textures[i],
G_IM_FMT_CI, 8, 8, 0, 0, 7, 7, 0,
G_TX_WRAP,
G_TX_WRAP, 3, 3,
G_TX_NOLOD,
G_TX_NOLOD);
2285 out->charHeight =
out->texSize.y;
BSS s32 PopupMenu_SelectedIndex
unsigned char charset_standard_OFFSET[]
MessageCharData * rasters
@ MSG_FX_FLAG_DROP_SHADOW
@ MSG_FX_FLAG_GLOBAL_WAVE
@ MSG_FX_FLAG_GLOBAL_RAINBOW
@ MSG_FX_FLAG_NOISE_OUTLINE
@ MSG_FX_FLAG_SIZE_JITTER
@ MSG_FX_FLAG_DITHER_FADE
@ MSG_PRINT_FUNC_ITEM_ICON
@ MSG_PRINT_FUNC_ANIM_DELAY
@ MSG_PRINT_FUNC_ANIM_LOOP
@ MSG_PRINT_FUNC_ANIM_SPRITE
@ MSG_PRINT_FUNC_INLINE_IMAGE
@ MSG_PRINT_FUNC_SIZE_RESET
@ MSG_PRINT_FUNC_SAVE_COLOR
@ MSG_PRINT_FUNC_RESTORE_COLOR
@ MSG_PRINT_FUNC_SET_FRAME_PALETTE
@ MSG_PRINT_FUNC_START_FX
@ MSG_PRINT_FUNC_RESTORE_POS
@ MSG_PRINT_FUNC_ANIM_DONE
@ MSG_PRINT_FUNC_CENTER_X
@ MSG_PRINT_FUNC_SAVE_POS
@ MSG_CHAR_PRINT_VARIANT2
@ MSG_CHAR_PRINT_VARIANT1
@ MSG_CHAR_PRINT_FULL_SPACE
@ MSG_CHAR_PRINT_VARIANT0
@ MSG_CHAR_PRINT_FUNCTION
@ MSG_CHAR_PRINT_VARIANT3
@ MSG_CHAR_PRINT_UNK_CHAR_FA
@ MSG_CHAR_PRINT_HALF_SPACE
@ MSG_WINDOW_STATE_WAITING_FOR_CHOICE
@ MSG_WINDOW_STATE_OPENING
@ MSG_WINDOW_STATE_PRINTING
@ MSG_WINDOW_STATE_CLOSING
f32 update_lerp(s32 easing, f32 start, f32 end, s32 elapsed, s32 duration)
s32 draw_ci_image_with_clipping(u8 *raster, s32 width, s32 height, s32 fmt, s32 bitDepth, u16 *palette, s16 posX, s16 posY, u16 clipULx, u16 clipULy, u16 clipLRx, u16 clipRLy, u8 opacity)
f32 dist2D(f32 ax, f32 ay, f32 bx, f32 by)
void load_font_data(Addr offset, u16 size, void *dest)
#define INCLUDE_ASM(TYPE, FOLDER, NAME, ARGS...)
IMG_BIN ui_msg_bubble_mid_png[]
void drawbox_message_delegate(s32 data, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
#define MSG_SIGN_OFFSET_X
void msg_draw_speech_bubble(MessagePrintState *printer, s16 posX, s16 posY, s16 straightWidth, s16 curveWidth, s16 height, f32 scaleX, f32 scaleY, u8 opacity, s32 arg9)
s32 gMessageBoxFrameParts[2][16]
IMG_BIN ui_msg_lamppost_corner_bottomright_png[]
IMG_BIN D_80159B50[0x200]
IMG_BIN ui_msg_sign_side_top_png[]
s16 MsgStyleVerticalLineOffsets[]
PAL_BIN ui_msg_lamppost_pal[]
void appendGfx_message(MessagePrintState *, s16, s16, u16, u16, u16, u8)
void msg_draw_char(MessagePrintState *printer, MessageDrawState *drawState, s32 charIndex, s32 palette, s32 posX, s32 posY)
IMG_BIN ui_msg_sign_corner_topright_png[]
#define MSG_NORMAL_WIN_WIDTH
MessageImageData * MessageImageDataList[1]
void msg_draw_frame(s32 posX, s32 posY, s32 sizeX, s32 sizeY, s32 style, s32 palette, s32 fading, s32 bgAlpha, s32 frameAlpha)
#define MSG_EPILOGUE_TEXT_Y
IMG_BIN ui_msg_bubble_right_png[]
IMG_BIN ui_msg_sign_fill_png[]
IMG_BIN ui_msg_background_png[]
void appendGfx_msg_prim_rect(u8 r, u8 g, u8 b, u8 a, u16 ulX, u16 ulY, u16 lrX, u16 lrY)
u16 gMsgGlobalWaveCounter
void msg_draw_prim_rect(u8 r, u8 g, u8 b, u8 a, u16 posX, u16 posY, u16 sizeX, u16 sizeY)
s32 msg_get_draw_char_width(s32 character, s32 charset, s32 variation, f32 msgScale, s32 overrideCharWidth, u16 flags)
PAL_BIN ui_msg_sign_pal[]
#define MSG_NORMAL_TEXT_Y
void msg_reset_gfx_state(void)
#define MSG_NORMAL_ARROW_X
IMG_BIN ui_msg_sign_side_bottom_png[]
#define MSG_NORMAL_PAGE_HT
PAL_BIN D_802F4560[80][8]
IMG_BIN ui_msg_sign_side_right_png[]
IMG_BIN ui_msg_sign_corner_bottomleft_png[]
#define MSG_NORMAL_WIN_HEIGHT
void msg_draw_speech_arrow(MessagePrintState *printer)
IMG_BIN ui_msg_sign_corner_bottomright_png[]
unsigned char ui_msg_palettes[16][32]
void msg_get_glyph(s32 font, s32 variation, s32 charIndex, s32 palette, MesasgeFontGlyphData *out)
void draw_message_window(MessagePrintState *printer)
IMG_BIN ui_msg_bubble_left_png[]
MessageImageDataList gMsgVarImages
#define MSG_INSPECT_TEXT_Y
IMG_BIN ui_msg_sign_corner_topleft_png[]
#define MSG_NORMAL_ARROW_Y
#define MSG_NORMAL_HEIGHT_CAP
MessageCharset * MsgCharsets[5]
IMG_BIN ui_msg_arrow_png[]
IMG_BIN ui_msg_sign_side_left_png[]
Vtx gMsgSpeechBoxLQuad[4]
#define UNPACK_PAL_B(color)
#define PM_CC_PRIM_FULL_ALPHA
#define UNPACK_PAL_R(color)
#define PM_CC_MSG_NOISE_OUTLINE
#define UNPACK_PAL_G(color)
#define VIRTUAL_TO_PHYSICAL(addr)
s32 spr_get_npc_raster_info(SpriteRasterInfo *out, s32 npcSpriteID, s32 rasterIndex)
GameStatus * gGameStatusPtr
s32 gCurrentDisplayContextIndex
DisplayContext * gDisplayContext