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},