From 00a284c03fcdd84e408b50d3f616fe93509cd5b4 Mon Sep 17 00:00:00 2001 From: arthurtilly Date: Wed, 28 Sep 2022 13:53:57 +1300 Subject: [PATCH] score menu finished now i think --- bin/segment2.c | 2 +- levels/menu/leveldata.c | 22 ++-- levels/menu/main_menu_seg7_cedilla.ia8.png | Bin 0 -> 104 bytes levels/menu/main_menu_seg7_colon.ia8.png | Bin 0 -> 78 bytes src/menu/file_select.c | 111 +++++++++++---------- 5 files changed, 68 insertions(+), 67 deletions(-) create mode 100644 levels/menu/main_menu_seg7_cedilla.ia8.png create mode 100644 levels/menu/main_menu_seg7_colon.ia8.png diff --git a/bin/segment2.c b/bin/segment2.c index 4b4406355..24c3304be 100644 --- a/bin/segment2.c +++ b/bin/segment2.c @@ -1568,7 +1568,7 @@ const struct Utf8CharLUTEntry main_hud_utf8_2byte_lut[] = { {0x00CB, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_E}, // Ë {0x00CF, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_I}, // Ï {0x00D6, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_O}, // Ö - {0x00D7, 14, 0, texture_hud_char_multiply}, // × + {0x00D7, 15, 0, texture_hud_char_multiply}, // × {0x00DC, 12, TEXT_DIACRITIC_UMLAUT_UPPERCASE, texture_hud_char_U}, // Ü }; diff --git a/levels/menu/leveldata.c b/levels/menu/leveldata.c index c97a76b1c..2bc85ab9d 100644 --- a/levels/menu/leveldata.c +++ b/levels/menu/leveldata.c @@ -1520,22 +1520,15 @@ ALIGNED8 static const Texture texture_menu_font_char_ampersand[] = { }; #endif -#ifdef VERSION_EU -// 0x0700B840 -ALIGNED8 static const Texture texture_menu_font_char_umlaut[] = { -#include "levels/menu/main_menu_seg7_eu.0B840.ia8.inc.c" -}; - // 0x0700B880 -ALIGNED8 static const Texture texture_menu_font_char_cedilla_mayus[] = { -#include "levels/menu/main_menu_seg7_eu.0B880.ia8.inc.c" +ALIGNED8 static const Texture texture_menu_font_char_cedilla[] = { +#include "levels/menu/main_menu_seg7_cedilla.ia8.inc.c" }; // 0x0700B8C0 ALIGNED8 static const Texture texture_menu_font_char_colon[] = { -#include "levels/menu/main_menu_seg7_eu.0B8C0.ia8.inc.c" +#include "levels/menu/main_menu_seg7_colon.ia8.inc.c" }; -#endif const struct AsciiCharLUTEntry menu_font_lut[] = { {NULL, 4}, // 32 " " @@ -1564,7 +1557,7 @@ const struct AsciiCharLUTEntry menu_font_lut[] = { {texture_menu_font_char_7, 7}, // 55 "7" {texture_menu_font_char_8, 7}, // 56 "8" {texture_menu_font_char_9, 7}, // 57 "9" - {NULL, 0}, // 58 ":" (Unimplemented) + {texture_menu_font_char_colon, 4}, // 58 ":" {NULL, 0}, // 59 ";" (Unimplemented) {NULL, 0}, // 60 "<" (Unimplemented) {NULL, 0}, // 61 "=" (Unimplemented) @@ -1629,14 +1622,15 @@ const struct AsciiCharLUTEntry menu_font_lut[] = { {texture_menu_font_char_X, 7}, // 120 "x" {texture_menu_font_char_Y, 6}, // 121 "y" {texture_menu_font_char_Z, 6}, // 122 "z" - {NULL, 0}, // 123 "{" (Unimplemented) + {texture_menu_font_char_mface1, 8}, // 123 "{" (First half of Mario face) {NULL, 0}, // 124 "|" (Unimplemented) - {NULL, 0}, // 125 "}" (Unimplemented) + {texture_menu_font_char_mface2, 8}, // 125 "}" (Second half of Mario face) {NULL, 0}, // 126 "~" (Unimplemented) }; const struct Utf8CharLUTEntry menu_font_utf8_2byte_lut[] = { {0x00D7, 6, 0, texture_menu_font_char_multiply}, // × + {0x00E7, 5, 0, texture_menu_font_char_cedilla}, // ç }; const struct Utf8CharLUTEntry menu_font_utf8_3byte_lut[] = { @@ -1660,6 +1654,8 @@ const struct Utf8LUT menu_font_utf8_lut = { &menu_font_utf8_missing_char, }; +//texture_menu_font_char_umlaut + // Menu small font print table // 0x0700CD08 // const Texture *const menu_font_lut[] = { diff --git a/levels/menu/main_menu_seg7_cedilla.ia8.png b/levels/menu/main_menu_seg7_cedilla.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..282dddf42e17e12a50c0acdcd0a377f087c5d2b7 GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4i*LmhCH@11_lNOeNPw1kczluhQ|L62O1du z|9572s3gD`6T_x9gU3f!nVGreFVdQ&MBb@ E0FDnDWB>pF literal 0 HcmV?d00001 diff --git a/levels/menu/main_menu_seg7_colon.ia8.png b/levels/menu/main_menu_seg7_colon.ia8.png new file mode 100644 index 0000000000000000000000000000000000000000..4f8c448077165e6387d0344e41e51da359d980c1 GIT binary patch literal 78 zcmeAS@N?(olHy`uVBq!ia0y~yVBi2@4i*LmhCH@11_lNOQBN1gkcznE15E#z8J%Wy dHp)1xl4NK$V*fkw_?6Qj6`rnsF6*2UngBR+61@Nb literal 0 HcmV?d00001 diff --git a/src/menu/file_select.c b/src/menu/file_select.c index 5feb25663..74e479224 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -1198,6 +1198,15 @@ void print_menu_cursor(void) { } } +/** + * Takes a number 0-3 and a string containing %s, and formats the string to contain the corresponding file letter A-D + */ +void string_insert_file_letter(char *dst, char *src, u8 index) { + char *fileLetter = "A"; + fileLetter[0] = 'A' + index; + sprintf(dst, src, fileLetter); +} + /** * Prints a hud string depending of the hud table list defined with text fade properties. */ @@ -1409,9 +1418,9 @@ void score_menu_display_message(s8 messageID) { } } -#define LEFT_X 62 -#define MIDDLE_X 160 -#define RIGHT_X 258 +#define SUBMENU_LEFT_BUTTON_X 62 +#define SUBMENU_MIDDLE_BUTTON_X 160 +#define SUBMENU_RIGHT_BUTTON_X 258 #define FADEOUT_TIMER 20 @@ -1463,9 +1472,9 @@ void print_score_menu_strings(void) { // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string_centered(LEFT_X, 35, LANGUAGE_ARRAY(textReturn)); - print_generic_string_centered(MIDDLE_X, 35, LANGUAGE_ARRAY(textCopyFileButton)); - print_generic_string_centered(RIGHT_X, 35, LANGUAGE_ARRAY(textEraseFileButton)); + print_generic_string_centered(SUBMENU_LEFT_BUTTON_X, 35, LANGUAGE_ARRAY(textReturn)); + print_generic_string_centered(SUBMENU_MIDDLE_BUTTON_X, 35, LANGUAGE_ARRAY(textCopyFileButton)); + print_generic_string_centered(SUBMENU_RIGHT_BUTTON_X, 35, LANGUAGE_ARRAY(textEraseFileButton)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names @@ -1607,9 +1616,9 @@ void print_copy_menu_strings(void) { // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string_centered(LEFT_X, 35, LANGUAGE_ARRAY(textReturn)); - print_generic_string_centered(MIDDLE_X, 35, LANGUAGE_ARRAY(textViewScore)); - print_generic_string_centered(RIGHT_X, 35, LANGUAGE_ARRAY(textEraseFileButton)); + print_generic_string_centered(SUBMENU_LEFT_BUTTON_X, 35, LANGUAGE_ARRAY(textReturn)); + print_generic_string_centered(SUBMENU_MIDDLE_BUTTON_X, 35, LANGUAGE_ARRAY(textViewScore)); + print_generic_string_centered(SUBMENU_RIGHT_BUTTON_X, 35, LANGUAGE_ARRAY(textEraseFileButton)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); @@ -1724,7 +1733,6 @@ char *textMarioXJustErased = LANGUAGE_TEXT( */ void erase_menu_display_message(s8 messageID) { char str[50]; - char *fileLetter = "A"; switch (messageID) { case ERASE_MSG_MAIN_TEXT: print_hud_lut_string_fade_centered(SCREEN_WIDTH/2, 35, LANGUAGE_ARRAY(textEraseFile)); @@ -1737,8 +1745,7 @@ void erase_menu_display_message(s8 messageID) { print_generic_string_fade_centered(SCREEN_WIDTH/2, 190, LANGUAGE_ARRAY(textNoSavedDataExists)); break; case ERASE_MSG_MARIO_ERASED: - fileLetter[0] = 'A' + sSelectedFileIndex; - sprintf(str, LANGUAGE_ARRAY(textMarioXJustErased), fileLetter); + string_insert_file_letter(str, LANGUAGE_ARRAY(textMarioXJustErased), sSelectedFileIndex); print_generic_string_fade_centered(SCREEN_WIDTH/2, 190, str); break; case ERASE_MSG_SAVE_EXISTS: // unused @@ -1813,9 +1820,9 @@ void print_erase_menu_strings(void) { gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string_centered(LEFT_X, 35, LANGUAGE_ARRAY(textReturn)); - print_generic_string_centered(MIDDLE_X, 35, LANGUAGE_ARRAY(textViewScore)); - print_generic_string_centered(RIGHT_X, 35, LANGUAGE_ARRAY(textCopyFileButton)); + print_generic_string_centered(SUBMENU_LEFT_BUTTON_X, 35, LANGUAGE_ARRAY(textReturn)); + print_generic_string_centered(SUBMENU_MIDDLE_BUTTON_X, 35, LANGUAGE_ARRAY(textViewScore)); + print_generic_string_centered(SUBMENU_RIGHT_BUTTON_X, 35, LANGUAGE_ARRAY(textCopyFileButton)); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names @@ -1905,28 +1912,32 @@ void print_sound_mode_menu_strings(void) { void print_score_file_castle_secret_stars(s8 fileIndex, s16 x, s16 y) { char secretStarsText[20]; // Print number of castle secret stars - sprintf(secretStarsText, "★×%d", save_file_get_total_star_count(fileIndex, + sprintf(secretStarsText, "★× %d", save_file_get_total_star_count(fileIndex, COURSE_NUM_TO_INDEX(COURSE_BONUS_STAGES), COURSE_NUM_TO_INDEX(COURSE_MAX))); print_menu_generic_string(x, y, secretStarsText); } +char textMarioFace[] = LANGUAGE_TEXT( + "{}%s", + "{}%s", + "{}%s", + "マリオ%s"); + /** * Prints course coins collected in a score menu save file. */ void print_score_file_course_coin_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { - char coinScoreText[20]; + char str[20]; u8 stars = save_file_get_star_flags(fileIndex, courseIndex); - char fileNames[][10] = {"----", "☺A", "☺B", "☺C", "☺D"}; - // come back to when doing JP - //char fileNamesJP[][10] = {"----", "マリオA", "マリオB", "マリオC", "マリオD"}; + // MYSCORE if (sScoreFileCoinScoreMode == 0) { // Print "[coin] x" print_menu_generic_string(x + 25, y, "✪×"); // Print coin score - sprintf(coinScoreText, "%d", save_file_get_course_coin_score(fileIndex, courseIndex)); - print_menu_generic_string(x + 41, y, coinScoreText); + sprintf(str, "%d", save_file_get_course_coin_score(fileIndex, courseIndex)); + print_menu_generic_string(x + 41, y, str); // If collected, print 100 coin star if (stars & STAR_FLAG_ACT_100_COINS) { print_menu_generic_string(x + 70, y, "★"); @@ -1934,14 +1945,20 @@ void print_score_file_course_coin_score(s8 fileIndex, s16 courseIndex, s16 x, s1 } // HISCORE else { + u16 coinScoreFile; // Print "[coin] x" print_menu_generic_string(x + 18, y, "✪×"); // Print coin highscore - sprintf(coinScoreText, "%d", (u16) save_file_get_max_coin_score(courseIndex) & 0xFFFF); - print_menu_generic_string(x + 34, y, coinScoreText); + sprintf(str, "%d", (u16) save_file_get_max_coin_score(courseIndex) & 0xFFFF); + print_menu_generic_string(x + 34, y, str); // Print coin highscore file - print_menu_generic_string(x + 60, y, - fileNames[(save_file_get_max_coin_score(courseIndex) >> 16) & 0xFFFF]); + coinScoreFile = (save_file_get_max_coin_score(courseIndex) >> 16) & 0xFFFF; + if (coinScoreFile == 0) { + print_menu_generic_string(x + 60, y, "----"); + } else { + string_insert_file_letter(str, LANGUAGE_ARRAY(textMarioFace), coinScoreFile - 1); + print_menu_generic_string(x + 60, y, str); + } } } @@ -1969,20 +1986,11 @@ void print_score_file_star_score(s8 fileIndex, s16 courseIndex, s16 x, s16 y) { print_menu_generic_string(x, y, starScoreText); } -#define MARIO_X 25 -#define FILE_LETTER_X 95 -#define LEVEL_NUM_PAD 3 -#define SECRET_STARS_PAD 6 -#define LEVEL_NAME_X 23 -#define STAR_SCORE_X 171 -#define MYSCORE_X 238 -#define HISCORE_X 231 - -char *textMario = LANGUAGE_TEXT( - "MARIO", - "MARIO", - "MARIO", - "マリオ"); +char *textMarioX = LANGUAGE_TEXT( + "MARIO %s", + "MARIO %s", + "MARIO %s", + "マリオ%s"); char *textHiScore = LANGUAGE_TEXT( "HI SCORE", @@ -2001,16 +2009,14 @@ char *textMyScore = LANGUAGE_TEXT( */ void print_save_file_scores(s8 fileIndex) { u32 i; - char textFileLetter[2] = "A"; + char str[20]; void **levelNameTable = segmented_to_virtual(languageTable[gInGameLanguage][1]); - textFileLetter[0] = fileIndex + 'A'; // get letter of file selected - // Print file name at top gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_hud_lut_string(MARIO_X, 15, textMario); - print_hud_lut_string(FILE_LETTER_X, 15, textFileLetter); + string_insert_file_letter(str, LANGUAGE_ARRAY(textMarioX), fileIndex); + print_hud_lut_string(25, 15, str); // Print save file star count at top print_save_file_star_count(fileIndex, 124, 15); @@ -2020,22 +2026,21 @@ void print_save_file_scores(s8 fileIndex) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); for ((i = 0); (i < COURSE_STAGES_MAX); (i++)) { - print_menu_generic_string((LEVEL_NAME_X + ((i < 9) * LEVEL_NUM_PAD)), (23 + (12 * (i + 1))), segmented_to_virtual(levelNameTable[i])); - print_score_file_star_score( fileIndex, i, STAR_SCORE_X, (23 + (12 * (i + 1)))); - print_score_file_course_coin_score( fileIndex, i, 213, (23 + (12 * (i + 1)))); + print_menu_generic_string((23 + ((i < 9) * 3)), (23 + (12 * (i + 1))), segmented_to_virtual(levelNameTable[i])); + print_score_file_star_score( fileIndex, i, 171, (23 + (12 * (i + 1)))); + print_score_file_course_coin_score(fileIndex, i, 213, (23 + (12 * (i + 1)))); } // Print castle secret stars text - print_menu_generic_string(LEVEL_NAME_X + SECRET_STARS_PAD, 23 + 12 * 16, - segmented_to_virtual(levelNameTable[25])); + print_menu_generic_string(29, 215, segmented_to_virtual(levelNameTable[25])); // Print castle secret stars score - print_score_file_castle_secret_stars(fileIndex, STAR_SCORE_X, 23 + 12 * 16); + print_score_file_castle_secret_stars(fileIndex, 171, 215); // Print current coin score mode if (sScoreFileCoinScoreMode == 0) { - print_menu_generic_string(MYSCORE_X, 24, LANGUAGE_ARRAY(textMyScore)); + print_menu_generic_string(238, 24, LANGUAGE_ARRAY(textMyScore)); } else { - print_menu_generic_string(HISCORE_X, 24, LANGUAGE_ARRAY(textHiScore)); + print_menu_generic_string(231, 24, LANGUAGE_ARRAY(textHiScore)); } gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end);