Emulator used: libTAS v1.4.2        Game Version: VVVVVV 2.3.6

What is VVVVVV?

VVVVVV is a precision-platformer where you control Viridian, a space captain aboard the D.S.S. Souleye. Instead of jumping like most traditional platformers, Viridian instead has the unique ability to flip gravity. Scattered throughout Dimension VVVVVV are deadly enemies and dangerous spikes that Viridian must avoid in order to rescue all the missing crewmates. Additionally, there are 20 optional shiny trinkets that Viridian can collect.

Game Objectives

  • Collect all 20 shiny trinkets and reach the end of the game as quickly as possible
  • Uses major glitches in order to save time.
  • Abuses death in order to save time.
  • Version 2.3's "Glitchrunner" mode is NOT allowed

Comments

This TAS is fundamentally different than any previous category and shouldn't obsolete any previous run. Although at a surface level it may seem similar to the "20 trinkets, No Death Mode" category, the run varies drastically with the inclusion of intentional deaths.

Glitch #1: SS1 Skip

In a normal playthrough, you're supposed to do Space Station 1 and rescue Violet at the end of that level. However by dying at the right moment during the introduction cutscene, you're able to respawn back at the ship. This essentially skips all of Space Station 1, allowing us to do a different level first. As Viridian traverses Space Station 2, they briefly enter the room with the teleporter at the end of Space Station 1 which actually unlocks that teleporter on the map. This allows us to teleport to the end of Space Station 1 and easily rescue Violet!
Now this works fine in a normal Any% playthrough but there are actually 2 different trinkets located in Space Station 1 that we need to collect. In an RTA 100% speedrun we travel backwards through SS1 from Exhaust Chute, collect the trinkets, and then rescue Violet but TAS has a more interesting method to collect these trinkets which I'll explain later. For now, we skip these trinkets.
Another key reason why skipping SS1 is so essential is because of another glitch in the run:

Glitch #2: Intermission Skip

Sometimes this skip is called "Gravitron Skip" but you can use this to skip either intermission. Normally when you progress through the game, you have 2 seperate "Intermission" levels after you have 2 and 1 crewmate remaining respectively. When you rescue Violet, there's a cutscene that plays afterwards that shows all of the crewmates stranded in Dimension VVVVVV. However, we can skip this cutscene by dying and using the teleporter afterward! (There's other ways as well but this is the method the TAS uses since it's the fastest). Additionally, Violet's cutscene will actually take priority over the code that's responsible for sending you to the intermissions, allowing you to skip one of the intermissions! Although the Gravitron is the longer intermission, we actually need the Gravitron for a very important game-breaking trick later so the TAS skips Intermission 1 instead.

Glitch #3: Telejumping

Telejumping allows Viridian to clip inside specific walls that are close to teleporters. Normally when you use a teleporter, player control is removed and Viridian turns invisible. After some time, the game will change rooms to the destination and teleport Viridian to the center of the room. After some more time, Viridian will teleport to the center of the teleporter, become visible, and then be flung out of the teleporter and land safely on the ground. However, to accomplish this fling the game simply changes Viridian's position by a set amount and this can be abused. Although Viridian themselves cannot walk into walls, this change of position from a teleporter can! If you press R while using a teleporter, you actually regain control of the player and can freely move around. Remember that Viridian is teleported to the center of the teleporter just before flinging out of it so the amount of time you have to move around while being flung out is actually quite small.
The telejump into Tower (3:35 in video) is actually a unique kind of telejump that's faster than a normal telejump but it's only possible after rescuing a crewmate. However, the fundamentals are the same. By pressing R at a specific time, you regain control of Viridian and also respawn at the previous checkpoint which in this case is the teleporter at the end of Space Station 2. The game is supposed to fling you out of the ship teleporter but since you're at the teleporter near the end of SS2, the game finds that teleporter and flings you from there instead. Since we have control of Viridian, we can then perform the telejump as normal.
There's one more telejump to talk about and that's the telejump into the secret lab (5:30 in video). Although the telejump itself is normal, this telejump serves a few key purposes. First off, it triggers some dialogue near the end of SS1 which actually sets the flag to start Violet's cutscene the next time you use a teleporter. Victoria guards one of the 20 trinkets we need to collect but if we talk to her after rescuing enough crewmates, there's a long 6 second cutscene that shows the locations of trinkets on the map. We haven't actually rescued Victoria yet so her trinket should be inaccessible but it turns out that we can actually just talk to the Victoria found in the secret lab instead! We could rescue Victoria before rescuing Vitellary and talk to her normally but it ends up eventually causing routing problems and ends up being slower overall.
Also, your sprite becomes messed up after Victoria's trinket because the game tries to change Victoria's sprite but since it can't find Victoria in the room it changes your sprite instead. This only changes your hitbox for normal 2x2 enemies, all "special enemies" and tile/spike hitboxes are the same.

Glitch #4: Gravitron OoB

After we complete the Gravitron, we are able to respawn in the Gravitron and return to the beginning of the intermission. By doing this, Viridian's hitbox becomes messed up and it allows us to clip into areas that we previously couldn't. By walking off a specific block and flipping on the last possible frame before the coyote frames run out, we can clip onto the top of the Whee Sports room and go out of bounds. From there, we can travel across the top and eventually wrap around the other side and to the right. What's to the right of the Whee Sports room? Well, it's actually the very end of the game! From here, we could travel back to the left, clip back in-bounds, and reach the credits if we wanted. However, we don't have all the trinkets we need! Additionally, it's currently impossible to collect the trinket in Final Level with our broken hitbox so we need to come back here once that is fixed. So instead, we head to the right and eventually clip into Intermission 1 and leave the intermission from there. Also, returning to the ship will fix the broken hitbox so you don't need to worry about that anymore. So why did I go through all this trouble? Well... the key difference between exiting normally and this route is that the Gravitron will still be running once I return to the ship. This leads to the most important glitch in the entire run, the zip!

Glitch #5: The Zip

If you have seen Info Teddy's Dimension Open TAS, you may have read about zipping already. This type of zip is fundamentally different from what I am talking about here! To avoid confusion, I'll refer to this new glitch as a horizontal zip and the glitch that Info Teddy uses in her TAS as a vertical zip. If I don't specify which zip I am talking about, I am talking about a horizontal zip!
Normally when you complete the Gravitron, the game moves the bottom gravity line to the right to allow you to fall through and complete the intermission. But what happens when the game can't find this gravity line? Well, the game decides to send YOU to the right instead. Using this glitch, you can travel across dimension VVVVVV and collect trinkets at speeds that you could only imagine previously. Although this glitch has been known about for a while, in v2.2 and below this route wouldn't be possible since the game would delete Viridian once the zip ends, essentially softlocking the game. In v2.3 and above, the game will prevent itself from deleting the player and instead continue gameplay as normal.
However, there's multiple limitations to this glitch that prevent us from obtaining all the trinkets...

Zip Restrictions-

1. Entering the Tower from the left will almost always put us at the top of the Tower, regardless of where we entered from. This limits how far we can travel vertically by quite a bit even with the use of teleporters. We could reach the bottom of the Tower by entering from Teleporter Divot but this wastes time and we start the zip from the bottom of the Tower anyway. Additionally, we can't escape the Tower from the middle due to a script that changes the Tower to a horizontally warping room; If we tried to escape, we'd just loop in the Tower until we reached the top!
2. If you are too far off-screen, the zip will end! Your X-position has to be at least 308 in order to move to the next room but if your X-position is greater than or equal to 320, the code responsible for deleting the gravity line will activate and the zip will end. Because the game moves you 24 pixels at a time and the screen is 320 pixels wide, your align will change by 8 pixels if you don't move at all. This unfortunately means that long stretches of ground (3 rooms wide) can't be traversed without some gaps in order to change your align. This limitation prevents us from obtaining quite a few trinkets including Edge Games and Unobtainium.
3. A lot of the checkpoints/teleporters could be traps! If you touch them and then end up dying, there's a short time period where you respawn but can't control Viridian yet so respawning for a lot of them will either end the zip or fling you into spikes. Notable checkpoints that end up killing you include... The checkpoint in Seeing Red (Tower), the teleporter in Building Apport (Tower), and the teleporter in Philadelphia Experiment (End of Lab).

Zip Routing

Here is a high-quality map of Dimension VVVVVV for reference:
We start the zip off in the Tower. However, we're escaping the Tower from the bottom... so where do we end up on the map once we escape? To answer that, we need to talk about VVVVVV's coordinate system!
The position of all entities is tracked from the top-left corner of the screen so an entity at (0,0) would be in the top-right corner and an entity at (320,240) would be at the bottom-right corner. Due to the way that the Tower is programmed, the Tower is actually considered one giant room by the game and when we escape we're at Y-position ~5,450! Because our Y-position is greater than 240, this runs the code that's responsible for moving Viridian to a different room. The screen moves 1 room down and Viridian's Y-position gets subracted by 240. However, Viridian's Y-position is still above 240 so this code triggers again... This keeps repeating every frame until Viridian is finally back in-bounds and is the vertical zipping phenomenon I was talking about earlier. So where does Viridian end up? The top of the Tower (Y-position = 0) is aligned with the top of the Seeing Red room so that will be our starting point for this vertical zip. Because Viridian's Y-position is 5,450 and a room in VVVVVV is 240 pixels tall, Viridian will travel downwards 22 rooms from Seeing Red and at Y-position=170. Dimension VVVVVV is a 20 by 20 map so we end up moving a net distance of 2 rooms and 170 pixels downward from Seeing Red. However, it's a bit more complicated than that. This is Viridian's predicted final position on the FIRST frame Viridian leaves the Tower. The zip will take 22 frames to put Viridian back in bounds and during this time while Viridian's actual position is still out of bounds, Viridian can move around freely since there's no collision that far out. Whether Viridian is flipped or not will affect whether they fall downwards or upwards during this period and this will change the position that Viridian appears at once the vertical zip is over.
Okay, back to the route! Once we leave the Tower, it will be difficult to achieve a vertical zip again because entering the Tower from the left will just result in us teleporting to the top of the Tower. This means that we'll get all the trinkets which are only accessible due to the vertical zip first! This includes Trench Warfare and Prize for the Reckless.
For reasons that are a bit too complicated to get into at the moment, we need to trigger the Comms Relay cutscene and collect the It's a secret to Nobody trinket before doing any of the other trinkets so we get that out of the way first. Next, we collect one of the overworld trinkets by warping to the middle of Warp Zone and escaping the level by clipping through the ground. Then we teleport to one of the teleporters in the overworld below SS2 and collect 2 trinkets from the Lab. It IS possible to collect the 2nd trinket of Lab using zipping as well but it turns out to be a couple seconds slower than just doing the trinket the normal way. Once we've collected all the trinkets that we left behind, we clip into the end of the Lab and finally rescue Victoria. From there, we rescue Victoria at a teleporter and continue to maintain our zip into the Final Level!
Once we are in Final Level, we clip down into Intermission 1 and then flip ourselves so we're traveling upwards. Once we reach the end of Intermission 1, we can finally end the zip and fall upwards toward the end of the game! For some reason, we can flip on midair in the VVVVVV room if you're on the sides so a bit of time is saved that way. We collect the last trinket and complete the game while skipping all of the Final Level!

Q and A:

"Why did you rescue Victoria at the ship teleporter? Isn't that slower than the Tower teleporter?" - That's true! However, it's impossible to avoid the trigger for Comms Relay from that teleporter and that messes things up with rescuing Victoria so you'd have to end up wasting a lot of time dying to avoid the trigger. Here's a video of me rescuing Victoria from the Tower teleporter: https://youtu.be/FEaJZokdpdo?t=38
"How did you end up going straight through a gravity line in the Lab?" - This is what is known as a line clip. The reason why this happens is that the game incorrectly gives you coyote frames when you first leave the ground after flipping. If you end up touching a gravity line so that your direction of gravity is the same direction when you flipped and it's been 2 or fewer frames since you left the ground, you can flip past it.
"How did you go through the enemies in Edge Games?" -This is the result of hitboxes only being active on one part of the screen at a time when going through a room that warps.
"Is this route possible RTA?" -lol no. Although this is common in other games, this is the first major TAS-only route difference in VVVVVV. There is an easier although still quite difficult route using a zip that saves 30s compared to the RTA WR but nobody has currently pulled it off in 1 attempt and the zip only lasts about 3 seconds.

slamo: Claiming for judging.
slamo: There are some sync issues with this one, it's gonna be in limbo for a while. Setting to Delayed until things get sorted out.
slamo: I overestimated how long this would take, apparently. Info Teddy has provided a debug version that reproduced the desync we were having, and the author subsequently resynced it, also saving 81 frames along the way due to other improvements. I've replaced the movie file, back to judging!
slamo: I really like this run, especially the last few minutes. Just when I think I've seen everything in VVVVVV, a new movie comes out that blows my mind. Great work.
This game actually doesn't have a proper full completion branch in Standard. There is the Starred run, but that is made with the restriction that no deaths can occur, which massively changes the routing and glitches that can be utilized. That goal can stand on its own as a Stars run and I wouldn't feel comfortable obsoleting it with this.
I've changed the branch name to "20 trinkets" to match the naming convention of the Stars run - if this is wrong then the publisher can feel free to change it.
Accepting to Standard as a Full Completion branch.
fsvgm777: Processing. Info Teddy is handling the encodes for this one. Dropping. To whoever claims this: Info Teddy is handling the encodes for this one.
Spikestuff: Processing. Info Teddy's still handling the encodes for this one. Publication process flipping back to fsvgm777.
slamo: Replaced movie file with a 206 frame improvement.
fsvgm777: Heh, flipping. Processing (again). Info Teddy is still handling the encodes for this one.


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15584
Location: 127.0.0.1
This topic is for the purpose of discussing #7575: Elomavi's Linux VVVVVV "20 trinkets" in 13:25.19
Editor, Expert player (2073)
Joined: 6/15/2005
Posts: 3282
Didn't realize the game was this glitched, although I can't say I understood much of how these glitches work. And for a moment I thought you were aiming for 100% rooms as part of "100%", because I couldn't understand why you were zipping through so many rooms when you only had to collect 20 trinkets.
Reviewer, Expert player (2435)
Joined: 5/21/2013
Posts: 414
Do you have the correct movie file uploaded? Or is there some other setting we need? It desyncs for both me and Info Teddy in the Gravitron.
Elomavi
He/Him
Active player (453)
Joined: 2/16/2020
Posts: 10
Location: Arizona
slamo wrote:
Do you have the correct movie file uploaded? Or is there some other setting we need? It desyncs for both me and Info Teddy in the Gravitron.
Hm that's really strange. Yes, I'm absolutely positive that I uploaded the correct movie file. As far as I'm aware there aren't any specific settings you need to enable in order to sync the movie. I could redo the inputs for the Gravitron but if the RNG doesn't match at all then that's no good. Just for redundency, here are the options I have on libTAS:
  • Force Software Rendering
  • Prevent Writing to disk
  • System time: 1 second (at Power On)
The only possible thing I can think of is the System time being wrong but that shouldn't be possible since libTAS automatically loads the correct time when loading the movie file. Would it be possible for you to send a video of the TAS desyncing in Gravitron? If I could replicate the desync in libTAS, I could properly redo the Gravitron so that it actually syncs.
Judge, Moderator, Player (200)
Joined: 7/15/2021
Posts: 112
Location: United States
Elomavi wrote:
Just for redundency, here are the options I have on libTAS:
  • Force Software Rendering
  • Prevent Writing to disk
  • System time: 1 second (at Power On)
The way I implemented it, none of these should really matter except for system time. Since 2.3, Gravitron uses its own deterministic Xoshiro RNG completely separate from all other uses of randomness, and it is seeded by using the value of SDL_GetTicks() on the frame that you enter any game mode and load in. In hindsight, I probably should have used the game's internal frame counter in case the values of SDL_GetTicks() were somehow not consistent.
Elomavi wrote:
Would it be possible for you to send a video of the TAS desyncing in Gravitron?
Okay, sure: Link to video
Reviewer, Expert player (2435)
Joined: 5/21/2013
Posts: 414
Elomavi, we have been fooling around with a debug version of VVVVVV a little bit and found that some of the in-game settings can affect RNG. Can you please post the contents of your settings.vvv file? It's going to be in the ~\.local\share\VVVVVV\saves\ folder.
Judge, Moderator, Player (200)
Joined: 7/15/2021
Posts: 112
Location: United States
I also gave the debug version to him too so he'll be back with his printed RNG values when he gets around to it.
Elomavi
He/Him
Active player (453)
Joined: 2/16/2020
Posts: 10
Location: Arizona
Okay, here's a google drive link with the Xoshiro seeds and the settings.vvv file: https://drive.google.com/drive/folders/1_8HeqYUQtFbqFSdQtREgx1QuIFrk__zs?usp=sharing On the debugging version of VVVVVV that Info Teddy sent me, I appear to be experiencing the exact same RNG that you two are based on the video she sent me. This means that I think I can actually TAS the Gravitron properly so I'll get right on that!
Judge, Moderator, Player (200)
Joined: 7/15/2021
Posts: 112
Location: United States
Elomavi wrote:
On the debugging version of VVVVVV that Info Teddy sent me, I appear to be experiencing the exact same RNG that you two are based on the video she sent me.
Hmm, if the debug version works then (besides the potential issue of SDL_GetTicks()) there's probably a problem with compiler optimizations (and maybe floating-point numbers too). I'll try to rectify this in 2.4. Actually, that doesn't make sense if we were all using the same release build of 2.3.6... I'm not sure what's causing the difference, then.
Elomavi
He/Him
Active player (453)
Joined: 2/16/2020
Posts: 10
Location: Arizona
Okay, here's an updated movie file that should *hopefully* sync this time. It also includes some miscellaneous other improvements so the time is now a 13:32.19. User movie #637946666163030054
Reviewer, Expert player (2435)
Joined: 5/21/2013
Posts: 414
Thank you, that syncs! The settings also matter for sync on this run: the fake loading screen must be turned on, otherwise the RNG isn't right. I'll update the file and get this moving again.
Judge, Moderator, Player (200)
Joined: 7/15/2021
Posts: 112
Location: United States
I'd like to encode the publication for this.
Elomavi
He/Him
Active player (453)
Joined: 2/16/2020
Posts: 10
Location: Arizona
Turns out you can actually flip through the floor in the V room with a different vertical align so here's an updated movie for a final time of 13:25.19 User movie #637956845136804465
Reviewer, Expert player (2435)
Joined: 5/21/2013
Posts: 414
That file desyncs for me in the Graviton again. Looks like the game hash matches the debug version and not the regular version - and it does sync on the debug version, but not the regular version.
Elomavi
He/Him
Active player (453)
Joined: 2/16/2020
Posts: 10
Location: Arizona
slamo wrote:
That file desyncs for me in the Graviton again. Looks like the game hash matches the debug version and not the regular version - and it does sync on the debug version, but not the regular version.
Sorry for responding so late to this. I'll be honest, I'm not really sure what to do about that. If the debug version meant for debugging the Gravitron RNG doesn't match the actual Gravitron RNG then it seems like a really pointless build. I could use the original build but then we're back to the original issue again. Does the old movie file without the timesave in Final Level still sync at the Gravitron in the normal version? If it does, then just use that. If it doesn't, then this whole "debug branch" has completely different RNG and isn't actually useful at debugging. I have no idea why the Gravitron RNG would change even though the game's hash file and the inputs before the Gravitron are exactly the same for both movie files I sent.
fsvgm777
She/Her
Senior Publisher, Player (226)
Joined: 5/28/2009
Posts: 1213
Location: Luxembourg
As far as I know, the movie without the timesave (read: the currently submitted movie, not the userfile with the improvement) syncs just fine at the Gravitron on the regular 2.3.6 build. This one could be used for the final publication, but I'd like an input from a judge (slamo and/or Samsara in particular) about this, as this is beyond my field.
Steam Community page - Bluesky profile Oh, I'm just a concerned observer.
Reviewer, Expert player (2435)
Joined: 5/21/2013
Posts: 414
Ok, so I think there was some version confusion here. I suspect libTAS 1.4.3 may have been used for the new movie, because it now only syncs on that version and not 1.4.2 anymore. I've updated the movie and publication can go ahead now.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15584
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. ---- [4881] Linux VVVVVV "20 trinkets" by Elomavi in 13:25.19