mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2025-01-08 18:09: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:
parent
90929d80ea
commit
15319b9ed0
3 changed files with 7 additions and 4 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue