1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2025-01-09 10:29:45 +01:00

Fix being able to circumvent not-in-Flip-Mode detection

So you get a trophy and achievement for completing the game in Flip
Mode. Which begs the question, how does the game know that you've played
through the game in Flip Mode the entire way, and haven't switched it
off at any point? It looks like if you play normally all the way up
until the checkpoint in V, and then turn on Flip Mode, the game won't
give you the trophy. What gives?

Well, actually, what happens is that every time you press Enter on a
teleporter, the game will set flag 73 to true if you're NOT in Flip
Mode. Then when Game Complete runs, the game will check if flag 73 is
off, and then give you the achievement and trophy accordingly.

However, what this means is that you could just save your game before
pressing Enter on a teleporter, then quit and go into options, turn on
Flip Mode, use the teleporter, then save your game (it's automatically
saved since you just used a teleporter), quit and go into options, and
turn it off. Then you'd get the Flip Mode trophy even though you haven't
actually played the entire game in Flip Mode.

Furthermore, in 2.3 you can bring up the pause menu to toggle Flip Mode,
so you don't even have to quit to circumvent this detection.

To fix both of these exploits, I moved the turning on of flag 73 to
starting a new game, loading a quicksave, and loading a telesave (cases
0, 1, and 2 respectively in scriptclass::startgamemode()). I also added
a Flip Mode check to the routine that runs whenever you exit an options
menu back to the pause menu, so you can't circumvent the detection that
way, either.
This commit is contained in:
Misa 2020-07-10 16:30:28 -07:00 committed by Ethan Lee
parent 90929d80ea
commit 15319b9ed0
3 changed files with 7 additions and 4 deletions

View file

@ -7313,5 +7313,9 @@ void Game::returntopausemenu()
graphics.backgrounddrawn = false;
game.mapheld = true;
graphics.flipmode = graphics.setflipmode;
if (!map.custommode && !graphics.flipmode)
{
obj.flags[73] = true;
}
game.shouldreturntopausemenu = true;
}

View file

@ -1741,10 +1741,6 @@ void gameinput()
if (game.activetele && game.readytotele > 20 && !game.intimetrial)
{
if(!graphics.flipmode)
{
obj.flags[73] = true; //Flip mode test
}
if(int(std::abs(obj.entities[ie].vx))<=1 && int(obj.entities[ie].vy)==0)
{
//wait! space station 2 debug thingy

View file

@ -2633,6 +2633,7 @@ void scriptclass::startgamemode( int t )
//set flipmode
if (graphics.setflipmode) graphics.flipmode = true;
else obj.flags[73] = true;
if(obj.entities.empty())
{
@ -2657,6 +2658,7 @@ void scriptclass::startgamemode( int t )
//set flipmode
if (graphics.setflipmode) graphics.flipmode = true;
else obj.flags[73] = true;
if(obj.entities.empty())
{
@ -2680,6 +2682,7 @@ void scriptclass::startgamemode( int t )
//set flipmode
if (graphics.setflipmode) graphics.flipmode = true;
else obj.flags[73] = true;
if(obj.entities.empty())
{