Alt+Enter Glitch
This glitch was fixed in version 2.3 of the game. You can re-enable it with Glitchrunners Mode. |
The Alt+Enter Glitch is a glitch where using the "fullscreen toggle" keybind would flip the player or interrupt a walk()
command during a cutscene. While the glitch is named "Alt+Enter", any key combination that toggles fullscreen, including Alt+F and F11 (in 2.3) will produce the same effect.
More specifically, triggering this glitch will result in the game pressing ACTION for the player, which will be held down until the next delay in the cutscene. Therefore, if they were standing on a surface, or were 3 frames from landing on a surface (Flip Buffering) when the ACTION press occurred, they will be flipped. The walk()
command presses left or right for the player and creates its own delay, so if this glitch is triggered during a walk()
, the left and right inputs will both be released.
Conditions
In order for the glitch to take effect, (1) the key combination or keypress must occur during a delay in a script that is more than 1 frame, and (2) the player must have control during the cutscene (game.hascontrol
must be set to true).
If the keybind is pressed while not in a cutscene, it will not flip the player, but it will stop the player from moving left or right if those keys were held down while the toggle keybind was pressed.
Condition 1 rules out any delay of a cutscene that arises due to using untilbars()
or untilfade()
during a cutscene bar or fade animation. This is because those commands actually delay for 1 frame every frame if the animation isn't complete, and thus, instead of being a 15-frame delay, it consists of fifteen 1-frame delays.
Condition 2 rules out being able to do this glitch during "- Press ACTION to advance text -" prompts in a cutscene, because usually when those prompts are activated, the player's control is taken away as well. However, it is possible to obtain the prompt while still having control (Noflip). In case you do so, the player would be unable to flip, but their walk()
could still be interrupted.
Code analysis
From the initial commit of the VVVVVV repository, main.cpp
line 276:
276 if(key.toggleFullscreen)
277 {
278 if(!gameScreen.isWindowed)
279 {
280 //SDL_WM_GrabInput(SDL_GRAB_ON);
281 SDL_ShowCursor(SDL_DISABLE);
282 SDL_ShowCursor(SDL_ENABLE);
283 }
284 else
285 {
286 SDL_ShowCursor(SDL_ENABLE);
287 }
288
289
290 if(game.gamestate == EDITORMODE)
291 {
292 SDL_ShowCursor(SDL_ENABLE);
293 }
294
295 gameScreen.toggleFullScreen();
296 game.fullscreen = !game.fullscreen;
297 key.toggleFullscreen = false;
298
299 key.keymap.clear(); //we lost the input due to a new window.
300 game.press_left = false;
301 game.press_right = false;
302 game.press_action = true;
303 game.press_map = false;
304 printf("Error: failed: %s\n", SDL_GetError());
305
306
307
308
309 }
These four lines cause the glitch:
300 game.press_left = false;
301 game.press_right = false;
302 game.press_action = true;
303 game.press_map = false;
game.press_left
and game.press_right
are used whenever the player moves left or right, and they are used automatically make the player walk left or right during cutscenes. Thus, setting them to false will interrupt the walk. Setting game.press_action
to true will make the player flip during a cutscene when they're not supposed to be able to.
It seems that the original developer thought inputs from the old window would "stick" and be held down if fullscreen was toggled, as indicated by the comment. However, it is sufficient to clear the keymap, and wholly unnecessary to mess with other input variables when toggling fullscreen.
Additionally, "Error: failed:
" will always appear in the console, despite there not being an error with the fullscreen toggle. This unnecessary print has been removed in 2.3.