VVVVVV is a game where absolutely nothing bad happens. One day, Viridian decides to take a leisurely stroll around the ship but accidentally trips on a terminal and blacks out. Fortunately, all of the crew members were already nearby so Viridian is quickly rescued and fully recovers.
Emulator used: libTAS v1.4.2        Game Version: VVVVVV 2.3.6

Game Objectives

  • The goal is to complete the game and reach the credits as quickly as possible
  • Abuses death in order to save time.

Comments

This TAS improves the current record of 00:45.33 by about 12 seconds. [2611] Windows VVVVVV "game end glitch" by Masterjun in 00:45.33
This TAS is played on version 2.3.6 of the game whereas the original was played on version 2.0. About 4 seconds is saved due to running in v2.3 by allowing you to skip the fake loading screen (Slightly less due to navigating the menus to enable glitchrunner). All of the rest of the time saved comes from better routing and not having to re-enter the game again in order to perform credits warp.

Taking advantage of saving and quitting

This trick has no name as far as I'm aware, but by quicksaving and re-entering the game, you can skip any cutscene you want, including the introduction cutscene or even intermissions such as the Gravitron. This works on all versions of the game including v2.3. This has been rightfully banned in most categories due to it being mostly uninteresting and potentially extremely game-breaking. As such, it is only allowed in the v2.0 credits warp branch where there are almost no restrictions. In this TAS, we take advantage of this bug to skip the introductory cutscene and gain access to the ship much faster than normal.

What is Glitchrunner 2.0?

Glitchrunner 2.0 is a setting that can be enabled by going into OPTIONS > GAMEPLAY > SPEEDRUN OPTIONS > GLITCHRUNNER MODE > 2.0 This setting is designed to re-enable the bugs and glitches found in v2.0 of the game. Nothing shown in this TAS is exclusive to 2.3 (except skipping the fake loading screen).
Interestingly, glitchrunner 2.0 will also re-introduce a bug that prevents you from being able to save or quit the game during a fade-in. To prevent losing time, we only enable glitchrunner 2.0 from the in-game settings once we need it.
Some of these bugs and glitches include...

Glitchy Fade Out

When exiting the game in older versions of VVVVVV, the game doesn't do a very good job of resetting the game. Strangely, the game won't let you actually quit until Viridian is alive. Additionally, if the game is in an unintended state, most of the time the game just won't correct it lol. This also makes it surprisingly easy to achieve an incredibly broken glitched state known as...

Text Storage

Text Storage is the bread and butter of this run and revolves around one simple concept. All this involves is keeping the - Press ACTION to advance text - dialogue on the screen while no other textbox is active. This doesn't seem that broken in concept, but allows you to interact with the game's code on a level that completely breaks the game apart. To talk about how and why this works, we need to talk about...

Terry's Gamestate World of Fun(TM)

Introducing: The gamestate variable
The simplest way to explain the gamestate variable is how it acts similar to a pointer. The gamestate is responsible for running the game properly by pointing at the piece of code that the game should be running at any given moment. The majority of the time this variable is set to 0 which handles normal gameplay but by setting the gamestate to specific values you can trigger the code that it points to and run it. The game does this all the time for events such as cutscenes, special events like the Gravitron, or even the movement of Viridian after exiting a teleporter. Although you aren't changing the code itself, manipulating the gamestate allows you to reach gamestates you aren't intended to reach until much later in the game. As you might have been able to guess, Text storage allows us to manipulate this gamestate variable by incrementing the value by 1 every time we press ACTION.
Side note: In the patched version of credits warp, you can only increment the gamestate once every single time updatestate() is called. This means that you can only increment the gamestate once until the game changes to another gamestate. However, v2.0 can increment the gamestate freely which allows you to perform credits warp much faster.
By incrementing the gamestate at the end of a teleporter's animation, you trick the gamestate variable into thinking that you're actually at the beginning of the next teleporter animation! As long as you keep incrementing the gamestate, this will continue until you eventually go through all the teleporter animations. Once you've done that, you can then increment the gamestate again to start the cutscene to Final Level and then once more to start the final cutscene of Viridian being saved.

Routing

With all that explained, the fastest route boils down to this:
1. Find a pair of teleporters (You must have 2 visible on your map in order to teleport)
2. Get Text Storage as quickly as possible
3. Use the teleporter and increment the gamestate until you reach the credits.

Recap

I start off by immediately saving and exiting the game, skipping the intro cutscene. I then touch the SS1 teleporter in order to set the teleporter as my respawn location and unlock it on the map. From there, I walk out of the ship until I reach the 2nd teleporter just off to the right. I interact with the terminal and immediately press R to start the respawn timer. Once the textbox from the terminal is on-screen, I go into the options menu and enable glitchrunner v2.0. I then quit out of the game so the textbox disappears but the game hasn't actually fully quit because I'm still waiting to respawn. Once I do respawn, I immediately touch the teleporter and my gamestate gets set to 2000. This gamestate is responsible for saving the game which ends up canceling the fadeout animation and resuming "normal" gameplay. I use the teleporter and come out the other side to set my gamestate to 4050. From there, I use text storage to increment my gamestate until I reach 4089 and trigger the ending cutscene.

Special Thanks!

I originally discovered this route but OlivierMoreau03 has been a huge help in improving the route and teaching me what I know about Credits warp.
Shoutouts also go out to Info Teddy for developing 2.3 and being an amazing figure and TASer in the VVVVVV community.

EDIT:

Input file was updated to 60 FPS and improved to a final time of 33.27s - https://tasvideos.org/UserFiles/Info/637805978671157147
Almost all of the time save was due to better menuing... 🙃

slamo: Claiming for judging.
slamo: Updated movie file with a 60 FPS version with some menuing improvements.
slamo: Great movie and well optimized, as usual.
It's difficult to compare the gameplay between this and the previous 2.0 game end glitch movie. Here is my understanding: 2.3 introduced a new mechanic where you can open the menu during cutscenes, which allows you to save + quit to skip the entire opening cutscene. This keeps you from using text storage + game state manipulation to warp to the starting point of the Space Station 2 time trial, but it is overall faster to skip the opening cutscene and just start from inside the ship. I would consider this a non-trivial gameplay improvement due to the different routing it requires, and this combined with reaching the ending dialogue faster after the last save + quit (an improvement also applicable to the real 2.0) overall constitutes a valid gameplay improvement. Glitchrunner mode is also an interesting twist, as it lets you pick and choose which bugs you want to be active, and this run would not have been possible on 2.3 without it.
This movie has the same goal (fastest completion) as the 2.0 game end glitch run and is too similar, so it will have to obsolete it. The problem is that we already have a "game end glitch" branch for 2.3 (with the constraint that they don't use Glitchrunner mode), so this is going to have to look at least a little weird. Calling the branch "Glitchrunner Mode" seems like a decent enough option that explains the difference between this and other branches, and would be at least some attempt to future-proof the branch if multiple Glitchrunner versions are used in the same run. If another version is released and a faster run is made, we can probably switch back to "game end glitch" under that version.
Accepting as an improvement to the previous movie under the Fastest Completion goal.
fsvgm777: Processing.

TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14881
Location: 127.0.0.1
This topic is for the purpose of discussing #7329: Elomavi's Linux VVVVVV "Glitchrunner Mode" in 00:33.27
MESHUGGAH
Other
Skilled player (1889)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
This submission says 29,41176470588235 framerate while the previous movie used 60. Why? Short and fast TAS, easy yes vote :)
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Spikestuff
They/Them
Editor, Publisher, Expert player (2297)
Joined: 10/12/2011
Posts: 6337
Location: The land down under.
MESHUGGAH wrote:
This submission says 29,41176470588235 framerate while the previous movie used 60. Why?
Probably safe to assume "Cause Hourglass shenanigans". Also previous movie is this one just as a note to the author: [2611] Windows VVVVVV "game end glitch" by Masterjun in 00:45.33
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
MESHUGGAH
Other
Skilled player (1889)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Oh, thanks Spikestuff! I've didn't saw previous movie was Hourglass while this is a libTAS movie. One last question regarding Wiki: PlatformFramerates : that page lists multiple Linux framerates like 29,411764705882355 twice and 29,41176470588235 (1 digit less). Is this a byproduct of using libTAS or is it a potential bug on this site when someone catalogs it...? I would assume that only a selection of framerates to be available for a platform like 50 (PAL) and 60 (NTSC) and some console-verified values, but not precision (number of digits) different values.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Judge, Moderator, Player (195)
Joined: 7/15/2021
Posts: 110
Location: United States
Spikestuff wrote:
MESHUGGAH wrote:
This submission says 29,41176470588235 framerate while the previous movie used 60. Why?
Probably safe to assume "Cause Hourglass shenanigans".
Yes, the game has always ran at 1000/34 FPS (check the source for yourself, it does SDL_Delay(34);), but I'm told that Hourglass needed to run it at 60 for audio dumping reasons (which weren't fully resolved; [2611] Windows VVVVVV "game end glitch" by Masterjun in 00:45.33 still has crap audio in places!). Also note that [4588] Linux VVVVVV "game end glitch" by InfoTeddy in 02:55.81 does 1000/34 as well (well, 1000/17 for ~60 FPS).
Elomavi
He/Him
Active player (443)
Joined: 2/16/2020
Posts: 10
Location: Arizona
Spikestuff wrote:
Also previous movie is this one just as a note to the author: [2611] Windows VVVVVV "game end glitch" by Masterjun in 00:45.33
Okay, I'll update the submission to include that change!
Info Teddy wrote:
Also note that [4588] Linux VVVVVV "game end glitch" by InfoTeddy in 02:55.81 does 1000/34 as well (well, 1000/17 for ~60 FPS).
I'm not entirely sure how to render the encode at 1000/17 FPS without going into the input file manually and doubling every input. Since the input file is incredibly short I'll just change it manually for this one but it would be incredibly helpful if there was an easier way to do this. Also because I'm apparently bad at optimizing, I was able to save 5 frames from better menuing of all things. I'll upload a new video and the faster movie file at 60 FPS as an update to this post once I finish creating it. :)
Judge, Moderator, Player (195)
Joined: 7/15/2021
Posts: 110
Location: United States
Elomavi wrote:
I'm not entirely sure how to render the encode at 1000/17 FPS without going into the input file manually and doubling every input. Since the input file is incredibly short I'll just change it manually for this one but it would be incredibly helpful if there was an easier way to do this.
I don't do it manually. I use neovim, but any decent text editor will do. I record a macro (by typing q followed by a character, which I just usually type q again) that goes like o|K|<ESC>j, which just starts a new line (o), types |K|, finishes typing (<ESC>), and then moves to the next line (j). Then I open the inputs file, and type the number of lines in the file (so that'd be 997 in your case), followed by @ and then the name of the macro (so it'd be q in my case), which invokes the macro that exact number of times. Although, it looks like in your movie you have superfluous mouse inputs on every single frame. I'm not sure if typing |K| is a good idea, but in the worst case you could just type |K|M0:0:A:.....|. Or just disable mouse input; this game doesn't use the mouse, after all. I'm not sure where you got the impression that you need to necessarily double the inputs. You only need a blank input each frame, because the game only polls every other frame at 1000/17 FPS (it only polls at 1000/34).
MESHUGGAH
Other
Skilled player (1889)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
1000/34 is an irrational whatever number, up to repeating sequence the value is: 29.4117647058823529 Thanks for the info!
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Judge, Moderator, Player (195)
Joined: 7/15/2021
Posts: 110
Location: United States
Also by the way, Elomavi, you don't need to replace it with a ~60 version - it's only an option. But I do like the look of it.
Elomavi
He/Him
Active player (443)
Joined: 2/16/2020
Posts: 10
Location: Arizona
Info Teddy wrote:
Although, it looks like in your movie you have superfluous mouse inputs on every single frame. I'm not sure if typing |K| is a good idea, but in the worst case you could just type |K|M0:0:A:.....|. Or just disable mouse input; this game doesn't use the mouse, after all. I'm not sure where you got the impression that you need to necessarily double the inputs. You only need a blank input each frame, because the game only polls every other frame at 1000/17 FPS (it only polls at 1000/34).
It sounds kinda dumb but the main reason I have extraneous mouse inputs is so that if I inserted frames in places, I'd have a much easier time remembering where I inserted them. This helped a lot on the other TAS that had the visible/optimal version. Anyways, I did forget to remove them before publishing so I now properly removed the extra mouse inputs for the 60 FPS version. Currently implementing changes now.
Reviewer, Expert player (2393)
Joined: 5/21/2013
Posts: 414
Sorry this is taking a while, but this is a doozy of a situation. I just need some help understanding the gameplay improvements. Here's where I've seen the time saves so far:
  • Almost no loading time to start the game - this saves around 4-5 seconds
  • Opening cutscene is skipped (because you could not save + quit during cutscenes in 2.0), saves around 4 seconds as you claimed
  • The gameplay portion - which I consider the beginning of player control to the next save + quit - does appear to be SLIGHTLY faster than the Windows run (yes, I did include the time for the deathwarp). I'm not sure how to accurately time this since I could never get Hourglass to work.
  • From the gameplay portion to the ending dialogue is about 4 seconds faster - could you explain why? Is this something that was possible in 2.0?
Let me know if my understanding of anything is wrong. There's also the cluster about what to call this run. We already have a 2.3 "game end glitch" run, but this would obsolete the 2.0 "game end glitch" run just due to its similarities. "glitchrunner game end glitch"? Ay ay ay.
Judge, Moderator, Player (195)
Joined: 7/15/2021
Posts: 110
Location: United States
slamo wrote:
  • From the gameplay portion to the ending dialogue is about 4 seconds faster - could you explain why? Is this something that was possible in 2.0?
It's hard to tell without seeing the Hourglass inputs, but this probably comes from strategically pressing ACTION to skip over the delays in the gamestate sequences (which I did in my run too).
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Info Teddy wrote:
It's hard to tell without seeing the Hourglass inputs
https://github.com/Scepheo/Yaife
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Judge, Moderator, Player (195)
Joined: 7/15/2021
Posts: 110
Location: United States
feos wrote:
https://github.com/Scepheo/Yaife
Thanks. After taking a look at the inputs, I do think it's because this run skips over (most of) the delays in the gamestate sequences, which I'm pretty sure is possible on 2.0 as well.
Reviewer, Expert player (2393)
Joined: 5/21/2013
Posts: 414
After some more thought, I think this run is fine to obsolete the Windows run. We allow using older versions that are faster because of unfixed bugs, so we should allow the unusual case where newer versions introduce mechanics which make the runs faster as well. Comparing the gameplay segments here is like comparing apples and oranges, since they start player movement from completely different points, and the starting location in this run is only viable because the cutscene is skippable. I think the only difference we should discount here is the loading time at the beginning, which only takes up a portion of the time save. There's still the matter of what to name this. There is already a "game end glitch" branch on 2.3, and this very obviously should not fall under 2.0 anymore. Maybe just calling it "Glitchrunner" would be the cleanest way to do this?
Judge, Moderator, Player (195)
Joined: 7/15/2021
Posts: 110
Location: United States
slamo wrote:
There's still the matter of what to name this. There is already a "game end glitch" branch on 2.3, and this very obviously should not fall under 2.0 anymore. Maybe just calling it "Glitchrunner" would be the cleanest way to do this?
I was thinking it be called "2.0 glitchrunner", as it's only possible when selecting "2.0" in glitchrunner mode. I added a 2.2 mode as well but it only emulates glitches present in 2.2, and 2.2 fixed unbounded gamestate incrementing.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14881
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [4625] Linux VVVVVV "Glitchrunner Mode" by Elomavi in 00:33.27