diff --git a/desktop_version/lang/ca/strings.xml b/desktop_version/lang/ca/strings.xml index 441dfbd9..faf1aeea 100644 --- a/desktop_version/lang/ca/strings.xml +++ b/desktop_version/lang/ca/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/de/strings.xml b/desktop_version/lang/de/strings.xml index 06ae62aa..01f806d6 100644 --- a/desktop_version/lang/de/strings.xml +++ b/desktop_version/lang/de/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/en/strings.xml b/desktop_version/lang/en/strings.xml index 1be77f6c..c6218dfc 100644 --- a/desktop_version/lang/en/strings.xml +++ b/desktop_version/lang/en/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/eo/strings.xml b/desktop_version/lang/eo/strings.xml index 352e30f9..50f4261e 100644 --- a/desktop_version/lang/eo/strings.xml +++ b/desktop_version/lang/eo/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/es/strings.xml b/desktop_version/lang/es/strings.xml index 00f6168a..214f461b 100644 --- a/desktop_version/lang/es/strings.xml +++ b/desktop_version/lang/es/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/fr/strings.xml b/desktop_version/lang/fr/strings.xml index 96f4d6f0..b707ca16 100644 --- a/desktop_version/lang/fr/strings.xml +++ b/desktop_version/lang/fr/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/it/strings.xml b/desktop_version/lang/it/strings.xml index eb768a10..7338bc97 100644 --- a/desktop_version/lang/it/strings.xml +++ b/desktop_version/lang/it/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/nl/strings.xml b/desktop_version/lang/nl/strings.xml index 18bfbcc2..c4f593a2 100644 --- a/desktop_version/lang/nl/strings.xml +++ b/desktop_version/lang/nl/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/pt_BR/strings.xml b/desktop_version/lang/pt_BR/strings.xml index 393ce8fe..b8833a1a 100644 --- a/desktop_version/lang/pt_BR/strings.xml +++ b/desktop_version/lang/pt_BR/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/pt_PT/strings.xml b/desktop_version/lang/pt_PT/strings.xml index eb570743..984b5ebb 100644 --- a/desktop_version/lang/pt_PT/strings.xml +++ b/desktop_version/lang/pt_PT/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/ru/strings.xml b/desktop_version/lang/ru/strings.xml index cdb79350..0f8767f2 100644 --- a/desktop_version/lang/ru/strings.xml +++ b/desktop_version/lang/ru/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/lang/tr/strings.xml b/desktop_version/lang/tr/strings.xml index c0ba1de6..40b93eda 100644 --- a/desktop_version/lang/tr/strings.xml +++ b/desktop_version/lang/tr/strings.xml @@ -498,6 +498,7 @@ + diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index afb1fb41..81c2584e 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -384,6 +384,9 @@ void Game::init(void) disabletemporaryaudiopause = true; inputdelay = false; + old_skip_message_timer = 0; + skip_message_timer = 0; + setdefaultcontrollerbuttons(); } diff --git a/desktop_version/src/Game.h b/desktop_version/src/Game.h index 12c3b895..774dd76d 100644 --- a/desktop_version/src/Game.h +++ b/desktop_version/src/Game.h @@ -531,6 +531,9 @@ public: bool inputdelay; bool statelocked; + + int old_skip_message_timer; + int skip_message_timer; }; #ifndef GAME_DEFINITION diff --git a/desktop_version/src/Logic.cpp b/desktop_version/src/Logic.cpp index 4286c0d2..6ccb1991 100644 --- a/desktop_version/src/Logic.cpp +++ b/desktop_version/src/Logic.cpp @@ -78,6 +78,8 @@ void gamecompletelogic(void) //Return to game game.gamestate = GAMECOMPLETE2; graphics.fademode = FADE_START_FADEIN; + game.skip_message_timer = 1000; + game.old_skip_message_timer = 1000; } } diff --git a/desktop_version/src/Render.cpp b/desktop_version/src/Render.cpp index 8f6e416d..f2308e6d 100644 --- a/desktop_version/src/Render.cpp +++ b/desktop_version/src/Render.cpp @@ -157,6 +157,45 @@ static void inline drawglitchrunnertext(const int y) font::print_wrap(PR_CEN, -1, y, buffer, tempr, tempg, tempb); } +static inline void draw_skip_message() +{ + /* Unlock 18 is Flip Mode. + * If this is the first playthrough, 5 (game completed) will be unlocked + * but not Flip Mode until the player hits "play" on the title screen */ + bool draw = +#ifndef MAKEANDPLAY + game.unlock[18] && +#endif + graphics.fademode == FADE_NONE; + if (!draw) + { + return; + } + + const int alpha = graphics.lerp( + game.old_skip_message_timer, game.skip_message_timer + ); + + draw = alpha > 100; + if (!draw) + { + return; + } + + char buffer[SCREEN_WIDTH_CHARS + 1]; + vformat_buf( + buffer, sizeof(buffer), + loc::gettext("- Press {button} to skip -"), + "button:but", + vformat_button(ActionSet_InGame, Action_InGame_Map) + ); + font::print( + PR_BRIGHTNESS(alpha) | PR_BOR | PR_CEN, + -1, graphics.flipmode ? 20 : 210, buffer, + 220 - help.glow, 220 - help.glow, 255 - help.glow / 2 + ); +} + static void menurender(void) { @@ -1875,6 +1914,8 @@ void gamecompleterender(void) font::print(PR_2X | PR_CEN | PR_CJK_LOW, -1, creditOffset + position, loc::gettext("playing!"), tr, tg, tb); } + draw_skip_message(); + graphics.drawfade(); graphics.render(); @@ -1907,6 +1948,8 @@ void gamecompleterender2(void) graphics.fill_rect(graphics.lerp(game.oldcreditposx * 8, game.creditposx * 8) + 8, game.creditposy * 8, 8, 8, 0, 0, 0); + draw_skip_message(); + graphics.drawfade(); graphics.render(); diff --git a/desktop_version/src/RenderFixed.cpp b/desktop_version/src/RenderFixed.cpp index 9fb7c090..03b995fa 100644 --- a/desktop_version/src/RenderFixed.cpp +++ b/desktop_version/src/RenderFixed.cpp @@ -21,6 +21,21 @@ static inline void titleupdatetextcol(void) if(graphics.col_tb>255) graphics.col_tb=255; } +static inline void tick_skip_message_timer(void) +{ + const bool tick = graphics.fademode == FADE_NONE; + if (!tick) + { + return; + } + + game.old_skip_message_timer = game.skip_message_timer; + if (game.skip_message_timer > 0) + { + game.skip_message_timer -= 15; + } +} + void gamerenderfixed(void) { if (!game.blackout && !game.completestop) @@ -257,4 +272,11 @@ void gamecompleterenderfixed(void) graphics.updatetitlecolours(); titleupdatetextcol(); + + tick_skip_message_timer(); +} + +void gamecompleterenderfixed2(void) +{ + tick_skip_message_timer(); } diff --git a/desktop_version/src/RenderFixed.h b/desktop_version/src/RenderFixed.h index 4953d91b..2e8c3f5e 100644 --- a/desktop_version/src/RenderFixed.h +++ b/desktop_version/src/RenderFixed.h @@ -11,4 +11,6 @@ void teleporterrenderfixed(void); void gamecompleterenderfixed(void); +void gamecompleterenderfixed2(void); + #endif /* RENDERFIXED_H */ diff --git a/desktop_version/src/Script.cpp b/desktop_version/src/Script.cpp index 5192bf14..d179ff36 100644 --- a/desktop_version/src/Script.cpp +++ b/desktop_version/src/Script.cpp @@ -1424,6 +1424,8 @@ void scriptclass::run(void) game.gamestate = GAMECOMPLETE; graphics.fademode = FADE_START_FADEIN; game.creditposition = 0; + game.skip_message_timer = 1000; + game.old_skip_message_timer = 1000; } } else if (words[0] == "finalmode") diff --git a/desktop_version/src/main.cpp b/desktop_version/src/main.cpp index 017beb37..37180c22 100644 --- a/desktop_version/src/main.cpp +++ b/desktop_version/src/main.cpp @@ -175,6 +175,7 @@ static const inline struct ImplFunc* get_gamestate_funcs( FUNC_LIST_END FUNC_LIST_BEGIN(GAMECOMPLETE2) + {Func_fixed, gamecompleterenderfixed2}, {Func_delta, gamecompleterender2}, {Func_input, gamecompleteinput2}, {Func_fixed, gamecompletelogic2},