Gateways is a 2012 portal-inspired puzzle metroidvania. The game features many different kinds of portals, all with unique gimmicks which are required to solve the many puzzles the game offers. In this run I abuse a variety of glitches and oversights in the game to reach the credits with only two of the normally required four guns, and none of the upgrades.
If you'd like to actually see what's going on, here's an alternate encode which shows the entire map, with the player's position marked as a yellow dot.
Game objectives
- Skip everything
- Shoot a lot of gateways
- Take damage to save time
Tricks
There's 3 main glitches in the run, conveniently they appear one after the other in the following order:
Origin Warping
Whenever Ed falls on some spikes, he is brought back to his last "safe" position, which is determined by the last spot he stood on for more than 1 frame. By jumping right away after starting a new game, and then never landing on the ground for more than a frame, I am able to make it to the nearest spikes without setting my safe position. The game has a failsafe in case that happens, and warps Ed to what I call the origin. This happens to not be very far from the starting point of a new game, but in this run it allows me to skip waiting for the first elevator platform to come down, saving a handful of seconds on the way to the Gateway Gun.
Object Deloading
This is the most complicated glitch of the three, and it is thanks to -7's efforts that it is understood. Every object in the game has a certain area around it in which Ed must be present for the object to stay loaded. Fairly normal so far; now, the interesting thing is how objects get loaded in the first place. If an object is not loaded, every so often the game will take Ed's distance from the object and use it to determine the time interval which must pass before the next distance check. The further away Ed is, the longer this interval will be. Presumably this was done for performance reasons.
So for a practical example, let's say a door has the range of 100 units, and Ed is standing 200 units away. It is frame 2000 of the game and the door just checked if it should load in. Seeing how Ed is too far away, the door does not load, and instead is assigned the timestamp 2100. Ed could now teleport right next to the door and it will not load until frame 2100. These numbers may not be exact, and there's some exceptions to this but this is the rough idea of how this glitch works.
In the run, I go up a fair bit away to the top right and then wait a handful of frames. This is so that the counters for a bunch of doors and elevator platforms to tick over to the next load-check cycle, and get set fairly large values (around 300 for the closest ones). Using the Gateway Gun, I can cross the distance in the matter of frames, so once stuff is deloaded I can simply make my way all the way to the Size Gun, going through deloaded shortcut doors which are supposed to be opened from the other side, allowing for quick traversal after solving the puzzles normally.
The Size Gun itself is also an object which ended up deloaded, meaning that normally I'd have to wait around 10 seconds for it to load in and allow me to progress. Luckily, Perma-Gates (the white gates that stay open permanently, allowing for quick traversal back to the hub), force nearby objects to reload despite their timers. The nearby perma-gate still takes a while to load in, but not nearly as much as the Size Gun, so it ends up being faster to open the gate and pick up the gun normally.
Size Clipping
The Size Gun allows Ed to clip through some ceilings. If the bigger gate is put on the right side of a wall under a ceiling, peeking through the portal just slightly, jumping and closing the portals will put Ed partially in the ceiling. As long as he is in the size-change animation he will continue moving up through collision. I use this to clip out of bounds and go to the credits trigger.
Info Teddy: Claiming for judging.
Info Teddy: This is a very skillful TAS, clearly optimized and pretty entertaining. Accepting to Standard.
fsvgm777: Processing.