Introduction

After my ACE TAS I was looking for something more straight-forward as a change of pace, more optimizing and saving frames rather than storyboarding and assembly programming. I settled on Super Mario Bros. because it was an entirely different problem, different platform, different genre, and different kinds of optimizations where every frame's input is important (compared to games like Pokémon which are about overall routing and luck manipulation but individual inputs are not precise). It is also known to be very well optimized already, so it's a good benchmark for how well you're doing in your optimizations.
The run I ended up saving 45 frames compared to the current one, saving 21 frames in World 1 using a better power-up route, another 21 frames in 4-4 by optimizing the wall clip and making an earlier frame rule, and 3 frames in 6-4 which the current movie lost to lag frames. There are many more small optimizations in this run, but none of them ended up saving anything due to the frame rule.

Tools

The first thing I noticed was that my optimization methods used for previous submissions (i.e. running several parallel game states at each point to ensure some of them always have favorable RNG) just won't work here, movement optimizations in SMB are too variable and have a large fanout. So I needed to devise a new set of tools, specifically for this game: Instead of running the game in an emulator, I analyzed the code (using Doppelganger's disassembly) and extracted a simplified model of Mario's movement. It only tracks relevant values for Mario's movement in relation to the static elements of the level (all enemies are ignored), and allows for a simplified but way faster emulation. With this simplified model, you can do an exhaustive search over all possible movements to determine how to get to a desired goal state optimally. E.g. it can determine what the optimal sequence of inputs is to get up to speed from a standing position, how to clip into a wall optimally or how to perform the flagpole glitch. It can't just solve entire levels start-to-finish though, the search space is just too large, plus enemies might get in your way. TAS game play of SMB naturally consists of small sections of precise movements, with large sections of cruising along at running speed in-between, and the tool is good for optimizing these precise movements individually.
Memory consumption really is the biggest limiting factor with this approach, even with each state only taking up ~10 bytes, it's hard to fit more than a billion states into the memory of your standard home computer. Of course you could upgrade your memory or buy cloud computing resources, but that only gets you so far as the number of states tends to grow exponentially. A way more effective strategy is to put more smarts into the software instead, only considering relevant states in the first place using heuristics. Using some precomputation go create fairly accurate heuristics, I managed to fit most optimization problems into memory.
You can find the source on GitHub. Usual caveats apply, I wrote it purely for myself to use and it may be rough around the edges.

Optimizations

The second thing I soon realized was just how well optimized SMB really is already. In the majority of cases, the optimal movement I computed was only slightly faster than the movement in the current TAS, or exactly the same. On the one hand this was useful, it helped validate the model I used for Mario's movement and I discovered some bugs by comparing my results to it as a reference. On the other hand, it meant that there will be not much of an improvement possible, especially since SMB's 21 frame rule will nullify virtually all individual frames saved through better movement. The reason this submission is a warpless run and not any% is that as far as I could see, there is nowhere to save even a single frame compared to the current any% run. Does this mean the current any% TAS is perfect and will never be beaten? No, it's always possible to discover new strats which nobody has found so far; it only means that you can't improve it by pure optimization without coming up with something new. So big props to HappyLee for achieving incredible levels of optimization with what I presume is manual inputs and deep knowledge of the game mechanics.

A note to HappyLee

Creating this run has led me to really appreciate the amazing job you've done in the current SMB TASes. I only learned about that you're also working on a warpless TAS a few weeks ago in the comments of the recent "all items" movie, when I was almost done with this run. I was not planning to preempt you with this in any way, and the fact that this run contains improvements also hinted at in the "all items" TAS is a case of multiple discovery. In fact I'm happy to hear that you have more improvements up your sleeve, and I'm looking forward to seeing your submission and specifically the improvement in 8-4 you were hinting at. At least I'm fairly confident the improvement in 4-4 is new to you (considering it's not in the "all items" TAS), and I'm glad this submission will contribute to even faster runs in this way if nothing else.

Detailed Game Mechanics

During the creation of this run, I learned a lot about the inner workings of SMB, which I couldn't really find explained anywhere, so here are some notes for posterity.

General Movement

SMB uses an acceleration-based movement model, where the player inputs control the direction of the acceleration acting on Mario, which in turn changes his velocity. The magnitude of acceleration has three possible values, mostly depending on how fast Mario is already moving. Additionally, acceleration is doubled when Mario is not looking in the direction he is moving. This is likely done to allow faster deceleration, but can be abused for acceleration as well. Mario has a max speed with applies to moving both left and right, for running (2.5 pixels/frame),walking/swimming (1.5 pixels/frame) and walking underwater (1 pixel/frame). Acceleration, velocity and position all have fractional amounts ("subpixels") to make Mario's movement appear smoother and allow for finer control.

Interval Timers and Frame Rules

The 21 frame rule is one of the most infamous features of SMB when it comes to speedrunning, but only few people know why it exists (I for one didn't before looking into it). It is born from the solution SMB chose for how to do timers. Timers are fairly simple, you set a timer, it ticks down by one every frame, and you check when it reaches zero to perform a timed action. The problem is that the NES is an 8-bit system, so your timer can only count 255 frames (~4.25 seconds) before overflowing, but you want to be able to have delays longer than that. The solution SMB chose are interval timers: the timer only ticks down every 21 frames (this is controlled using an ordinary timer), which allows to measure far longer durations. The number 21 itself is arbitrary and was likely tweaked during development to achieve the desired pacing of the game. Interval timers are used in many places throughout the game:
  • Time until an enemy does certain actions (like a Koopa shell coming back to life)
  • Time until a multi-coin brick runs out of coins (it's not actually a fixed amount, you get more if you hit it quicker)
  • The amount of time Mario is invincible after being hit
  • The amount of time Mario has star invincibility
  • The amount of time a level intro or game over screen is shown for
  • Time until the title screen demo starts playing
  • The amount of time after the level ending cutscene until transition to the next level starts
Most of these are irrelevant for a speedrun, except the last one. The next level starts based on the interval timer, which means that depending on when the next tick of the interval timer is when you finish the stage, you may need to wait for a longer or shorter amount of time. This is commonly known as the "frame rule" of SMB: time can only be lost or gained in multiples of 21 frames in each level. Improvements only make a difference if you manage to reach an earlier interval timer tick, otherwise you end up just waiting longer at the end and begin the next level at the exact same time. Some events don't follow the frame rule though, notably:
  • Collecting powerups or taking damage stops all timers from ticking for the duration of the animation
  • The timers don't run during lag frames, so they are not affected by the frame rule; any lag frame costs a frame no matter where it occurs
  • Since the movie ends before the interval timer comes into play for the very last level, 8-4 is the only level where individual frames matter

Screen Scrolling and Loading

The screen generally scrolls as Mario moves right trying to keep Mario in the center of the screen, but it can be manipulated using certain actions. In SMB, the screen can never scroll left, only ever right. When a level starts, the entire level is not loaded into memory at once, instead only the first part is loaded, and new parts are loaded as the screen scrolls right. The screen position also determines when level objects (like enemies or event triggers) spawn, so manipulating the screen position can be used to spawn objects sooner or later. Some common ways to manipulate the screen position are:
  • Colliding with a block: in addition to nullifying your speed, it also disables screen scrolling for 16 frames, allowing you to adjust your relative position for a brief moment.
  • Being pushed out by blocks directly changes Mario's position, effectively changing the relative screen position. This is what happens during wall clips.
  • Moving left will not scroll the screen left, therefore changing the relative screen position.
New chunks of level are loaded every 32 pixels of screen scroll, loading 2 columns of blocks at a time. The load itself happens in 8 phases, spread out over 8 frames to avoid lag spikes while loading. The loading of enemies and events is largely independent from loading the blocks of the level, but they can influence each other's timing slightly. One of the phases of loading level blocks (phase 7) is special, as it stops objects from being processed, so it can delay object spawns for an extra frame when aligned so that new columns are loaded the frame before the enemies would load. Additionally, collecting coins stops the processing for a frame, can be used to extend phase 7 for an extra frame and delay enemy spawns even more.

The Flagpole Glitch

The flagpole glitch is a well-known time saving trick in SMB during the end-of-level cutscene. At the end of each (non-bowser) level, a cutscene plays which has multiple stages, in this order:
  1. Mario slides down the flagpole
  2. Mario enters the castle
  3. The remaining time counts down and adds points to your score
  4. the flag is raised (even for large castles where you usually can't see it)
  5. fireworks go off
  6. the next level begins
Each of these phases has conditions when to switch to the next phase, and the flagpole glitch abuses these to trigger faster by setting up Mario's position when hitting the flag. One of the end conditions for the flagpole slide is (that is never used in normal gameplay) is that if Mario's Y position is at least 0xa2, the phase ends immediately. My assumption is that this exists because the flagpole slide was supposed to look differently initially, where the flag is only raised while Mario is sliding down, so it may end up in different places depending on where Mario hit the pole, but they either changed their minds later or messed up the implementation. The Y position 0xa2 is partially inside the base block and therefore hard to get to (for non-TAS runs), but it skips the flag lowering animation altogether and saves significant time.
For even more time savings, the second phase where Mario walks into the castle can be cut short as well. The end trigger for that phase is very simple, it ends as soon as Mario collides with something on the right. One of the blocks of the castle is actually solid, and that is what Mario usually collides with when entering the castle. However, by hitting the flagpole at a height of at least 0xa5, Mario collides with the base block instead, ending both the first and second phase immediately and saving even more time. This is also sometimes called the "full" flagpole glitch (as opposed to the "half" flagpole glitch where only the first phase is skipped). However, due to how jump heights happen to align, it's not actually possible to hit the flagpole at the right height when just standing in front of it, it needs additional help or trickery. These tricks that can make the full flagpole glitch work come in three main varieties:
  • Using an enemy to bounce off of to hit the right height
  • Clipping into the ground and therefore jumping from a lower-than-normally-possible position
  • Scrolling the screen far enough to the left to cause Mario to screen wrap and collide with a block on the left side of the screen instead
All these options can only be used effectively in specific situations, and setting these situations up is one of the main aspects of an SMB TAS.

Level Comments

1-1

The first level is special in that it is the only level where going through a sub-world actually saves time.
It is also infamous for antagonizing TASers by being exactly 1 frame off a faster frame rule, with no hope in sight for ever getting it.

1-2

The current run movie collects a power-up at the start of 1-2, but it turns out collecting it later is actually faster and saves 21 frames over the course of World 1.
During the underground section, I intentionally slowed down twice for entertainment purposes, so the section is 2 frames slower than it could by just holding right.
Fun fact: When stomping on two Goombas on the same frame, you'd expect to get 100 ad 200 points, but you actually get 100 and 400 points. The reason is that in addition to the counter that awards progressively more points, there's also a timer that awards even more points if you hit them in quick succession. However, that timer is only ever increased by one frame for each bounce, so unless you hit multiple enemies at the same time you'll not see it. I suspect it's a remnant from an earlier design of how stomp chains work which they ultimately replaced by the simple counter method.
Whether you bounce on or get hit by an enemy only depends on your vertical speed (in most cases, I'll get to that later): if you go downwards (with at least 1 px/frame), you bounce. It doesn't matter how your hitboxes intersect. This allows bouncing on enemies from seemingly impossible positions like the Koopa at the end of 1-2, and is used to do floor clips in future stages.
Fun trivia: The end of this level (and all other underground or water levels) is literally the end of 1-1, as in it actually loads 1-1's level data. If you're wondering where the piranha plant comes from since that's not part of 1-1, it actually is, all pipes have piranhas in them, only that 1-1 specially prevents any from spawning.

1-3

You collide with moving platforms from the bottom only when you hit the bottom of their hitbox, if you align your jump right and skip this window, you can just go right through them.
The power-up is conveniently located to collect it without slowing down much by grabbing it through the block from below.
It's important to not collide during the power-up collection, as it would change the screen position and make the Koopa for the floor clip spawn later.
Bouncing on Koopa Paratroopas is different from most enemies, in that for one you can bounce off of them while moving upwards as long as you hit it at the top (this is not possible with normal Koopas and most other enemies), and bouncing on them doesn't increase your bounce counter, so subsequent bounces won't give you any more points.
The Koopa floor clip is surprisingly precise: you need to be low enough to not land on top of the floor, but at the same time high enough to have wiggle room to do a successful wall clip into the floor. There are only exactly 2 jump heights that allow the clip: pressing A for 15 or 22 frames from a standing position.
In this specific case, the floor clip actually ends up a frame slower than just running to the end and doing the half flag pole glitch. Which one is faster depends on alignment and parity rules and is hard to predict in the general case, but it looks nice and doesn't cost a frame rule.

1-4

Again, the power-up here is more conveniently located than the one in 1-2 and faster to collect. However, collecting it in a way that allows to clear the lava pit while maintaining running speed is fairly precise. It abuses the fact that after collecting a power-up, Mario is actually considered to be on the ground for a frame, allowing to jump mid-air and gain more height and distance than a normal jump could. It was concurrently discovered and shown off in the "all items" TAS as well.
Fun fact: the lava in the pits does nothing, it's just a texture on top of an ordinary pit.
Fun fact: all the protruding blocks along the way are supposed to have firebars attached, but they're only active in 6-4 which uses the same map as 1-4.
Bowser's flames have surprisingly small hitboxes. That, combined with the fact that the game only checks for player-to-enemy collisions every second frame, means Mario can appear to just jump right through them without taking any damage.
The reason to collect power-ups and get Fire Mario is solely to fight Bowser. When hitting the axe without defeating Bowser first, an animation plays where the bridge retracts and Bowser falls into the lava, costing multiple seconds. The time spent collecting the power-ups is easily regained skipping these animations.
The ending cutscene after Bowser fights depends on the screen scroll position, the length can differ by up to 2 frames depending on the alignment. It can actually be faster to slow down before Bowser for a better alignment.
Fun fact: the axe can only be activated when colliding with Mario's feet, and is surprisingly solid when approached from the side.

2-1

A clip through the pipe is used to scroll the screen far enough to the right to delay the spawn of the Koopa Paratroopa later. Additionally, by aligning the screen position with when new sections of the level are loaded, the spawn is delayed by 2 additional frames.
I'm using a different pipe to clip through than the current run, which is better for optimization, saving 2 frames in the end.
When a Paratroopa spawns, its vertical speed is not reset, so it keeps whatever speed the last enemy in its slot had when it despawned. By manipulating the last enemy, the vertical speed is set to 0. This exploits another quirk with Paratroopas, where floor collisions are only checked when it is moving downwards with at least 1px/frame. That means that for the first few frames, the Koopa slowly sinks into the ground until it hits the floor from the side and turns around, making it move to the right, in an ideal position to clip into the ground.

2-2

You can swim while ducking just like duck-jumping, which doesn't change Mario's sprite but does change his hitbox. This is shown off on the initial Blooper, Mario appears to be both inside the Blooper and the wall.
The whirlpools directly change Mario's horizontal position every second frame, to the right in the first half and to the left in the second half. By slowing down to align when this switch happens, you can actually gain some distance compared to just holding right. It is not enough to gain a frame though.

2-3

SMB's RNG is entirely frame-based, random events only depend on the number of (non-lag) frames that passed so far. The Cheep-Cheep frenzy starts and ends based on an invisible element that is loaded in at specific parts of the level. When Cheep-Cheeps spawn and their initial horizontal speed and relative position is random, but there are only 4 different combinations of speed and relative position possible while in motion. Additionally, new Cheep-Cheeps can only spawn on frames divisible by 8 relative to the start of the frenzy, so the ideal fish for the clip can't be controlled precisely. The fish used in this run is the latest you can spawn one before the frenzy ends, and a fish spawned 8 frames earlier wouldn't quite make it to a position to bounce off of. Some fish are left alive, to manipulate the RNG (whether or not a fish spawns depends on how many still live, and this can influence future fish), to get the fish for the floor clip.

3-1

Again a pipe clip is used to scroll the screen and delay enemy spawns, this time for a shell at the end of the level. Some intentional slow-down is necessary at the end to avoid fireworks, bleeding off 6 frames.

3-2

This stage follows a similar scheme as 1-3: The Koopa is spawned as soon as possible, and with a precise bounce Mario clips into the ground. Unlike 1-3, even though the Koopa needs to walk the same distance, this clip is actually significantly faster than just running through. This is because here you can do the clip with running speed instead of from a standing position.

3-3

The platforms that fall at the end can be used to once more clip into the ground. The vertical subpixel position of where the platform spawns is important, and can be manipulated using the previous enemy that occupied the same enemy slot. It needs to be between 0x75 and 0xb6 to align the vertical position when jumping off correctly for the floor clip. That last enemy turns out to be the flying Koopa Paratroopa, when shooting it right when it leaves the screen, it happens to end up with a value of 0x99.

4-3

The ending cutscene continues as soon as the last firework was launched without waiting for it to explode, so ending with a single firework only costs 1 extra frame and it's usually not worth waiting for another timer tick. For 3 or 6 fireworks however, it is significantly better to wait.

4-4

Very precise optimizations allowed for the second major time improvement in this run, saving another frame rule in 4-4. Unlike most movement optimizations which end up not saving any time due to the frame rule, this one happens to save just enough to make the earlier cycle. This one has not been shown in the latest "all items" movie, and I'm not surprised considering it required optimizations down to a single subpixel to save the frame for the frame rule. It is a combination of the correct amount of screen scroll (0x92) saving 2 frames in the ending cutscene, and starting the firebar after the clip a frame earlier, which is the limiting factor to how fast you can reach Bowser.
Firebars are special in that they don't start spinning right when they spawn, but only when you get close enough to them. Also they don't have a fixed initial position, but rather take the value from whatever enemy occupied their slot before, so your previous interactions can affect the position of later firebars.
Another way firebars are special is their collision detection, which is not based on the same hitboxes as normal enemy collisions, but rather the player's distance to each of the flames, and is checked every frame instead of only every other frame. That is why their hitbox can behave in unexpected ways and hit Mario when you wouldn't expect it, or miss him when it looks like it hit, as shown here.

5-3

This is the first repeat of a level, the exact same level as 1-3, just with some random Bullet Bills throughout. They actually can mess with the usual spawning in the level and make the level impossible by blocking all enemy slots and preventing the platforms from spawning. As mentioned in 1-3, the Koopa floor clip does not save time over just finishing the level normally, so this time around I decided to forgo the clip.

5-4

This is another repeat level, this time of 2-4. Bowser is actually represented by two enemy slots with individual hitboxes. If a fireball hits both at the same frame, both do damage to Bowser. This is shown in this Bowser fight, which uses only 4 fireballs to deal the 5 damage necessary to defeat Bowser.

6-2

The vine glitch is used in this level to teleport Mario forwards, thereby changing the relative screen scroll position and allowing a bounce on the Koopa at the end of the level. The vine glitch works because the developers didn't account for the ability to press left and right simultaneously. The game tries to look up where Mario should be placed relative to the vine depending on where Mario is looking, and by pressing both left and right the game ends up some random value instead, which happens to move Mario 0x90 to the right. The trick by itself is not useful to save time as the setup costs more than the teleport gains, but it is the fastest way to change the relative screen position.
By hitting the vine block a frame early, this run saves 2 frames compared to the current movie.

6-3

Hitting the flag is intentionally delayed by 9 frames in order to avoid 6 fireworks.

6-4

This is another repeat level, of 1-4. It is also the first time Bowser starts throwing hammers at Mario, which have the nasty tendency to cause lag frames when too much is going on at once. The best way to avoid lag frames is to not shoot fireballs, but that's not super helpful when you need to defeat Bowser. By using the trick described in 5-4 for dealing 2 damage per fireball and shooting some early before Bowser starts throwing hammers, I managed to avoid all lag frames, saving 3 frames over the current run.

7-1

Another level where screen scroll can be abused to use and enemy at the end of the level to perform the flagpole glitch. The screen needs to be scrolled to near the maximum amount, requiring at least three individual pipe clips to prepare.

7-2

This is another repeat level, of 2-2, just with some more Bloopers.

7-3

Again a repeat, of 2-3, with some Koopas sprinkled in. The same Cheep-Cheep-based floor clip as described in 2-3 applies. The fish used here is 8 frames slower than the optimal fish used in 2-3, but ends up not costing any time.

7-4

7-4 is another maze level like 4-4 which requires Mario to take a certain path. This is done by checking at very specific points whether Mario is standing on the floor and has the correct Y position.

8-2

Like Cheep-Cheeps, Bullet Bill cannons are random in nature, but they work differently internally. There can be at most 6 cannons active at once in the game's memory, after that it starts overwriting them. For each frame and each free enemy slot of the first 3 slots, a random number is chosen (0-15 for levels until 5-3, 0-7 afterwards), and if it happens to be a valid active cannon slot (0-5), its timer is decreased (the timer starts at 15). When the timer reaches zero, the corresponding cannon will create a Bullet Bill enemy in preparation of firing it. On the next frame, the Bullet Bill decides whether to actually fire, based on whether it is off-screen or too close to Mario, and either starts moving or vanishes again.
As mentioned before, the random numbers in SMB only depend on which frame you're on and can't be manipulated. What can be manipulated though is which random numbers are used when, by controlling which enemy slots are free and which are occupied. That means by killing enemies at the right times, you can influence the occupancy of the enemy slots and therefore indirectly manipulate when the cannons will fire. So if it looks weird that some of the enemies are left alive in this run which could have easily been killed, it's actually because of RNG manipulation.
The Bullet Bill in this run is the best possible spawn, saving 4 frames over the current run.

8-3

Due to how the game timer aligns, hitting the flagpole normally is roughly as fast as waiting and doing the flag pole glitch (the flag pole glitch would still be 2 frames faster). Since this is the only opportunity to do it in this run, I hit the flagpole normally.

8-4

Since the input ends as soon as Mario hits the axe, the frame rule doesn't come into play in this level and every frame counts. Because of this and the fact that it is present in any% as well, 8-4 is insanely well optimized already. While the movements used in the current run were not perfect and I could save some subpixels, they were good enough to not lose a frame anywhere. The pipe entry after the wall clip was particularly frustrating, as it only lacks a single subpixel to enter the pipe a frame early, but alas. I also had other wild ideas, including intentionally taking damage at the turn-around pipe entry, so the screen scrolls to the right and loads the correct loading zone without actually needing to move there, but it turns out the screen just doesn't scroll quite far enough to make it work.
Fun fact, the pipe you start from in the underground section actually has a piranha plant in it, it's just not visible, but it can still damage Mario and can be killed as shown here.
For the final Bowser fight, defeating Bowser is optional as the Bridge collapse happens after the movie ends, but I decided to do it anyway. Mario is getting up close and personal with Bowser, dealing two damage each with two fireballs.

Nach: This is a nice improvement over the existing run. Audience response was mostly not directed at this run, but what was directed to it was positive. Accepting to Moons.
Spikestuff: Publishing.


Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Weatherton wrote:
Clearly the line has to be drawn somewhere before entertainment should come in. To me, it's after the secondary goal of making the ILs as fast as possible. To me, entertainment should be considered no earlier than this point. But, again, that's me. What I saw with HappyLee's comments earlier is that he greatly values entertainment as a secondary goal. It seems based on the above comments that MrWint values entertainment as a tertiary goal. To me, that definition (entertainment as a tertiary goal, behind IL times and full game time) allows for on-going competition even as the primary goal remains stuck for some time.
I guess I agree.
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.
Emulator Coder
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
Weatherton, for our primary speed oriented runs at TASVideos, we have two criteria: 1) Speed of the game 2) Entertainment of the game Speed for smaller segments is not a criteria we normally aim for. Now indeed some runs do fight for fastest levels, or fastest rounds, or fastest laps, or whatever smaller segments the game or community recognizes that applies in some fashion. We publish some of these as secondary branches for games. If you want to argue for fastest in smaller than whole game segments, it's not always clear cut. In Super Mario Bros. especially, due to the fireworks bonus, it's not even clear what a level is. Is it fastest time to the flag pole, or fastest time till the screen turns black? Fastest flagpole in some cases adds seconds to the time before the screen turns black (thereby slowing down overall game time). If you want to look at the screen turning black, whelp, there's a frame rule there. Being that fastest level completion is either already happening, or mutually exclusive with fastest game time, I don't really see how not being entertaining in earlier parts of the level applies, unless you're looking for fastest block loading which you already said you weren't...
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
I'd go for "while the player has control", but I also agree that it's subjective and shaky.
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.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3822)
Joined: 11/30/2014
Posts: 2832
Location: US
For me 18 minutes of Mario can only be so entertaining. Maybe for aficionados like HappyLee there is some ideal of a ‘perfect’ run, but personally I’m not that interested and I find the technical aspects of optimization more fun anyway. I think in this case two projects with the same goal were happening unbeknownst to each other (until near the end) and MrWint just happened to win, it happens sometimes. Anyway I’ll give it a yes vote, mostly for the submission text.
Experienced player (608)
Joined: 10/23/2004
Posts: 706
Nach, you make a good point. I think what would really help in this particular case is if the HappyLee run were submitted while MrWint's was on the workbench so the discussion could be more specific and less about general rules and rules of thumb. My sense is that I would probably prefer MrWint's run based on the descriptions so far provided by HappyLee. The reason being it sounds like MrWint completed levels "faster" if we disregard the frame rule. Of course, without an actual run to compare to, we fall back on debating general rules which is difficult. It's, of course, harder to define the general theory of something, than the specific application of it. Unfortunately, it sounds like we wont' see HappyLee's run soon. But, when we do, the comparisons I'm bringing up can be more specifically discussed.
Current Project: - Mario Kart 64
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Their goal won't be "individual levels" anyway. So when it's submitted, it'll be checked against the current rules, which are "for Moons, compare entertainment". Which in turn means the new run will win if the majority of the audience prefers it. I can say that I also don't like SMB as a game, so entertainment in it is secondary for my at most. This is why I'd be interested in what SMB people think of this IL goal. But I still expect that no one will like it, and they'd rather prefer sticking to unbeatable overall times.
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.
Spikestuff
They/Them
Editor, Publisher, Expert player (2642)
Joined: 10/12/2011
Posts: 6438
Location: The land down under.
Alyosha wrote:
Anyway I’ll give it a yes vote, mostly for the submission text.
Sorry, but I got to do this to you.
Did you find this movie entertaining?
The submission text only explains the lowdown on what's going on.
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
Expert player (2567)
Joined: 12/23/2007
Posts: 830
feos wrote:
I'd go for "while the player has control", but I also agree that it's subjective and shaky.
If you prefer that, you should watch Phil & Genisto's warpless run. Basically Mario touches the flagpole as soon as possible for every stage. SMB doesn't have "in-game time" recorded. Instead, it has framerules. So why disregard the framerule and seek for clearly less entertaining runs? Weatherton made it sound like MrWint's run was optimized than mine, but that's not the case. The truth is that he made it looks like a competition for level time while it's actually meaningless because of the framerule.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
HappyLee, what I actually want to ask you is this. Imagine there IS some definition for individual level times. Just imagine everyone magically happened to agree on what it should be. Do you think there will be any new challenge in speeding individual levels up, or everything is already 100% known, just not used because of the framerules?
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.
Expert player (2567)
Joined: 12/23/2007
Posts: 830
feos wrote:
HappyLee, what I actually want to ask you is this. Imagine there IS some definition for individual level times. Just imagine everyone magically happened to agree on what it should be. Do you think there will be any new challenge in speeding individual levels up, or everything is already 100% known, just not used because of the framerules?
Everything is already 100% known. There won't be much of a challenge. I can optimize everything precisely in SMB if I want to (don't need exhaustive search robots to do that). I don't know if anyone remembers my first or second warpless run, back then I was proud of best individual time results, but over the years I got evolved, and find myself stupid back then. Why not make use of the framerule to make more entertaining runs? Does anyone prefer the time Mario staying in the castle doing nothing instead of maybe slowing down a bit to have some fun? If you really prefer Mario staying in the castle instead of real action, why not just watch Mario in the castle then, why watch a TAS? Most of the time, going for the fastest individual level solution is EASY, but to make full use of the framerule for maximum entertainment is HARD.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Thanks. I guess this resolves Weatherton's (and my) concern.
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.
Wobmiar
She/Her
Player (92)
Joined: 10/20/2015
Posts: 173
Could we accept the two of them, and them simply obsoleting the less entertaining? (after a vote). This way, the 2 of them are available on the site :)
I like colors
Skilled player (1040)
Joined: 7/24/2013
Posts: 175
HappyLee wrote:
"8-4 turn-around pipe entry", obviously you were copying my movements from the "maximum coins" TAS or something.
Just to be clear, every single input in this run is my own, I have not copied anything, and I'm a bit saddened by this accusation. You can find the exact 8-4 inputs used in this run and the program that generates them reproducibly on GitHub. One of the main points of this run was to look at how well optimized SMB is, and copying inputs would defeat this purpose entirely. The fact that this run in many places looks very similar to yours is a testiment to your skills.
HappyLee wrote:
In short, I didn't make that many mistakes during my last warpless run in 2012, but your submission text made it looks like that I had made plenty of mistakes. It's not fair to compare stylistic choices with maximum horizontal positions search. Nobody really cares for "0.125 frames" or something.
Ok, I'm sorry I have upset you with this, let me try to explain better. I'm not in any way saying that these were mistakes in your 2012 run or that my run is better because I saved a fraction of a frame that doesn't end up mattering. What I'm saying is that these represent potential, potential to make the run more entertaining (by spending the extra distance on entertaining moves), or potential to make the run faster (with possible other improvements in the future). Look at it this way: if it weren't for how the frame rules happen to align, the 4-4 improvement would just be a fractional frame like all the others. But any stage could become the next 4-4 when a new technique is found. Whether or not this potential is worth anything to improve a particular run (speed- or entertainment-wise) depends on your goal.
HappyLee wrote:
As for "2-2 whirlpool alignment", I didn't know it back in 2012, but who really cares? Doesn't save a frame or look like anything else.
Let's take 2-2 as an example: Yes, the whirlpool alignment doesn't save a frame, and likely never will, but it gives you a pixel more wiggle room, which can be used e.g. to shoot an enemy you otherwise couldn't reach, show off some movement that slows Mario down, etc. Or not at all, but in any case you're not losing anything by taking the optimal movement since it looks exactly like yours, otherwise you're just squandering potential that may or may not matter.
HappyLee wrote:
For example, I intentionally slowed down at "1-2 initial speed-up" for hitting the mushroom block (which you don't need to in this movie).
Fair, but fwiw your mushroom collection movement is slow by at least 0.1 frames as well, which may or may not be useful during the rest of the stage.
HappyLee wrote:
I intentionally stayed longer in the pipe during the pipe glitch in 3-1 as a stylistic choice, similarly for the 2-1 pipe clip. The way I do 3-2 floor clip and 7-1 pipe clips is also a stylistic choice.
I'm somewhat doubtful since the time you spend inside the pipes actually affects your relative screen position which is important fo the future enemy interactions, so your freedom is limited here, but I'll grant you that.
HappyLee wrote:
2-3 and 7-3 floor clips has to do with the Cheep-cheep.
Not true, the Cheep-Cheeps are actually fairly predictable and fixed, e.g. my 2-3 Cheep-Cheep is the exact same as yours, it's just about the way you do the clip.
HappyLee wrote:
Maybe you got better "8-2 Bullet Bill luck" but I got clearly more entertaining 8-2 as a whole.
These are not mutually exclusive. When I said "Bullet Bill luck", it is RNG manipulation, and you can theoretically have both.
HappyLee wrote:
"8-4 wall clip pipe entry", I just wanted to slow down before entering the pipe. Why do I have to go full speed before entering a pipe?
Well that's just straight-up false, you didn't slow down at all. Your method was slower because you were jumping, limiting your speed to walking speed. Sorry to say this, but I feel like you're not actually remembering your own run and which decisions you made and just making things up here. You're very defensive about this, and I can understand that, as it probably feels like I'm "invading" your domain of SMB in some way. All of this is not an attack on you or your runs, and I'm not claiming that my run is better because of 0.1 frames here or there, it is merely a documentation on what's possible, something that can be useful in other runs.
HappyLee wrote:
Everything is already 100% known. There won't be much of a challenge. I can optimize everything precisely in SMB if I want to (don't need exhaustive search robots to do that).
That is a bold claim, especially considering 4-4. In general I feel like you overesitmate how "unbeatable" this new time is, you have spent so much time with this game that you feel you know everything, when it's clearly not the case. Considering both you and me have missed an improvement that the other one found, it's not unreasonable to think that we missed more, and that this is not in fact the end of the line. There's a lot of talking in this thread about what to do now that this category is at its limits, I'm just not 100% convinced it actually is.
Expert player (2567)
Joined: 12/23/2007
Posts: 830
MrWint wrote:
Just to be clear, every single input in this run is my own, I have not copied anything, and I'm a bit saddened by this accusation.
I didn't say you copied my input. I said that you maybe copied my movement from maximum coins TAS. Even though you might have worked out through your program, it's still not original since it's already in the maximum coins TAS.
MrWint wrote:
These are not mutually exclusive. When I said "Bullet Bill luck", it is RNG manipulation, and you can theoretically have both.
Again, I think you've misunderstood what I meant. I meant that I was not aiming for the fastest Bullet Bill shot in 8-2, and you should know that it is a stylistic choice that I slowed down on purpose for the entertainment of the whole level.
MrWint wrote:
Well that's just straight-up false, you didn't slow down at all. Your method was slower because you were jumping, limiting your speed to walking speed. Sorry to say this, but I feel like you're not actually remembering your own run and which decisions you made and just making things up here.
That's what I meant for "slowing down". Not going full speed up is sort of slowing down, right? Maybe it's my poor expression. OF COURSE I know it's faster to run on the pipe, don't you think I'd know that? It's just my style of jumping into the pipe, and what's wrong with that?
MrWint wrote:
Not true, the Cheep-Cheeps are actually fairly predictable and fixed, e.g. my 2-3 Cheep-Cheep is the exact same as yours, it's just about the way you do the clip.
At least it's true for the 7-3 case, where you calculated "4.325 frames". Mars608's WIP got a perfect Cheep-cheep in 7-3 which is way faster than yours, but we don't think it's an accomplishment or an real improvement of any kind.
MrWint wrote:
You're very defensive about this, and I can understand that, as it probably feels like I'm "invading" your domain of SMB in some way. All of this is not an attack on you or your runs, and I'm not claiming that my run is better because of 0.1 frames here or there, it is merely a documentation on what's possible, something that can be useful in other runs.
To be honest, to me, your run hasn't shown anything new except the early jumping technique in 4-4. That alone is impressive enough as it has proved that I've made a mistake, but you make a whole list making it sound like that I've made more than one mistakes and there's plenty to be optimized. I don't need you to tell me that because I know when I've made a mistake and when I haven't. In fact, as I already said, most things in your list ARE my stylistic choices. I didn't make that many mistakes even back in 2012, and back then I didn't use robots or codes.
MrWint wrote:
There's a lot of talking in this thread about what to do now that this category is at its limits, I'm just not 100% convinced it actually is.
That's just based on your feeling. You should know that SMB does have a limit, and right now, every time improvement could mean the very last. I have a bolder claim, that I'm now 100% convinced that it's not. How about that?
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
MrWint wrote:
There's a lot of talking in this thread about what to do now that this category is at its limits, I'm just not 100% convinced it actually is.
So what's your take on the "individual levels" idea, where SMB runs would ignore frame rules and get measured by reaching some "magically agreed upon" level end point optimally, if such point ever existed? Maybe the definition could be "reaching ASAP the point in every level where the player no longer has control, while also not increasing the overall time of the run". That would resolve the fireworks issue, as well as deciding on the necessity of flagpole glitch and things like that. The TAS of Dragster also set a specific goal of maximizing player's position, including subpixels. This all might sound arbitrary, but boils down to striving as far right as possible as soon as possible, and can indeed be an interesting challenge if new SMB runners join. Maybe this is only worth having a single branch with such a goal.
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.
Joined: 9/13/2014
Posts: 62
Location: Canada
The use of bots shouldn't be seen as a smear on Mr Wint's work. They are just as valid a tool as frame advance, and I would argue, require an altogether different and rarer skill set to employ. There is merit in both approaches. The appearance of this TAS before the one by HL and Mars seems like an unhappy accident. And yet, anyone should be able to say, "I'm going to make a tas of this game" regardles of that game's history. I also find it strange, that we've reached a point where some say "it's futile to even try and make it go faster". I'm not sure what the harm is in trying. Worst case scenario, the person will waste some time. As mentioned here, a "reach level end" goal, irrespective of the frame rule, might be a good way to explore if there's anything at all that can be improved in SMB.
Expert player (2567)
Joined: 12/23/2007
Posts: 830
Again, I think MrWint is clearly a genius on making bots, which is something I can't do, but using it on SMB warpless instead of less optimized runs (plenty out there) is confusing to me. It's like using a cannon to kill a pig for bacon. I'm sure MrWint has tested mostly everything he could think of, but judging from the result, it tied with SMB any% and me & Mars608's warpless WIP that uses no bot, and the only real improvement is 4-4 puzzle break. Please don't get me wrong again, but I think it's useless to explore if there's anything at all that can be improved through individual level time improvement (which doesn't make any sense due to framerule) because MrWint has already done that, and all he's got is previously known optimizations except 4-4. Those are not real improvements of any kind (except for 4-4). The real improvements are something like my ideas of getting 2-1 ground clip through a backward flying Koopa Paratroopa and shell kicking in 3-1. Real improvements require imagination.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Wobmiar
She/Her
Player (92)
Joined: 10/20/2015
Posts: 173
Why should we judge a movie based on how the autors work? Nobody can claim they are better because they are using a bot, or not using one. What is more important is the result, no? I mean, who cares what kind of person the autor is, how many hours and how many rerecords he has, how much he is good at using robots or how much he is creative? Why is this even a discussion? Let's judge the movie, not the story behind it :P I understand there is some legitimate tensions, fear of rejection, fear to lost works that you cherish. You are not rivals, this is not the Olympics :P What you have done, you can be proud of it. All of you. You all did an amazing work, an amazing run. And somehow, you 2 did finish first place ^^ Like in boxing, I think you should simply let the judges decide wich run should be published. Maybe it will be the two of them, who knows. For now, we are not here to vote if it should be accepted or not, but either if it's entertaining. The final decision is for the judge anyway. Whatever happens. Acceptation, rejection. It doesn't destroy your work. Happy Lee, I think the best thing to do is to submit your run. Then it will be easier to compare :)
I like colors
Expert player (2567)
Joined: 12/23/2007
Posts: 830
Wobmiar wrote:
Why should we judge a movie based on how the autors work? Nobody can claim they are better because they are using a bot, or not using one. What is more important is the result, no? I mean, who cares what kind of person the autor is, how many hours and how many rerecords he has, how much he is good at using robots or how much he is creative?
Well, I care. When I'm appreciating an art work, I'd very much like to know the story behind it and its author. And I care if a work is done by human or robots, because they are clearly very different. Can't really compete with exhaustive search bots because they always win, and the best thing you can do is a tie.
Wobmiar wrote:
Whatever happens. Acceptation, rejection. It doesn't destroy your work. Happy Lee, I think the best thing to do is to submit your run. Then it will be easier to compare :)
Why would you think it's fear of rejection? That's not a problem. Let this one be published, and let me and Mars608 surprise you in 2-3 months when we finish our run as we planned. How about that? (When was I arguing that this run shouldn't be published? I never did that. I was arguing that individual level time result doesn't matter really much not only because of the framerule, but also the fact that nothing really new would come out of individual level competitions.)
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Joined: 1/27/2014
Posts: 181
I have a suggestion, if Mr. Wint and HappyLee are amenable. Since he's found an improvement (and, as it seems, so have you), why not collaborate and do a movie with the three of you. Mr. Wint, HappyLee and your 'project manager'. That way there's no hurt feelings over 'precedence', and everyone gets credit for their part in finding improvements to the TAS. That seems to me the fairest solution. What say you?
happy_mario
He/Him
Player (108)
Joined: 4/3/2013
Posts: 37
Location: China
Absolutely Yes Vote for this faster run. Waiting for HappyLee's best run. BTW, I want to use MrWint's tools in my Syobon Action game huh... because many times the work we do is exhausting & testing all possibilities in some key jumps, which is so boring. Why not use tools to complete these limits, and then focus on the entertainment, or better game routes (especially the route that use glitches of the game). It's great to see the showdown between computer/AI and humans... in TAS!
Happy everyday! 快乐每一天!
Wobmiar
She/Her
Player (92)
Joined: 10/20/2015
Posts: 173
I'm really sorry if I made assumptions. I'm clumsy when I talk. I just want to say that yes, you can argue that what is made by humans is better than what is made by robots. But remember who created robots: humans. And it takes creativity to create them too ^^ Sorry again, I'm bad at wording.
Nach wrote:
And remember who created humans: robots. And it's an automatic process which just combines the materials at hand.
Who created the automatic process? God. God created this TAS :P PS: At this point I'm joking, just so you know :3
I like colors
Post subject: We have submitted to robot overlords, but don't know it yet
Emulator Coder
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
Wobmiar wrote:
But remember who created robots: humans. And it takes creativity to create them too ^^
And remember who created humans: robots. And it's an automatic process which just combines the materials at hand.
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.
Joined: 9/13/2014
Posts: 62
Location: Canada
I must apologize, it wasn't my intent to derail the thread into a theoretical discussion on bots, vs. humans, just to see the good in both Wint's Tas, and the Mars + HL WIP (which I highly look forward to seeing, their work is always marvelous). On topic, Wint's run is faster then what we have, so correct me if I'm wrong, but I believe it should be published, and the public can decide if the new one from Mars and HL should obsolete this one.
Wobmiar
She/Her
Player (92)
Joined: 10/20/2015
Posts: 173
Same as NotoriouslyEpic. Let's just act like there is no rivality ^^
I like colors