3#include "message_ids.h"
7#include "charset/postcard.png.h"
8#include "charset/letter_content_1.png.h"
19#define MSG_ROM_START (s32)msg_ROM_START
21#define MSG_ROM_START 0x1D40000
23#define MSG_ROM_START 0x1B83000
27#define CHOICE_POINTER_MOVE_RATE 5.0
29#define CHOICE_POINTER_MOVE_RATE 6.0
36 .vscale = {640, 480, 511, 0},
37 .vtrans = {640, 480, 511, 0},
54void* D_PAL_8014AE50[] = {
65 {{{ -16, 9, 0 }, 0, { 0x000, 0x000 }, { 255, 255, 255, 255 }}},
66 {{{ 16, 9, 0 }, 0, { 0x400, 0x000 }, { 255, 255, 255, 255 }}},
67 {{{ -16, -9, 0 }, 0, { 0x000, 0x240 }, { 255, 255, 255, 255 }}},
68 {{{ 16, -9, 0 }, 0, { 0x400, 0x240 }, { 255, 255, 255, 255 }}},
72 gsDPSetCycleType(G_CYC_2CYCLE),
73 gsSPClearGeometryMode(G_CULL_BOTH | G_LIGHTING),
74 gsSPSetGeometryMode(G_SHADE | G_SHADING_SMOOTH),
75 gsDPSetColorDither(G_CD_DISABLE),
76 gsDPSetAlphaDither(G_AD_DISABLE),
77 gsDPSetAlphaCompare(G_AC_NONE),
78 gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
79 gsDPSetTexturePersp(G_TP_PERSP),
80 gsDPSetTextureLUT(G_TT_NONE),
81 gsDPSetTextureFilter(G_TF_AVERAGE),
82 gsDPSetRenderMode(IM_RD | CVG_DST_SAVE | ZMODE_XLU | FORCE_BL | G_RM_PASS, IM_RD | CVG_DST_SAVE | ZMODE_XLU |
83 FORCE_BL | GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)),
95static char gMessageBuffers[2][1024];
100static u8 gMessageMsgVars[3][32];
101static s16 D_80155C98;
102static Mtx gMessageWindowProjMatrix[2];
136 .digitWidth = {11, 8, 11, 11, 11, 11, 11, 11, 11, 11},
143 .digitWidth = {9, 8, 9, 9, 9, 9, 9, 9, 9, 9},
152 .digitWidth = {11, 8, 11, 11, 11, 11, 11, 11, 11, 11},
159 .digitWidth = {9, 8, 9, 9, 9, 9, 9, 9, 9, 9},
167 gsDPSetCycleType(G_CYC_1CYCLE),
168 gsDPSetTextureFilter(G_TF_POINT),
169 gsDPSetTexturePersp(G_TP_NONE),
170 gsDPSetColorDither(G_CD_DISABLE),
171 gsDPSetAlphaDither(G_AD_DISABLE),
172 gsDPSetCombineKey(G_CK_NONE),
173 gsDPSetAlphaCompare(G_AC_NONE),
174 gsDPSetTextureLUT(G_TT_RGBA16),
175 gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
176 gsSPEndDisplayList(),
180 u16 clipULy, u16 clipLRx, u16 clipRLy);
199 for (i = 0; i <
ARRAY_COUNT(gMessagePrinters); i++) {
206 for (i = 0; i <
ARRAY_COUNT(gMessageMsgVars); i++) {
207 gMessageMsgVars[i][0] = 0;
220 u8* base = charset_ROM_START + (s32) offset;
226 if (font != D_80155C98) {
239 }
else if (font == 1) {
255 for (i = 0; i <
ARRAY_COUNT(gMessagePrinters); i++) {
286 if (speechPan < 5.0) {
288 }
else if (speechPan > 122.0) {
490 if (endPosDist >= 15) {
492 }
else if (endPosDist >= 9) {
495 }
else if (endPosDist > 96) {
497 }
else if (endPosDist > 48) {
499 }
else if (endPosDist >= 24) {
501 }
else if (endPosDist >= 16) {
503 }
else if (endPosDist >= 8) {
505 }
else if (endPosDist > 4) {
572 for (i = 0; i <
ARRAY_COUNT(gMessagePrinters); i++) {
575 guOrtho(matrix, 0.0f, 319.0f, -240.0f, 0.0f, -500.0f, 500.0f, 1.0f);
576 gSPMatrix(
gMainGfxPos++, OS_K0_TO_PHYSICAL(matrix), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
579 gSPClearGeometryMode(
gMainGfxPos++, G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN |
580 G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH);
581 gSPSetGeometryMode(
gMainGfxPos++, G_SHADE | G_SHADING_SMOOTH);
586 for (i = 0; i <
ARRAY_COUNT(gMessagePrinters); i++) {
617 volTemp = (f32)printer->
volume / 100.0;
618 pitchShift = ((character % 20) * 10) + (printer->
speechPitchShift - baseShift);
619 volume = ((
rand_int(15) + 78) * volTemp);
625 if (character & flag) {
661 u8 nextArg = *srcBuf;
673 printer->
stateFlags &= ~MSG_STATE_FLAG_SPEAKING;
674 printer->
stateFlags &= ~MSG_STATE_FLAG_PRINT_QUICKLY;
682 printer->
stateFlags &= ~MSG_STATE_FLAG_SPEAKING;
722 printer->
style = arg;
807 dma_copy(romAddr, romAddr + (charset_letter_content_1_png_width * charset_letter_content_1_png_height), printer->
letterContentImg);
860 *printBuf++ = printer->
font = *srcBuf++;
870 *printBuf++ = *srcBuf++;
877 printer->
stateFlags &= ~MSG_STATE_FLAG_PRINT_QUICKLY;
885 *printBuf++ = *srcBuf++;
912 *printBuf++ = *srcBuf++;
913 *printBuf++ = arg = *srcBuf++;
914 printer->
sizeScale = (arg >> 4) + (arg & 0xF) * 0.0625f;
929 *printBuf++ = *srcBuf++;
930 *printBuf++ = *srcBuf++;
935 *printBuf++ = *srcBuf++;
940 *printBuf++ = *srcBuf++;
945 *printBuf++ = *srcBuf++;
950 *printBuf++ = *srcBuf++;
955 *printBuf++ = *srcBuf++;
968 *printBuf++ = *srcBuf++;
969 *printBuf++ = *srcBuf++;
970 *printBuf++ = *srcBuf++;
987 offset = arg << 8 | argQ;
1034 *printBuf++ = *srcBuf++;
1035 *printBuf++ = *srcBuf++;
1036 *printBuf++ = *srcBuf++;
1042 *printBuf++ = *srcBuf++;
1043 *printBuf++ = *srcBuf++;
1048 *printBuf++ = *srcBuf++;
1065 *printBuf++ = *srcBuf++;
1082 *printBuf++ = *srcBuf++;
1091 printer->
stateFlags &= ~MSG_STATE_FLAG_SPEAKING;
1092 printer->
stateFlags &= ~MSG_STATE_FLAG_PRINT_QUICKLY;
1132 *printBuf++ = *srcBuf++;
1139 *printBuf++ = *srcBuf++;
1197 for (i = 0; i < a0; i++) {
1199 *printBuf++ = sp10[i];
1228 printer->
volume = *srcBuf++;
1235 printer->
speechSoundIDA = (arg << 0x18) + (argQ << 0x10) + (argW << 0x8) + (argE);
1240 printer->
speechSoundIDB = (arg << 0x18) + (argQ << 0x10) + (argW << 0x8) + (argE);
1245 *printBuf++ = *srcBuf++;
1251 printer->
stateFlags &= ~MSG_STATE_FLAG_40000;
1263 if (c >= MSG_CHAR_MULTIBYTE_FIRST && c <= MSG_CHAR_MULTIBYTE_LAST) {
1264 *printBuf++ = nextArg;
1270 printer->
stateFlags &= ~MSG_STATE_FLAG_SPEAKING;
1382 u8* addr = (u8*) langPtr + (msgID >> 14);
1385 dma_copy(addr, addr + 4, &offset[0]);
1387 new_langPtr = langPtr;
1388 new_langPtr = offset[0] + ((u32) new_langPtr);
1389 addr = new_langPtr + ((msgID & 0xFFFF) * 4);
1393 dma_copy(&langPtr[(u32)offset[0]], &langPtr[(u32)offset[1]], dest);
1400 dma_copy(addr, addr + 4, &offset[0]);
1421 return prevBufferPos;
1435 s32 maxLinesPerPage;
1438 if (msgID == MSG_NONE) {
1442 srcBuffer = (s8*) msgID;
1447 for (i = 0; i <
ARRAY_COUNT(gMessagePrinters); i++) {
1448 printer = &gMessagePrinters[i];
1454 printer->
msgID = msgID;
1456 get_msg_properties(msgID, &height, &width, &maxLineChars, &numLines, &maxLinesPerPage, NULL, 0);
1464 if (donePrintingWriteback != NULL) {
1465 *donePrintingWriteback = FALSE;
1480 buffer = (s8*) msgID;
1521 u8* mallocSpace = NULL;
1528 msgID = (s32)mallocSpace;
1532 msgVars = gMessageMsgVars[index];
1534 msgVars[i] = ((u8*)msgID)[i];
1545 if (mallocSpace != NULL) {
1551 s8 strBuffer[
ARRAY_COUNT(gMessageMsgVars[index])];
1557 for (i = 0, bufferIt = strBuffer; i <
ARRAY_COUNT(gMessageMsgVars[index]) - 1; i++) {
1558 s8 thisChar = bufferIt[i];
1560 if (thisChar == 0) {
1569 msgPrintState->
stateFlags &= ~MSG_STATE_FLAG_40;
1573#define CHAR_SPACE_MULTIPLIER 0.7
1575#define CHAR_SPACE_MULTIPLIER 0.6
1589 if (character >= MSG_CHAR_MULTIBYTE_FIRST && character <= MSG_CHAR_MULTIBYTE_LAST) {
1591 return charWidth * msgScale;
1595 if (overrideCharWidth != 0) {
1596 charWidth = overrideCharWidth;
1597 }
else if (
flags != 0) {
1600 if (charWidthTable != NULL
1604 charWidth = charWidthTable[character];
1616 f64 retWidth = charWidth * msgScale;
1620 return charWidth * msgScale * 0.5;
1625 return charWidth * msgScale;
1638 if (overrideCharWidth != 0) {
1639 baseWidth = overrideCharWidth;
1643 if (charWidthTable != NULL
1647 baseWidth = charWidthTable[character];
1659 f64 charWidth = baseWidth * msgScale;
1663 return baseWidth * msgScale * 0.5;
1668 return baseWidth * msgScale;
1671void get_msg_properties(s32 msgID, s32* height, s32* width, s32* maxLineChars, s32* numLines, s32* maxLinesPerPage, s32* numSpaces, u16 charset) {
1687 u16 lineCharNumbers[32];
1688 u16 linesPerPage[32];
1694 u16 maxCharsPerLine;
1710 maxCharsPerLine = 0;
1714 if (msgID == MSG_NONE) {
1723 message = (u8*)msgID;
1753 if (linesOnPage != 0) {
1754 linesPerPage[pageCount] = linesOnPage;
1756 if (pageCount >= 32) {
1763 lineWidths[lineIndex] = lineWidth;
1764 lineCharNumbers[lineIndex] = charCount;
1766 if (lineIndex >= 32) {
1774 msgStyle = message[i++];
1795 lineWidths[lineIndex] = lineWidth;
1796 lineCharNumbers[lineIndex] = charCount;
1801 functionCode = message[i++];
1802 switch (functionCode) {
1804 font = message[i++];
1858 if (message[i] == 0) {
1869 packedScaleY = message[i + 1];
1871 scale = (f32)(packedScaleY >> 4) + ((packedScaleY & 0xF) * 0.0625f);
1877 switch (message[i++]) {
1898 lineWidth +=
get_msg_width((s32)gMessageMsgVars[message[i++]], 0);
1917 if (prevChar >= MSG_CHAR_MULTIBYTE_FIRST && prevChar <= MSG_CHAR_MULTIBYTE_LAST) {
1928 if (buffer != NULL) {
1932 for (i = 0; i < lineIndex; i++) {
1933 if (maxLineWidth < lineWidths[i]) {
1934 maxLineWidth = lineWidths[i];
1936 if (maxCharsPerLine < lineCharNumbers[i]) {
1937 maxCharsPerLine = lineCharNumbers[i];
1941 if (pageCount == 0) {
1942 maxLinesOnPage = linesOnPage;
1944 for (i = 0; i < pageCount; i++) {
1945 if (maxLinesOnPage < linesPerPage[i]) {
1946 maxLinesOnPage = linesPerPage[i];
1951 if (width != NULL) {
1952 *width = maxLineWidth;
1954 if (height != NULL) {
1957 if (maxLineChars != NULL) {
1958 *maxLineChars = maxCharsPerLine;
1960 if (numLines != NULL) {
1961 *numLines = lineCount;
1963 if (maxLinesPerPage != NULL) {
1964 *maxLinesPerPage = maxLinesOnPage;
1966 if (numSpaces != NULL) {
1967 *numSpaces = spaceCount;
1987void draw_msg(s32 msgID, s32 posX, s32 posY, s32 opacity, s32 palette, u8 style) {
2007 if (opacity < 0xFF) {
2011 printer = &stackPrinter;
2055 if (mallocSpace != NULL) {
2065 f32 colorG = 255.0f;
2066 f32 colorR = 255.0f;
2067 f32 colorB = 255.0f;
2083 scale = temp * 0.2 + 0.5;
2115 gDPSetPrimColor(
gMainGfxPos++, 0, 0, colorR, colorG, colorB, 255);
2133 guScaleF(sp58, scale, scale, 1.0f);
2139 gDPLoadTextureTile(
gMainGfxPos++,
ui_msg_star_png, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0, 0, 0, 15, 17, 0, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD);
2140 gDPLoadMultiTile_4b(
gMainGfxPos++,
ui_msg_star_silhouette_png, 0x0100, 1, G_IM_FMT_I, 16, 0, 0, 0, 15, 18, 0, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 4, 5, G_TX_NOLOD, G_TX_NOLOD);
2142 gSP2Triangles(
gMainGfxPos++, 0, 2, 1, 0, 1, 2, 3, 0);
2160 s32 pointerAlpha = 255;
2161 s32 shadowAlpha = 72;
2169 s32 baseX, baseY, targetX, targetY;
2174 posX = baseX + (targetX - baseX) * moveToTargetAlpha;
2178 posY = baseY + (targetY - baseY) * moveToTargetAlpha;
2182 posX += (
cosine(posInterpPhase * 38 + 270) + 1.0) * 0.5 * 3.2;
2188 pointerAlpha = opacity;
2190 shadowAlpha = opacity;
2196 gDPSetRenderMode(
gMainGfxPos++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
2198 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 40, 40, 40, shadowAlpha);
2199 draw_image_with_clipping(
ui_point_right_png, 16, 16, G_IM_FMT_CI, G_IM_SIZ_4b, posX + 2, posY + 2, 10, 10, 300, 220);
2200 draw_ci_image_with_clipping(
ui_point_right_png, 16, 16, G_IM_FMT_CI, G_IM_SIZ_4b,
ui_point_right_pal, posX, posY, 20, 20, 300, 200, pointerAlpha);
2212 G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
2213 G_TX_NOMASK, G_TX_NOMASK,
2214 G_TX_NOLOD, G_TX_NOLOD);
2223void draw_number(s32 value, s32 x, s32 y, s32 charset, s32 palette, s32 opacity, u16 style) {
2236 if (y < 0 || y > 240) {
2242 for (i = 0; i < 10; i++) {
2244 if (valueStr[i] ==
'\0') {
2249 if (valueStr[i] ==
'-') {
2254 digit = valueStr[i] -
'0';
2265 for (i = count - 1; i >= 0; i--) {
2271 digitPosX[i] = posX;
2274 for (i = 0; i < count; i++) {
2275 digitPosX[i] = posX;
2285 for (i = 0; i < count; i++) {
2287 gDPSetRenderMode(
gMainGfxPos++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
2289 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 40, 40, 40, 72);
2290 draw_digit(raster + digits[i] * texSize, charset, digitPosX[i] + 2, y + 2);
2295 if (opacity == 255) {
2296 gDPSetRenderMode(
gMainGfxPos++, G_RM_TEX_EDGE, G_RM_TEX_EDGE2);
2297 gDPSetCombineMode(
gMainGfxPos++, G_CC_DECALRGBA, G_CC_DECALRGBA);
2299 gDPSetRenderMode(
gMainGfxPos++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
2301 gDPSetPrimColor(
gMainGfxPos++, 0, 0, 255, 255, 255, opacity);
2305 for (i = 0; i < count; i++) {
2306 posX = digitPosX[i];
2307 if (posX > 0 && posX < 320) {
2308 draw_digit(raster + digits[i] * texSize, charset, posX, y);
unsigned char charset_standard_pal_OFFSET[]
unsigned char charset_postcard_OFFSET[]
unsigned short charset_postcard_pal_OFFSET[]
unsigned char charset_standard_OFFSET[]
unsigned char charset_subtitle_pal_OFFSET[]
unsigned char charset_subtitle_OFFSET[]
unsigned char charset_title_OFFSET[]
s32 * closedWritebackBool
MessageCharData * rasters
u16 * letterBackgroundPal
s16 rewindArrowSwingPhase
#define general_heap_malloc
@ DRAW_MSG_STYLE_DROP_SHADOW
@ DRAW_NUMBER_STYLE_ALIGN_RIGHT
drawn to the left of posX
@ DRAW_NUMBER_STYLE_DROP_SHADOW
@ DRAW_NUMBER_STYLE_MONOSPACE
@ MSG_STATE_FLAG_PRINT_QUICKLY
@ MSG_STATE_FLAG_SPEAKING
@ MSG_READ_FUNC_RESTORE_COLOR
@ MSG_READ_FUNC_RESET_GFX
@ MSG_READ_FUNC_INPUT_OFF
@ MSG_READ_FUNC_SET_CURSOR
@ MSG_READ_FUNC_SET_CANCEL
@ MSG_READ_FUNC_DELAY_OFF
@ MSG_PRINT_FUNC_ITEM_ICON
@ MSG_READ_FUNC_SAVE_COLOR
@ MSG_READ_FUNC_CUSTOM_VOICE
@ MSG_PRINT_FUNC_ANIM_DELAY
@ MSG_READ_FUNC_INLINE_IMAGE
@ 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_READ_FUNC_RESTORE_POS
@ MSG_READ_FUNC_ENABLE_CDOWN_NEXT
@ MSG_READ_FUNC_HIDE_IMAGE
@ MSG_PRINT_FUNC_RESTORE_COLOR
@ MSG_PRINT_FUNC_START_FX
@ MSG_READ_FUNC_END_CHOICE
@ MSG_PRINT_FUNC_RESTORE_POS
@ MSG_READ_FUNC_ANIM_LOOP
@ MSG_READ_FUNC_ANIM_DELAY
@ MSG_READ_FUNC_ITEM_ICON
@ MSG_READ_FUNC_SET_REWIND
@ MSG_PRINT_FUNC_ANIM_DONE
@ MSG_READ_FUNC_SIZE_RESET
@ MSG_PRINT_FUNC_CENTER_X
@ MSG_PRINT_FUNC_SAVE_POS
@ MSG_READ_FUNC_ANIM_SPRITE
@ MSG_READ_FUNC_ANIM_DONE
@ SOUND_MENU_CHANGE_SELECTION
@ MSG_CHAR_READ_HALF_SPACE
@ MSG_CHAR_READ_FULL_SPACE
@ MSG_CHAR_READ_UNK_CHAR_FA
@ MSG_CHAR_PRINT_FULL_SPACE
@ MSG_CHAR_PRINT_VARIANT0
@ MSG_CHAR_PRINT_FUNCTION
@ MSG_CHAR_PRINT_UNK_CHAR_FA
@ MSG_CHAR_PRINT_HALF_SPACE
@ MSG_WINDOW_STATE_WAITING
@ MSG_WINDOW_STATE_WAITING_FOR_CHOICE
@ MSG_WINDOW_STATE_OPENING
@ MSG_WINDOW_STATE_SCROLLING
@ MSG_WINDOW_STATE_PRINTING
@ MSG_WINDOW_STATE_SCROLLING_BACK
@ MSG_WINDOW_STATE_CLOSING
@ MSG_WINDOW_STATE_VIEWING_PREV
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)
u32 dma_copy(Addr romStart, Addr romEnd, void *vramDest)
s32 general_heap_free(void *data)
char * int_to_string(s32, char *, s32)
void * heap_malloc(s32 size)
#define INCLUDE_ASM(TYPE, FOLDER, NAME, ARGS...)
s32 gItemIconPaletteOffsets[]
void msg_draw_rewind_arrow(s32)
void get_msg_properties(s32 msgID, s32 *height, s32 *width, s32 *maxLineChars, s32 *numLines, s32 *maxLinesPerPage, s32 *numSpaces, u16 charset)
IMG_BIN ui_msg_rewind_arrow_png[]
void msg_printer_set_origin_pos(MessagePrintState *msgPrintState, s32 x, s32 y)
MessagePrintState * _msg_get_printer_for_msg(s32 msgID, s32 *donePrintingWriteback, s32 arg2)
s32 cancel_message(MessagePrintState *msgPrintState)
s8 * load_message_to_buffer(s32 msgID)
IMG_BIN MsgCharImgSubtitle[]
void render_messages(void)
s32 draw_image_with_clipping(IMG_PTR raster, s32 width, s32 height, s32 fmt, s32 bitDepth, s16 posX, s16 posY, u16 clipULx, u16 clipULy, u16 clipLRx, u16 clipRLy)
IMG_BIN D_80159B50[0x200]
void clear_character_set(void)
s16 MsgStyleVerticalLineOffsets[]
PAL_PTR MsgLetterPaletteOffsets[]
s32 msg_get_print_char_width(s32 character, s32 charset, s32 variation, f32 msgScale, s32 overrideCharWidth, u8 flags)
PAL_BIN ui_msg_rewind_arrow_pal[]
void close_message(MessagePrintState *msgPrintState)
void appendGfx_message(MessagePrintState *, s16, s16, u16, u16, u16, u8)
void draw_digit(IMG_PTR img, s32 charset, s32 posX, s32 posY)
IMG_BIN MsgCharImgTitle[]
void clear_printers(void)
MessageImageData * MessageImageDataList[1]
s32 gItemIconRasterOffsets[]
#define CHOICE_POINTER_MOVE_RATE
u16 gMsgGlobalWaveCounter
Gfx gMsgDlistInitDrawNumber[]
void dma_load_msg(u32 msgID, void *dest)
s32 msg_get_draw_char_width(s32 character, s32 charset, s32 variation, f32 msgScale, s32 overrideCharWidth, u16 flags)
void msg_play_speech_sound(MessagePrintState *printer, u8 character)
void initialize_printer(MessagePrintState *printer, s32 arg1, s32 arg2)
void load_font_data(Addr offset, u16 size, void *dest)
IMG_BIN ui_msg_star_png[]
IMG_BIN MsgCharImgNormal[]
s32 get_msg_lines(s32 msgID)
MessageNumber gMsgNumbers[]
PAL_BIN D_802F4560[80][8]
void set_message_int_var(s32 value, s32 index)
void set_message_text_var(s32 msgID, s32 index)
IMG_BIN ui_msg_star_silhouette_png[]
void msg_update_rewind_arrow(s32)
MessagePrintState * msg_get_printer_for_msg(s32 msgID, s32 *donePrintingWriteback)
void draw_message_window(MessagePrintState *printer)
void msg_copy_to_print_buffer(MessagePrintState *printer, s32 arg1, s32 arg2)
void draw_number(s32 value, s32 x, s32 y, s32 charset, s32 palette, s32 opacity, u16 style)
void set_message_images(MessageImageData *images)
MessageImageDataList gMsgVarImages
IMG_BIN ui_point_right_png[]
s32 msg_printer_load_msg(s32 msgID, MessagePrintState *printer)
s32 _update_message(MessagePrintState *printer)
MessageCharset * MsgCharsets[5]
void msg_draw_choice_pointer(MessagePrintState *printer)
#define CHAR_SPACE_MULTIPLIER
IMG_PTR MsgLetterRasterOffsets[]
void update_messages(void)
PAL_BIN ui_point_right_pal[]
@ REWIND_ARROW_STATE_NEUTRAL
@ REWIND_ARROW_STATE_INIT
@ REWIND_ARROW_STATE_CHANGE_COLOR_BACK
@ REWIND_ARROW_STATE_GROW
@ REWIND_ARROW_STATE_CHANGE_COLOR
IMG_BIN MsgCharImgLatin[]
IMG_BIN MsgCharImgMenuKana[]
IMG_BIN MsgCharImgMenuLatin[]
void sfx_play_sound_with_params(s32 soundID, u8 volume, u8 pan, s16 pitchShift)
#define PM_CC_MSG_UP_ARROW
#define VIRTUAL_TO_PHYSICAL(addr)
u8 Addr[]
Linker symbol address, as in ld_addrs.h.
GameStatus * gGameStatusPtr
s32 gCurrentDisplayContextIndex
DisplayContext * gDisplayContext