diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index bbf07286..719bf87f 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -294,7 +294,10 @@ void print_hud_lut_string(s8 hudLUT, s16 x, s16 y, const u8 *str) { void print_menu_generic_string(s16 x, s16 y, const u8 *str) { - moon_draw_text(x, SCREEN_HEIGHT - y, str, 0.8f); + float scale = 0.8f; + // gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); + // moon_draw_text(x + 0.2 * scale, SCREEN_HEIGHT - y, str, scale); + moon_draw_scaled_text(x, SCREEN_HEIGHT - y, str, scale, scale - 0.1f); } void print_credits_string(s16 x, s16 y, const u8 *str) { diff --git a/src/game/save_file.c b/src/game/save_file.c index 2931a962..95618742 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -356,7 +356,8 @@ void save_file_erase(s32 fileIndex) { bzero(&gSaveBuffer.files[fileIndex][0], sizeof(gSaveBuffer.files[fileIndex][0])); gSaveFileModified = TRUE; - save_file_do_save(fileIndex); + eraseSaveFile(fileIndex); + } //! Needs to be s32 to match on -O2, despite no return value. diff --git a/src/menu/file_select.c b/src/menu/file_select.c index a7f67c07..6b3dd075 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -1584,9 +1584,15 @@ void score_menu_display_message(s8 messageID) { gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); break; case SCORE_MSG_NOSAVE_DATA: - print_generic_string_fade(NOSAVE_DATA_X1, 190, get_key_string("TEXT_NO_SAVED_DATA_EXISTS")); + gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + u8* txt = get_key_string("TEXT_NO_SAVED_DATA_EXISTS"); + float x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(SCREEN_WIDTH / 2 - x, 205, txt, 1.0); + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); break; } + } #define RETURN_X 44 @@ -1625,17 +1631,26 @@ void print_score_menu_strings(void) { // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string(RETURN_X, 35, get_key_string("TEXT_RETURN")); - print_generic_string(COPYFILE_X1, 35, get_key_string("TEXT_COPY_FILE_BUTTON")); - print_generic_string(ERASEFILE_X1, 35, get_key_string("TEXT_ERASE_FILE_BUTTON")); + + u8* txt = get_key_string("TEXT_RETURN"); + float x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(RETURN_X + 18.5f - x, 52, txt, 1.0); + + txt = get_key_string("TEXT_COPY_FILE_BUTTON"); + x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(COPYFILE_X1 + 26 - x, 52, txt, 1.0); + + txt = get_key_string("TEXT_ERASE_FILE_BUTTON"); + x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(ERASEFILE_X1 + 26 - x, 52, txt, 1.0); gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(89, 62, get_key_string("TEXT_FILE_MARIO_A")); - print_menu_generic_string(211, 62, get_key_string("TEXT_FILE_MARIO_B")); - print_menu_generic_string(89, 105, get_key_string("TEXT_FILE_MARIO_C")); + print_menu_generic_string(89, 62, get_key_string("TEXT_FILE_MARIO_A")); + print_menu_generic_string(211, 62, get_key_string("TEXT_FILE_MARIO_B")); + print_menu_generic_string(89, 105, get_key_string("TEXT_FILE_MARIO_C")); print_menu_generic_string(211, 105, get_key_string("TEXT_FILE_MARIO_D")); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); } @@ -1652,12 +1667,14 @@ void print_score_menu_strings(void) { */ void copy_menu_display_message(s8 messageID) { u8* txt; + char* key = NULL; float x; switch (messageID) { case COPY_MSG_MAIN_TEXT: if (sAllFilesExist == TRUE) { - print_generic_string_fade(NOFILE_COPY_X, 190, get_key_string("TEXT_NO_FILE_TO_COPY_FROM")); + key = "TEXT_NO_FILE_TO_COPY_FROM"; } else { + key = NULL; gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); txt = get_key_string("TEXT_COPY_FILE"); @@ -1667,18 +1684,28 @@ void copy_menu_display_message(s8 messageID) { } break; case COPY_MSG_COPY_WHERE: - print_generic_string_fade(COPYIT_WHERE_X, 190, get_key_string("TEXT_COPY_IT_TO_WHERE")); + key = "TEXT_COPY_IT_TO_WHERE"; break; case COPY_MSG_NOSAVE_EXISTS: - print_generic_string_fade(NOSAVE_DATA_X2, 190, get_key_string("TEXT_NO_SAVED_DATA_EXISTS")); + key = "TEXT_NO_SAVED_DATA_EXISTS"; break; case COPY_MSG_COPY_COMPLETE: - print_generic_string_fade(COPYCOMPLETE_X, 190, get_key_string("TEXT_COPYING_COMPLETED")); + key = "TEXT_COPYING_COMPLETED"; break; case COPY_MSG_SAVE_EXISTS: - print_generic_string_fade(SAVE_EXISTS_X1, 190, get_key_string("TEXT_SAVED_DATA_EXISTS")); + key = "TEXT_SAVED_DATA_EXISTS"; break; } + + if(key == NULL) return; + + gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + txt = get_key_string(key); + x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(SCREEN_WIDTH / 2 - x, 205, txt, 1.0); + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); + } /** @@ -1748,9 +1775,20 @@ void print_copy_menu_strings(void) { // Print menu names gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string(RETURN_X, 35, get_key_string("TEXT_RETURN")); - print_generic_string(VIEWSCORE_X1, 35, get_key_string("TEXT_CHECK_SCORE")); - print_generic_string(ERASEFILE_X2, 35, get_key_string("TEXT_ERASE_FILE_BUTTON")); + + u8* txt = get_key_string("TEXT_RETURN"); + float x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(RETURN_X + 18.5f - x, 52, txt, 1.0); + + txt = get_key_string("TEXT_CHECK_SCORE"); + x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(COPYFILE_X1 + 26 - x, 52, txt, 1.0); + + txt = get_key_string("TEXT_ERASE_FILE_BUTTON"); + x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(ERASEFILE_X1 + 28 - x, 52, txt, 1.0); + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); @@ -1847,11 +1885,12 @@ void print_erase_menu_prompt(s16 x, s16 y) { * Defines IDs for the top message of the erase menu and displays it if the ID is called in messageID. */ void erase_menu_display_message(s8 messageID) { - u8 textMarioAJustErased[] = { get_key_string("TEXT_FILE_MARIO_A_JUST_ERASED") }; + char* key = NULL; u8* txt; float x; switch (messageID) { case ERASE_MSG_MAIN_TEXT: + key = NULL; gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); txt = get_key_string("TEXT_ERASE_FILE"); @@ -1860,20 +1899,30 @@ void erase_menu_display_message(s8 messageID) { gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); break; case ERASE_MSG_PROMPT: + key = NULL; print_generic_string_fade(90, 190, get_key_string("TEXT_SURE")); print_erase_menu_prompt(90, 190); // YES NO, has functions for it too - break; + return; case ERASE_MSG_NOSAVE_EXISTS: - print_generic_string_fade(NOSAVE_DATA_X3, 190, get_key_string("TEXT_NO_SAVED_DATA_EXISTS")); + key = "TEXT_NO_SAVED_DATA_EXISTS"; break; case ERASE_MSG_MARIO_ERASED: - textMarioAJustErased[MARIO_ERASED_VAR] = sSelectedFileIndex + 10; - print_generic_string_fade(MARIO_ERASED_X, 190, textMarioAJustErased); + key = "TEXT_FILE_MARIO_A_JUST_ERASED"; break; case ERASE_MSG_SAVE_EXISTS: // unused - print_generic_string_fade(SAVE_EXISTS_X2, 190, get_key_string("TEXT_SAVED_DATA_EXISTS")); + key = "TEXT_SAVED_DATA_EXISTS"; break; } + + if(key == NULL) return; + + gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + txt = get_key_string(key); + x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(SCREEN_WIDTH / 2 - x, 205, txt, 1.0); + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); + } /** @@ -1944,9 +1993,18 @@ void print_erase_menu_strings(void) { gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_generic_string(RETURN_X, 35, get_key_string("TEXT_RETURN")); - print_generic_string(VIEWSCORE_X2, 35, get_key_string("TEXT_CHECK_SCORE")); - print_generic_string(COPYFILE_X2, 35, get_key_string("TEXT_COPY_FILE_BUTTON")); + u8* txt = get_key_string("TEXT_RETURN"); + float x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(RETURN_X + 18.5f - x, 52, txt, 1.0); + + txt = get_key_string("TEXT_CHECK_SCORE"); + x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(COPYFILE_X1 + 26 - x, 52, txt, 1.0); + + txt = get_key_string("TEXT_COPY_FILE_BUTTON"); + x = moon_get_text_width(txt, 1.0, FALSE) / 2; + moon_draw_text(ERASEFILE_X1 + 28 - x, 52, txt, 1.0); + gSPDisplayList(gDisplayListHead++, dl_ia_text_end); // Print file names diff --git a/src/moon/achievements/achievements.cpp b/src/moon/achievements/achievements.cpp index b7c98dfd..9876f461 100644 --- a/src/moon/achievements/achievements.cpp +++ b/src/moon/achievements/achievements.cpp @@ -130,7 +130,8 @@ namespace MoonInternal{ #endif if(shouldUpdate){ int expectedY = aEntry->height + 45; - if (aEntry->launchTime == 0) + + if (aEntry->launchTime == 1) play_sound(soundID, gGlobalSoundSource); aEntry->dead = aEntry->launchTime >= aEntry->achievement->duration + 35 && floor(aEntry->width) <= 0; @@ -139,7 +140,7 @@ namespace MoonInternal{ aEntry->y = MathUtil::Lerp(aEntry->y, !shouldClose ? expectedY : 0, !shouldClose ? 0.17f : 0.28f); if(ceil(aEntry->y) >= ceil(expectedY) || shouldClose) - aEntry->width = MathUtil::Lerp(aEntry->width, !shouldClose ? achievementWidth : 0, !shouldClose ? 0.2f : 0.39f); + aEntry->width = MathUtil::Lerp(aEntry->width, !shouldClose ? achievementWidth : 0, !shouldClose ? 0.2f : 0.45f); aEntry->launchTime++; } diff --git a/src/moon/config/saves/saves.cpp b/src/moon/config/saves/saves.cpp index 59c9d4cf..63b72102 100644 --- a/src/moon/config/saves/saves.cpp +++ b/src/moon/config/saves/saves.cpp @@ -204,6 +204,17 @@ namespace MoonInternal { memcpy(&gSaveBuffer.files[fileIndex][1], &gSaveBuffer.files[fileIndex][0], sizeof(gSaveBuffer.files[fileIndex][1])); } + void eraseSaveFile( int fileIndex ){ + #ifndef TARGET_SWITCH + string cwd = MoonInternal::getEnvironmentVar("MOON_UPATH"); + string path = cwd.substr(0, cwd.find_last_of("/\\")) + "/moon64/Moon64-Save-"+to_string(fileIndex + 1)+".dat"; + #else + string path = "sdmc:/moon64/Moon64-Save-"+to_string(fileIndex + 1)+".dat"; + #endif + if(fs::exists(path)) + fs::remove(path); + } + void setupSaveEngine(string state){ if(state == "PreInit"){ // Scan old save format @@ -251,4 +262,7 @@ extern "C"{ void readSaveFile(int saveIndex){ MoonInternal::readSaveFile(saveIndex); } + void eraseSaveFile(int fileIndex){ + MoonInternal::eraseSaveFile(fileIndex); + } } diff --git a/src/moon/config/saves/saves.h b/src/moon/config/saves/saves.h index 85591608..85b83c8b 100644 --- a/src/moon/config/saves/saves.h +++ b/src/moon/config/saves/saves.h @@ -10,5 +10,6 @@ namespace MoonInternal { #else void writeSaveFile(int saveIndex); void readSaveFile(int saveIndex); +void eraseSaveFile(int fileIndex); #endif #endif \ No newline at end of file diff --git a/src/moon/utils/moon-gfx.c b/src/moon/utils/moon-gfx.c index 559582ef..bebbe088 100644 --- a/src/moon/utils/moon-gfx.c +++ b/src/moon/utils/moon-gfx.c @@ -48,15 +48,15 @@ void moon_draw_colored_text(f32 x, f32 y, const u8 *str, float scale, struct Col } } -void moon_draw_text(f32 x, f32 y, const u8 *str, float scale) { +void moon_draw_scaled_text(f32 x, f32 y, const u8 *str, float scaleX, float scaleY) { UNUSED s8 mark = DIALOG_MARK_NONE; s32 strPos = 0; u8 lineNum = 1; - y -= 16 * scale; + y -= 16 * scaleY; Mtx *_Matrix = (Mtx *) alloc_display_list(sizeof(Mtx)); if (!_Matrix) return; - guScale(_Matrix, scale, scale, 1.f); + guScale(_Matrix, scaleX, scaleY, 1.f); create_dl_translation_matrix(MENU_MTX_PUSH, x, y, 0.0f); gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(_Matrix), G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH); @@ -94,7 +94,7 @@ void moon_draw_text(f32 x, f32 y, const u8 *str, float scale) { render_generic_char(str[strPos]); if (mark != DIALOG_MARK_NONE) { //create_dl_translation_matrix(MENU_MTX_PUSH, 5.0f, 5.0f, 0.0f); - guScale(gDisplayListHead++, scale, scale, scale); + guScale(gDisplayListHead++, scaleX, scaleY, 1.f); render_generic_char(mark + 0xEF); gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); mark = DIALOG_MARK_NONE; @@ -109,6 +109,10 @@ void moon_draw_text(f32 x, f32 y, const u8 *str, float scale) { gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW); } +void moon_draw_text(f32 x, f32 y, const u8 *str, float scale) { + moon_draw_scaled_text(x, y, str, scale, scale); +} + Vtx *make_rect_verts(float w, float h) { Vtx *verts = alloc_display_list(4 * sizeof(*verts)); diff --git a/src/moon/utils/moon-gfx.h b/src/moon/utils/moon-gfx.h index 3451fad4..fe9d6e7f 100644 --- a/src/moon/utils/moon-gfx.h +++ b/src/moon/utils/moon-gfx.h @@ -12,6 +12,7 @@ struct Color { long long moon_get_milliseconds(); f32 moon_get_text_width(u8* text, float scale, u8 colored); void moon_draw_colored_text(f32 x, f32 y, const u8 *str, float scale, struct Color c); +void moon_draw_scaled_text(f32 x, f32 y, const u8 *str, float scaleX, float scaleY); void moon_draw_text(f32 x, f32 y, const u8 *str, float scale); void moon_draw_rectangle(f32 x, f32 y, f32 w, f32 h, struct Color c, u8 u4_3); void moon_draw_texture(s32 x, s32 y, u32 w, u32 h, char *texture);