Submission #7822: rythin's MacOS Yo! Noid 2: Enter the Void in 07:59.83

(Link to video)
System Mac OS Emulator libTAS 1.4.4
Game Version unknown Frame Count 28681
ROM Filename noid.x86_64 Frame Rate 59.77283779131485
Branch Rerecord Count 2313
PowerOn Authors rythin
Game Yo! Noid 2: Enter the Void
Submitted by rythin on 11/20/2022 5:29:54 AM

Submission Comments
Yo! Noid 2 is a fan-sequel to the NES Yo! Noid game. It's a 3D platformer featuring the titular Noid, as he embarks on a redemption arc to become the hero of pizza.

Game objectives

  • Aims for fastest time
  • Abuses low framerate

Comments

This run mostly follows the ruleset established by the RTA community. Since it's an Any% run, there are no restrictions on strategies used, but as one of the more controversial rules, manipulating the framerate of the game is allowed. This lets me to mostly follow the RTA route, without losing time to skips I wouldn't otherwise be able to do. More on these in the stage by stage comments.
I feel it should be noted that this is my first time TASing a 3D game and as such a lot of the movement most likely isn't as optimal as it could be. This TAS was a learning process and I'm definitely planning on improving it at some point in the future, but I thought it's a fun enough watch to be worth submitting despite the optimization problems.

Stage by stage comments

New York

Despite following RTA rules, I decided to optimize timing from power on, rather than from pressing 'New Game' like the RTA community does. This matters because the water cycle in New York runs in the menu, making it so that waiting a couple seconds after launching the game gives one a better cycle. Luckily, with some very precise jumps, one of which uses an exploit I will explain later, I can catch the human cycle for the level.
The level features some of the only uses of ledge-jumps, where the Noid gets a speed boost if I jump away from the ledge being held.

Noid Void 1

After completing every level the Noid is taken back to the Noid Void, which serves as the hub world where the player can talk to NPCs and enter levels. Normally, the Noid returns to the Void in the same place he left it, but finishing New York or saving and quitting will always put him up in the air, above a pit where the player would normally be taught how to use the grapple.
On the first frame after loading in, I perform a mid-air jump to give myself more downwards velocity. This allows me to slingshot up after tethering to the stop sign sticking out of the wall and get out of the hole right away, saving a handful of seconds compared to the intended way out. After that it's just a matter of getting to the first level, which is how the Noid Void segments will look like from now on.

Plizzanet

This level immediately introduces a couple mechanics, first of which being slopes. The Noid slows down when running up or down slopes, so whenever on one I will be jumping to move faster. After climbing halfway up the first slope, I do a precise wallrun and walljump to reach a tether spot earlier than intended, saving a couple seconds. Right after I drop from the tether spot and perform a fling.
Flings work by abusing the tether spots' grapple range mechanic. Most hooks in the game have a specific range the noid is supposed to stay at from the hook. The hooks always allow to grapple them from outside that range though, quickly moving the noid into the range. If the noid releases the grapple duing that quick correcting movement, that speed will be maintained and allows me to fling myself much farther than intended by just swinging with the yoyo.
I immediately bunnyhop to maintain some of the fling speed and then perform a lag clip through the water. The water is supposed to kill the noid, but by lagging the game I can pass through the water safely and reach a later part of the level. After this it's a simple matter of collecting the green key in The Core and taking the zipline up to the rocket, which takes me to the Noid Roid.
Here, the objective is to collect 5 gold keys and open the door to the pizza box, which is the end goal of each level. Most of the keys are collected as RTA would, with the exception of the small planets key. This exploit isn't really understood by anyone in the community, but I believe it has something to do with the horizontal speed noid has when entering the gravity sphere of the planet being converted to vertical speed upon jumping. By jumping into the planet in a specific way I can have a lot of speed and thus jump straight to the key, skipping a rather slow climb that I would have to do otherwise.
At the end of the level, RTA runs perform something called a Right Warp, which you can see here. For some reason, this doesn't seem to work with this version of the game. We're not sure if it's due to the Mac build being different, or libTAS speeding up loads significantly, but I just opted to do a normal quitout, as it still saves time compared to not doing it.

Swing Factory

Noid Void 2 is just a repeat of NV1, so I'm skipping over that.
Swing Factory features a large interior section that I skip completely, saving over a minute. This is done by performing a coyote walljump, where I can jump off on the last frame of a wallslide, where I still have some coyote time, but am no longer considered to be on the wall, therefore not getting pushed away on the jump. This allows me to return to the wall I jumped off of and gain enough height to ledge grab the upstairs section. I take the zipline as normal and then jump off an NPC mushroom to reach the higher up platform. This is likely not faster than the RTA strat of jumping off the wall, but it's extremely precise and also I just think it's funny, so I decided to include it. Right afterwards I perform a Tether Boost.
Tether Boosts are done by releasing the grapple and jumping right afterwards. The sooner you jump, the more height the noid gains, with the frame right after release giving the highest boost.
A max height Tether Boost is required to perform the wallrun on the outside of the intended platforming section, saving a couple seconds.
After that all that's left is simple platforming to reach the pizza box. I do not do a save & quit on this one, as the next level is closer to the SF exit than the NV default spawn point.

Domino Dungeon

This level starts off with a very precise Tether Boost off the highest point of the opened pizza box to be able to hook onto the lever on a platform above, which pulls me onto the platform without needing to do any of the platforming usually required. Pulling the lever reveals the first of two required keys for this level, with the second one being right above. Instead of climbing up there like a human might, chaining walljumps between the pillar and the wall, I opted to do an intentionally delayed Tether Boost, to land perfectly on the door which previously blocked the key. While jumping up I re-grab the lever and do a max height TB off the door all the way up to the key.
After this, all that's left is getting to the main room, performing some lag-assisted walljumps in the corner to skip an entire 2 side rooms and an outside section, instead just climbing all the way to the red key which opens the door to the pizza box, then performing a rather precise jump to get to the red door right away and complete the level.
The lag during the walljumps is necessary as it makes the downwards momentum off the wall not apply to the jump, actually allowing me to gain height in the corner.

Void Core, The Climb and Mike

Upon finishing DD, the pizza tower is complete and can now be climbed to reach the Void Core. This is where the villain of the game is hiding and all that stands between him and Noid is a simple door... or maybe not since I can just clip through it by approaching it at a correct angle.
The inside of the core features a short bunnyhop sequence to maintain speed from a set of grapples, some precise walljumps and then a fling to get all the way up quicker. And then starts Mike.
The Mike fight is the only RNG in the game. The fight is split into 2 phases, an attack phase where dice will randomly drop from the ceiling and Noid must throw them at Mike to deal damage, and an avoidance phase where the floor becomes blue and zaps the Noid if he touches it. Getting zapped restarts the phase, losing a significant amount of time, so of course we avoid it.
The speed at which dice fall as well as the position is completely random, and I haven't been able to find much of a way to manipulate it other than just standing in a different spot as the die is spawned.
After dealing enough damage Mike goes down, giving his final speech before the game assaults your eyes with some static glitchy effects and then rolls credits.

Sync notes

These are included in the movie annotations but I'm putting them here aswell for ease of access.
This TAS uses a user-ported linux version of the game, based on the Mac version. A link to the ported game is available here: https://drive.google.com/file/d/1qcwAo-toUfBqIJnWL-0awR-yQNPHtyvz/view?usp=sharing
If you would prefer to create the port yourself, here's the key linux files. https://drive.google.com/file/d/1rwSlKvC8NFiPavn8dZavTvtgnt2e9DvO/view?usp=sharing
I obtained them by using DemoJameson's Cuphead port tool, since the 1.1 version of that game shares Unity version with Yo! Noid 2.
The rest of the game files can be obtained from https://noid.pizza/. Download the Legacy Mac build. Once downloaded, you'll need to move some files like so:
- if you chose to get the linux files from the Cuphead tool, create a directory named noid_Data and inside it Resources, Mono and Plugins, if you got the ready linux files these should be already set up for you. - in Mono and Plugins create a pair of directories named x86 and x86_64. I'm not sure if both are necessary, but that's the way I did it. - paste libmono.so and libMonoPosixHelper.so into the Mono directories and ScreenSelector.so into the Plugins directories - finally, move Cuphead.x86_64 to the root directory, next to noid_Data and rename it to noid.x86_64
  • the above is only neccesary if you chose to get the linux files yourself, if you got the pre-made files just continue from the steps below*
- move the contents of \Yo! Noid 2.app\Contents\Resources\Data to noid_Data - from \Yo! Noid 2.app\Contents\Resources copy "unity default resources" and UnityPlayer.png and past them to noid_Data\Resources
Sync instructions: Command line options: -force-gfx-direct Video: Variable framerate enabled, Any resolution should be fine, synced for me at 1024x768 and 1400x1050 Runtime: Prevent writing to disk enabled, everything else disabled. Input: Mouse support disabled, Joystick support for 1 controller
As a final note on sync, the game has a weird bug where the camera in the first level can face the wrong direction. When making the TAS, I assumed libTAS would make this bug deterministic and simply continued with the "bugged" camera, but on future replays I realised it starts in the correct orientation most of the time. Simply restart the movie until the camera glitches out to ensure sync. In my personal experience this seems happen once every 3 game launches.

Potential optimizations

As mentioned before, this was my first time TASing a 3D game and the first bit of it definitely felt like fighting the controls to get the character to do what I wanted. There's plenty of small movement sections that could be improved a fair bit. Also of course the RNG and execution in the final boss fight could still be better.

Special thanks

Of course this run would not be nearly as impressive if not for the RTA community, who have been working on the skips and exploits since the game's release back in 2017. Despite our small size, it's heartwarming to see how much we've been able to accomplish breaking this game and it's remake, which unfortunately isn't TAS-able at the moment.
Also a huge thanks to ikuyo, for showing that porting unity games to linux isn't just a myth and actually can be done, as well as DemoJameson for the Cuphead tool and SBDWolf for helping me actually get the files and get the game running in linux.

Info Teddy: Judging.
Info Teddy: This is actually a cool game to watch, despite its premise.
It seems like I've only been able to get the wrong camera bug when I'm using software rendering. However it still sometimes won't do the bug for several attempts in a row (which ends up feeling like a weird sort of consistent inconsistency). Besides that, this is a Unity game, so fast-forwarding is prone to desyncs. And despite desyncing during dumping once at the 5-minute mark, I managed to get a complete dump of this run on the second attempt.
As for legitimacy, this run uses the macOS version of the game (entitled "legacy" because it's not the remastered version which is the most recently released one) but ports it to Linux, which is slightly different from the usual games we have that are Windows versions ported to Linux. I used the author's self-ported version linked in the submission, but the instructions seem reasonable enough to me. The resulting build of the game seems to run well and doesn't contain any glaring issues in gameplay that would make it substantially different from the Windows version. While this version of the game doesn't seem to have a certain glitch used in RTA runs (which the author acknowledges), this run is still faster than all known records, so I'm fine with it.
Accepting to Standard.

EZGames69: I hope I don't live to regret this
EZGames69: I lived to regret it.
I keep experiencing desyncs as mentinoed in this post: https://tasvideos.org/Forum/Topics/23730?CurrentPage=1&Highlight=517848#517848
I'll be dropping this so if anyone else want's to try, they can scoop it up, and if I get it to sync on myself, I'll reclaim it.
fsvgm777: Got a lossless AVI dump from Info Teddy, processing.

Last Edited by feos 13 hours ago
Page History Latest diff