(Link to video)

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.

Skilled player (1019)
Joined: 7/24/2013
Posts: 175
In the spirit of easing the tensions, I have removed the "movement optimizations" section from the submission text since, as HappyLee pointed out, it could be interpreted the wrong way. It was not meant to make his previous run look unoptimized (it isn't), but I can see how it can be interpreted this way.
happy_mario wrote:
[...]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).
Exactly. These are Tool-Assisted Speedruns, but people don't make enough use of these possibilities. The emulator and its capabilities are just one of the tools available to you, not the only one. You game contains a lot of tedious grinding and trial-and-error? Create a script that solves it for you! Want to know how to optimally play Dragster? Create a spreadsheet! For me, the design and creation of these tools to solve the problem is the actual interesting part in creating TASes, the notes and spreadsheets, deconstructing how the game actually works and exploiting that to the fullest.
HappyLee wrote:
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.
At the time I thought it was a good idea, because of how optimized it already is, you can better judge how well you're doing. This was entirely new to me and I've tackled a problem like this before, so having a way to measure how good you're doing was very useful. Other aspects of SMB, like the frame rule and its fairly static nature made me wish I chose a different game in the end, but alas it was too late, and it was still great fun creating it. So the genuine answer is "I didn't know any better" I guess.
feos wrote:
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?
I think that would take too much away from the game and make it boring to watch. To be frank, SMB is not the most appealing game to watch, it's a lot of the same. The best part of it are the crazy setups, like floor clips, vine glitch, etc, which only exist because the frames after the flag pole where you don't have control in are also important, and without it the game would devolve to be about holding right and B as much as possible.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11264
Location: RU
Thanks, I see now that it was a dead-born idea :D
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 (2453)
Joined: 12/23/2007
Posts: 822
MrWint wrote:
At the time I thought it was a good idea, because of how optimized it already is, you can better judge how well you're doing. This was entirely new to me and I've tackled a problem like this before, so having a way to measure how good you're doing was very useful. Other aspects of SMB, like the frame rule and its fairly static nature made me wish I chose a different game in the end, but alas it was too late, and it was still great fun creating it. So the genuine answer is "I didn't know any better" I guess.
Thank you for explaining it. I see your method as the future to many TASes, which I don't know is a good or bad thing. On the one hand, it can discover improvements that are almost impossible to be found by human TASers (like 4-4 in this run); on the other hand, it can quite possibly lay off TASers of many games since it's impossible to beat exhaustive search. Maybe cooperating with other TASers of the game is a better idea for the future. In my opinion, SMB is pretty much at its limit right now. It's been years since brand new glitches are found. I'm not sure if combining your method with SMB TASing can bring really surprising discoveries, but I'm always positive with improvements and looking forward to future cooperation, if possible. ---- BTW, on my YouTube channel and other TAS videos page, there are always people who merely see TAS as a robot or program doing inputs, and comment something like: "What's so impressive about robot playing games?", and I always respond to them even though my English is not that good, something like "I'm a human, not a robot. If you don't believe me, meet me in China." But now, I don't know what to think and say, as the unpredictable future of robots surpassing human has already arrived. I've seen robots solving a Rubik's cube at lighting speed (less than 1 second). It has only impressed me for a second, because it doesn't take a robot any imagination to solve a puzzle like this, since it has probably calculated all possibilities and simply chosen the fastest one. Surely you can argue that it's human that create robots so creativity still comes from human, but I don't think we're talking about the same kind of creativity here. To me, the most impressive thing in TAS isn't reaching for the time limits through combinations of inputs, but it's the wisdom and creativity it takes during the process. Imagine if one day robots can paint art better than human artists, and you show art works of that robots to me, I'll definitely be impressed at the first one: "Wow! I can't believe it's from a robot!", and maybe the second one, but I'm not sure if I'll continue to be impressed as it's less impressive if a robot's simply doing its job, and it has plenty of power and time to do almost anything, and doesn't have to feel lonely or depressed or anything else. In cases of human vs. AI, I just don't think it would make a fair competition, because the limits of a robot and the limits of a human are just not the same. It's nothing like human vs. human in a chess game, "let the smarter one win", or in a running match, "let the faster one win". What makes works from a robot less impressive is that robots simply have higher limits and potentials. For example, if the 4-4 puzzle were solved by a human through imagination and reasoning, I would be so impressed that I'd be his best friend, but when I know that 4-4 is solved by exhaustive search (plus MrWint's work of programming and putting all actions together), I still find it impressive, but I'm much less impressed. I don't know if anyone knows what I mean... ---- It's kind of like TAS vs. RTA. Why do I enjoy watching TAS when I know it's not recorded in real time? Because TAS movies are usually obviously more entertaining and technically impressive. If a TAS ends up pretty much like a regular speedrun, why do I need to watch this TAS? I can just watch a human player performing it live. I don't know if you understand what I mean by this, MrWint. If I were you and made such an excellent program, I would use it on where human TASers are very weak at, and use it to solve most incredible things. That would be really impressive. If the end result looks exactly like not using it, what's the point of using a bot? I know that your program and your extraordinary programming skills have much more potentials than merely solving the 4-4 puzzle. Edit: In case if anyone misunderstands me (I'm probably bad at expression), I didn't mean that no one should run an exhaustive search bot over SMB. In fact, I'd very much like to cooperate with MrWint on this, and see if his new method would bring anything interesting or more improvements I don't know about. I was just saying that improvements found by a human TASer and through exhaustive search bots don't feel the same. And there are lots of better places and games to perform the bot on, and maybe discovering exciting new things, ratter than proving what we've already known.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
happy_mario
He/Him
Player (107)
Joined: 4/3/2013
Posts: 37
Location: China
Struggle for years, limit testing thousands of times, just for 1 frame which robots can exhaustive in few seconds, it's bad, indeed. MrWint should have taken his powerful robot to test any other game, is that?
HappyLee wrote:
It's kind of like TAS vs. RTA. Why do I enjoy watching TAS when I know it's not recorded in real time? Because TAS movies are usually obviously more entertaining and technically impressive. If a TAS ends up pretty much like a regular speedrun, why do I need to watch this TAS? I can just watch a human player performing it live.
Agree. I watched the video of the New Super Mario Bros. Wii and found that there was no technical difference between TAS and RTA. It was just a little faster, but not very fun. The facts have already happened. At least this time, we should think about good things. MrWint didn't beat you, just tied, and you'll get the final record; his robot proved that there is no limit to the SMB record and there is still the possibility of saving another frame, although almost zero right now.
Happy everyday! 快乐每一天!
Expert player (2453)
Joined: 12/23/2007
Posts: 822
happy_mario wrote:
his robot proved that there is no limit to the SMB record and there is still the possibility of saving another frame
Where did you learn that?
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
happy_mario
He/Him
Player (107)
Joined: 4/3/2013
Posts: 37
Location: China
"What? I just tested that a week ago." When you say this, I believe you think 4-4 is the limit, but it is not. As long as it is possible, I boldly say there is no limit. I do not agree that you have called this frame your fault because Happylee will not make mistakes in his SMB TASes, just not get.
Happy everyday! 快乐每一天!
Expert player (2453)
Joined: 12/23/2007
Posts: 822
happy_mario wrote:
"What? I just tested that a week ago." When you say this, I believe you think 4-4 is the limit, but it is not. As long as it is possible, I boldly say there is no limit.
Well, after running his exhaustive search bot and solving the 4-4 puzzle, that's the limit of 4-4, isn't? As I said, we are getting really really close to the very limit of SMB (or maybe already there), and every time improvement could mean the last. I think it's important to know that rather than fooling ourselves that there's somehow always possibilities or room to find new improvements. Maybe for most other games, but not for SMB. (I know this since I've been TASing it for years, and so far there hasn't been an discovery to tell me that my whole career is wrong.) By the way, I did think that the 1 frame in 4-4 may never be gotten, but I was never 100% sure on that one, and I've tested 4-4 probably three or four times during these years (and failed, because it's indeed extremely hard). And yes, it was my mistake, but it doesn't mean that I've made many mistakes elsewhere, or that SMB doesn't have a limit.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
happy_mario
He/Him
Player (107)
Joined: 4/3/2013
Posts: 37
Location: China
Fine, strictly, it's true. I just want to tell the hope of our fans, but the truth is that.
Happy everyday! 快乐每一天!
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11264
Location: RU
happy_mario wrote:
Struggle for years, limit testing thousands of times, just for 1 frame which robots can exhaustive in few seconds, it's bad, indeed.
Now you understand what Kasparov felt when he lost to a computer for the first time.
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
You may have been tied by a robot, HL, but what's extremely impressive is that you didn't lose. And a bot can't make Mario dance through SMB, as you would. Bots aren't currently used to make jaw dropping playarounds as would happen when you are in an autoscroller or waiting for a frame rule. And so, I expect a demand for human input TASing will exist as long as bots lack the creativity to make you smile, or laugh, when seeing unexpected movement. It's very similiar to TAS vs. RTA, I get a thrill from watching runners like Darbian and Lackattack that I never will from TASes, and vice verse. They have their own intrinsic value.
Emulator Coder
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
HappyLee wrote:
BTW, on my YouTube channel and other TAS videos page, there are always people who merely see TAS as a robot or program doing inputs, and comment something like: "What's so impressive about robot playing games?", and I always respond to them even though my English is not that good, something like "I'm a human, not a robot. If you don't believe me, meet me in China." But now, I don't know what to think and say, as the unpredictable future of robots surpassing human has already arrived. I've seen robots solving a Rubik's cube at lighting speed (less than 1 second). It has only impressed me for a second, because it doesn't take a robot any imagination to solve a puzzle like this, since it has probably calculated all possibilities and simply chosen the fastest one. Surely you can argue that it's human that create robots so creativity still comes from human, but I don't think we're talking about the same kind of creativity here. To me, the most impressive thing in TAS isn't reaching for the time limits through combinations of inputs, but it's the wisdom and creativity it takes during the process. Imagine if one day robots can paint art better than human artists, and you show art works of that robots to me, I'll definitely be impressed at the first one: "Wow! I can't believe it's from a robot!", and maybe the second one, but I'm not sure if I'll continue to be impressed as it's less impressive if a robot's simply doing its job, and it has plenty of power and time to do almost anything, and doesn't have to feel lonely or depressed or anything else. In cases of human vs. AI, I just don't think it would make a fair competition, because the limits of a robot and the limits of a human are just not the same. It's nothing like human vs. human in a chess game, "let the smarter one win", or in a running match, "let the faster one win". What makes works from a robot less impressive is that robots simply have higher limits and potentials. For example, if the 4-4 puzzle were solved by a human through imagination and reasoning, I would be so impressed that I'd be his best friend, but when I know that 4-4 is solved by exhaustive search (plus MrWint's work of programming and putting all actions together), I still find it impressive, but I'm much less impressed. I don't know if anyone knows what I mean...
You'll find this interesting. It's a story of a creature playing against the ultimate AI who has absorbed the minds of thousands of players. It is very much in line with your thinking here.
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.
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
I dislike the term "robot" to describe the tools I use to create runs like this, as it implies that I have somehow built a robot and told it to create this run for me, leaned back and submitted the result after it was done. This grossly misrepresents what went into the creation of this. The grand majority of time is spent on research, reading the game code, understanding how the game works, looking for exploitable mechanics or glitches, routing, trying different options. These are all things done by hand, things that require creativity and are not easily automatable (yet). To be fair, this submission shows very little of this work in the final result just because of how optimized it already was. The only improvement found by me (yes, manually) during this phase was the better mushroom collection route in world 1. But that didn't mean I took anything from the current run as granted, I looked into everything to see whether it can be improved rather than just copying the existing route (even though you can't really tell from the end result). The tools only come in for the grunt work of actually figuring out the optimal inputs for individual sections when your route is already defined. And this is not rocket science, e.g. for this run it's a simple exhaustive search over the state space of Mario's movement in a section of a level, using standard search algorithms (IDA*) and data structures (basically Hash Maps). There is no secret sauce, no evil lair where I flip a giant switch and scream "IT LIVES". I enjoy building these tools and optimizing them to produce the results I want, and maybe my submissions revolve around them too much as a result (or maybe it's just an unusual feature of a run and people focus on it because of that), but this is not where the majority of effort is spent in the creation of these runs. By making it sound like I create some machine overlords who will take all our TASing jobs, you imply that all the other aspects, the effort and creativity that goes into these, don't exist. Small edit as in re-reading I noticed that is sounds way saltier than I meant it to, it's meant to be a mostly explanatory and humourous take on my perception of this debate.
Amaraticando
It/Its
Editor, Player (157)
Joined: 1/10/2012
Posts: 673
Location: Brazil
I'd like to complement that bots are only useful is small sections of the level and they're game specific. If the TASer doesn't research the game and sucks at TASing manually, the bot will suck even more. There's no feasible way to build a bot that does the hard work (in most games). Bots will also be unable to add entertainment value, as it's not a objective thing to implement in the code.
Expert player (2453)
Joined: 12/23/2007
Posts: 822
MrWint wrote:
The grand majority of time is spent on research, reading the game code, understanding how the game works, looking for exploitable mechanics or glitches, routing, trying different options. These are all things done by hand, things that require creativity and are not easily automatable (yet). To be fair, this submission shows very little of this work in the final result just because of how optimized it already was. The only improvement found by me (yes, manually) during this phase was the better mushroom collection route in world 1.
I do respect your work, MrWint, and I've learnt the story of how you've made this run through your submission text. But I don't know if you've read the submission text from my last warpless run in 2012 (I think maybe you should have since that's the run you were trying to obsolete?), there was a huge hint of World 1 new route during the "1-4" section:
HappyLee in 2012 wrote:
I've came up with a crazy idea once, that is to get the mushroom in 1-3 instead of 1-2, and then get the fire flower in 1-4. What really shocked me was that the idea almost saved 21 frames. Although I've tried my best to manage to get that flower in a quickest way, there are still about 3 more frames to go in order to save time. And since this new route would be a bit less entertaining, I still kept the old route.
So combine that knowledge with 1-4 fast getting Fireflower technique, you can easily get the improvement of World 1 new route. The hardest part is actually getting Fireflower in running speed, and you did that through your exhaustive search tools. As I said, improvements found by exhaustive search tools and improvements found by human TASers just don't feel and mean the same. So it actually doesn't take much creativity (except for the creativity to create exhaustive search tools) to discover World 1 new route if you had read my submission text. Again, this is NOT a criticism of any kind. Just clearing some facts.
Amaraticando wrote:
There's no feasible way to build a bot that does the hard work (in most games).
I agree with you on everything else. At least for this run, I think most of the hard work or really important work is done by MrWint's tools, since everything else was done before, and it doesn't need too much work or any imagination at all to imitate or replicate what's already been discovered or done before. That's why I think using exhaustive search tools on SMB to come up with an improvement over previous projects doesn't make much sense (unless combined with really interesting ideas), and there are much better places and games where the work of such tools makes more sense and human creativity would take the most credits.
feos wrote:
Now you understand what Kasparov felt when he lost to a computer for the first time.
So true. Simply just not a match to exhaustive search tools.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Skilled player (1650)
Joined: 7/1/2013
Posts: 433
HappyLee wrote:
feos wrote:
Now you understand what Kasparov felt when he lost to a computer for the first time.
So true. Simply just not a match to exhaustive search tools.
In Kasparov's defense, he was able to defeat Deep Blue.
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
HappyLee wrote:
MrWint wrote:
The grand majority of time is spent on research, reading the game code, understanding how the game works, looking for exploitable mechanics or glitches, routing, trying different options. These are all things done by hand, things that require creativity and are not easily automatable (yet). To be fair, this submission shows very little of this work in the final result just because of how optimized it already was. The only improvement found by me (yes, manually) during this phase was the better mushroom collection route in world 1.
I do respect your work, MrWint, and I've learnt the story of how you've made this run through your submission text. But I don't know if you've read the submission text from my last warpless run in 2012 (I think maybe you should have since that's the run you were trying to obsolete?), there was a huge hint of World 1 new route during the "1-4" section:
HappyLee in 2012 wrote:
I've came up with a crazy idea once, that is to get the mushroom in 1-3 instead of 1-2, and then get the fire flower in 1-4. What really shocked me was that the idea almost saved 21 frames. Although I've tried my best to manage to get that flower in a quickest way, there are still about 3 more frames to go in order to save time. And since this new route would be a bit less entertaining, I still kept the old route.
So combine that knowledge with 1-4 fast getting Fireflower technique, you can easily get the improvement of World 1 new route. The hardest part is actually getting Fireflower in running speed, and you did that through your exhaustive search tools. As I said, improvements found by exhaustive search tools and improvements found by human TASers just don't feel and mean the same. So it actually doesn't take much creativity (except for the creativity to create exhaustive search tools) to discover World 1 new route if you had read my submission text. Again, this is NOT a criticism of any kind. Just clearing some facts.
I think you still have some misunderstanding on how I created this run and what the tools I used can and can't do. So let me clear some facts for you. In short, what the exhausitve search does is remove the tedium, not the creativity. For 1-4 for example, you are mixing up the time line here. Yes, you wrote in 2012 that you tried this and it didn't work out for you. But that is by no means the reason I found this improvement. And there was no knowledge about the fast fireflower technique whatsoever, since that was first published only with the "all items" TAS, way after I had already found this by myself (as the commit history shows). And I figured this out on a piece of graph paper, not with the exhausive search tools (which at that point were not capable of navigating a situation that complex yet). In fact I figured most of this run out manually, e.g. using spreadsheets to track Mario's jump heights for the floor clips. All the tools do is find the final inputs which do these moves optimally. Claiming that it didn't take much creativity to find this just because you wrote a note in your submission text in 2012 is somewhat insulting. If it was so obvious, why didn't anybody else find it? Why didn't you find it back in 2012? I have tried to be accommodating so far, since I'm sorry for the unfortunate collision between this and your future submission. I'd be thrilled to see your submission succeed, but only on its merits. Please stop pushing your narrative of minimizing this run, its entertainment value, and belittling my contributions in it, just to make you and your prospective run look better. I'm looking forward to seeing it, and I have great respect for what you managed to achieve with SMB TASes so far, please refrain from petty tactics like this.
Editor, Experienced player (559)
Joined: 10/22/2016
Posts: 581
Location: Argentina
Well, there are a SMB thread in the forum since 2004. Why did you guys try to talk about this in the topic before? these situations make it appear that many of the SMB TASers have little communication between them and ends in a drama in the workbench at the point that they end up talking about Humans vs. Robots
You can see more TASes on my youtube channel
Expert player (2453)
Joined: 12/23/2007
Posts: 822
MrWint wrote:
I think you still have some misunderstanding on how I created this run and what the tools I used can and can't do. So let me clear some facts for you. In short, what the exhausitve search does is remove the tedium, not the creativity.
I already knew exactly how you created this run and what your tools can and can't do from your submission text. A simple question, if I may: where's the creativity in this particular run other than your great programming skills of creating exhaustive search tools of SMB?
MrWint wrote:
In fact I figured most of this run out manually, e.g. using spreadsheets to track Mario's jump heights for the floor clips.
Actually you don't need to figure that out by yourself (in cases like 1-3 floor clip) when the solution is already there, since I've already figured it out back in 2012, and if you imitate or study my inputs or my movements, you get almost the same thing (I'm not saying that's exactly what you did, but it's true and the easy way). You can say that you didn't learn anything from my inputs or my movements, but I don't believe that you can create the same run without the tricks I found in 2012 and before that. The fact is, this run shows no new technical improvement except the fast Fireflower technique in 1-4 and fast jumping in the wall in 4-4 (which are both found through exhaustive search), and I think the way you say you figured most of this run out manually is somewhat an insult to my previous warpless run, as if you pretend it doesn't exist. Again, it doesn't take any imagination at all to replicate what's already done before (judging from the results).
MrWint wrote:
Claiming that it didn't take much creativity to find this just because you wrote a note in your submission text in 2012 is somewhat insulting. If it was so obvious, why didn't anybody else find it? Why didn't you find it back in 2012?
I was talking about the new route of getting the Mushroom in 1-3, which you claimed "the only improvement found by me (yes, manually) during this phase" but actually not since it's already in my submission text in 2012, which I believe you've read before. The only reason I didn't use the new route in 2012 is that I didn't succeed getting the Fireflower in running speed, as I said in the previous submission text. I do believe that you've found the fast Fireflower technique in 1-4 through your exhaustive search tools, but it doesn't mean that you've found "the better mushroom collection route in world 1" on your own, since that's already greatly hinted in my submission text so that alone is already obvious since 2012.
MrWint wrote:
Please stop pushing your narrative of minimizing this run, its entertainment value, and belittling my contributions in it, just to make you and your prospective run look better.
I'm sorry if I sounded like minimizing this run (I'm just bad at expressions), but that's not what I was trying to do. I haven't really started talking about or comparing entertainment value yet, and believe me, I have lots to say on that, so I've also been refrained. I haven't said that there's no contribution in this run, and I said you and your exhaustive search tools deserve full credits of solving 4-4 puzzle, which by itself is a great achievement, something no human TASer has ever succeeded before. I was talking some points in a broader sense, since similar thing can happen to almost any project or any TASer. To be honest, what seems to me in this case is that as if you were trying to "steal" this project by finding improvements through your more advanced exhaustive search tools and imitating my previous movements and ideas while claiming that most things have been figured out by yourself. As I said, it would be very impressive if you've found the improvements entirely by yourself, manually, but unfortunately, the only two improvements in this run were both found by your advanced program, which is not that impressive to me because I've already known what an extraordinary programmer you are since last year. Technically, you can perform similar thing to almost any TAS project, because human TASers are just not a match to your exhaustive search tools in some optimizations. But to me, it's just not right to take or learn what's done before and claim to have "figured most of this run out manually". That's why I said I think cooperation with previous TASers of the project would be a better idea for the future. Just a simple question: if you weren't trying to "steal" (maybe not a good word, but I know no better English word) this project, why didn't you send me a message like "Hey, I've made a program that's best for optimizing things in SMB, and maybe have found an improvement or two. Any interests of working on a new SMB warped/warpless run together?" But that's OK if you insist on doing it by yourself and I wouldn't blame you at all if you've found at least one improvement through your own manually. In fact, I would say "great job, terrific work" if you did the same thing without exhaustive search tools. But like I said, beating a TAS that's done manually with more advanced exhaustive search tools is similar to beating a real-time speedrun with tool assistance. It would be totally cool if the improvements are so great that speak for themselves, but in this run, only 4-4 and it looks almost no different to my previous TAS. And I wouldn't use the word "steal" if not for the fact that for SMB, any improvement could mean the very last (and you know that), and I do believe that you knew (maybe not for sure, but to a certain degree) that submitting this could potentially destroy me and Mars608's work if it weren't for the new rule of "entertainment also counts as an improvement", since there could be no other improvements to this project (or at least you couldn't find any, and I never claimed to have "more improvements" before your submission), but you submitted it anyway. I never blamed you on this, and I'm not blaming you right now, but it's just something I think you need to know. This is not a criticism, but only my suggestion to your future projects. Reclaiming my points in the previous posts (please don't misrepresent them in a way like I'm minimizing this run): * Improvements found by human TASers and by exhaustive search tools don't mean or feel the same. For example, I was much more impressed when Mars608 had found the fast Fireflower technique in 1-4 than learning some exhaustive search bot did the same thing. * Optimizations done by exhaustive search tools don't require any imagination because that's their job. * Using exhaustive search tools could beat (or at least tie) any projects in theory, as long as the program is powerful enough. That's why I don't find it a fair competition (if it has to be a competition). * Bots should be used where human TASers are weak at, as a "helper tool", to strengthen human creativity rather than destroying it. That's why I think there are much better places and games to practice such tools so that it may lead to improvements which have more meaning and more human creativity involved. * If improvements only come from small optimizations through exhaustive search tools, cooperation with previous TASers of the project makes more sense than "stealing" the project with more advanced tools and claiming the new run done by one's own.
Evil_3D wrote:
Why did you guys try to talk about this in the topic before? these situations make it appear that many of the SMB TASers have little communication between them and ends in a drama in the workbench at the point that they end up talking about Humans vs. Robots
That's because I didn't know MrWint was also working on SMB projects (how would I know that?). If I did, I'd totally like to communicate. I did announce in our SMB page that me and Mars608 were working on a new warpless project about two months ago.
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
Quite a few people detest bots but the way I see it is this. Bots can do things that people are not very good at. Bots are a complement and a productivity improver, not replacer. They can't answer the "why" question.
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
I admit I'm not innocent in creating this situation. My main motivation for creating these is discovering how things work and how to exploit them, not beating somebody else's time. These submissions are just a nice closing point to show these discoveries. That's why I'm usually not announcing future runs, I usually don't start out with the intention to submit any particular run. Also, I may just lose interest and abandon it at any point, and I don't want to create pressure for myself to deliver given that I do these for fun and recreation. This is not the first time it brought me into this situation. We couldn't have prevented it here, but we could have worked out something in advance, instead of after my submission. Also, I'm sorry for creating some drama here, the inaccuracy of HappyLee's claims may have gotten to me a little too much there. I'll try to set the record straight in a more productive way going forward.
HappyLee wrote:
Actually you don't need to figure that out by yourself (in cases like 1-3 floor clip) when the solution is already there, since I've already figured it out back in 2012, and if you imitate or study my inputs or my movements, you get almost the same thing (I'm not saying that's exactly what you did, but it's true and the easy way). You can say that you didn't learn anything from my inputs or my movements, but I don't believe that you can create the same run without the tricks I found in 2012 and before that. The fact is, this run shows no new technical improvement except the fast Fireflower technique in 1-4 and fast jumping in the wall in 4-4 (which are both found through exhaustive search), and I think the way you say you figured most of this run out manually is somewhat an insult to my previous warpless run, as if you pretend it doesn't exist. Again, it doesn't take any imagination at all to replicate what's already done before (judging from the results).
It's entirely true that most sections of the run use techniques that were already used in 2012 by your previous run. And of course I knew about these techniques, and I'm not claiming to have "discovered" them on my own. I did disect how they worked, and whether they can be improved significantly, but most came back negative. This is not what I'm claiming is new and exciting about this run, the actual improvements over the previous run is what's important, in world 1, 4-4, and 6-4. I had mentioned before that the 1-4 technique was in fact not found using the tools, but by hand, just like you apparently found it. So your claim that it's inherently less impressive, or that less creativity or imagination went ito it, doesn't actually apply. The wall clip technique in 4-4 is a bit more involved than you give it credit for as well. It is not only about clipping through the wall as quickly as possible, this can in fact be done even faster than shown in this submission. It is also about the relative scroll position of the screen, which matters for the ending cutscene, the correct alignment is necessary to save the decisive frame, so you need to balance going as fast as possible with not scrolling the screen too much. While the actual inputs that brought these extra pixels to make it work were computed by the tool, the planning that went into making the improvement work was not, and this is the part you were not seeing. This is not about whether improvements found by automatic tools are inherently less impressive than those found by humans, I respectfully disagree with your opinion there but that's not the point. You are crediting the tools too much with these discoveries and are ignoring the human effort that went into this, the same effort you spent on your improvements. They are a "helper tool" just like you describe, and I understand that you wouldn't need them for SMB with all the experience you have, but they were useful to me. What they did not do though is finding these improvements by themselves.
Expert player (2453)
Joined: 12/23/2007
Posts: 822
MrWint wrote:
I did disect how they worked, and whether they can be improved significantly, but most came back negative.
That's what I thought, and it wouldn't be a problem.
MrWint wrote:
I had mentioned before that the 1-4 technique was in fact not found using the tools, but by hand, just like you apparently found it.
I saw your code on Github and you ran "Collect fire flower in 1-4 as big Mario" through your tools? Or did I misinterpret your code? Edit: OK, my mistake. I just saw you said that you "figured this out on a piece of graph paper". To me, to be honest, is a bit difficult to understand and believe. How do you figure something like that on a paper, when the timing of a Fireflower is also important? And what about your code? Why do you have to run it through your tools if you'd already figured out that yourself?
MrWint wrote:
The wall clip technique in 4-4 is a bit more involved than you give it credit for as well. It is not only about clipping through the wall as quickly as possible, this can in fact be done even faster than shown in this submission. It is also about the relative scroll position of the screen, which matters for the ending cutscene, the correct alignment is necessary to save the decisive frame, so you need to balance going as fast as possible with not scrolling the screen too much. While the actual inputs that brought these extra pixels to make it work were computed by the tool, the planning that went into making the improvement work was not, and this is the part you were not seeing.
That's actually true. I already knew the relative scroll position part back when I was making "maximum coins" TAS and re-tested 4-4 just to see if there are improvements. I just assumed you've add that to your code as well, not just to maximize horizontal position but actually minimize Mario's screen position as well (or simply maximize "screen camera position ($71C)"?). Or am I mistaken about that as well? I remember reading your code, such as in 7-1, you've printed out the entire map through your code; such as in 8-4, you've analyzed speed-up of every scene, and also the wall jump and turn-around movement through your tools. And there are more, so I assumed that you've run everything (except when there's an enemy involved) through your exhaustive search tools. It seemed to me that your tools were doing all the work testing all things and you just put those pieces together. I don't remember reading 4-4 so I don't know exactly how you did that. But your points of more human activity was involved in finding improvements in 1-4 and 4-4 shocked me, since I assumed your exhaustive search tools did mostly everything. Sorry if I misinterpreted anything about your work.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
No, you did not misinterpret the code, most of the final inputs for the precise movement sections of this run were created by it, including the fire flower collection in 1-4. However, the technique necessary to save the frame rule was discovered before that, by hand. You can actually see that in the code, I specifically added constraints to it so that it only considers running jumps (here), since I knew this is what's needed, and an additional contraint on when to start jumping (here). The state space of Mario's movements is quite large and the tools are not that powerful (or my RAM is too small), without figuring these things out first it wouldn't have been possible to compute the final inputs in the first place. You can find these manual restrictions in a lot of places throughout the code, the tools are just way less powerful than you might think. The same goes for most other movements, also the ones that are no improvements to you previous run. I figured out what to do manually first, before having the tool find the optimal inputs. This is what I was referring to earlier, and I'm sorry for causing confusion here, I didn't mean it to sound like I discovered these ignoring your previous run completely. Regarding the screen position in 4-4, the magic relative screen position (that's RAM address 0x03ad in-game) to aim for is exactly 0x92 (code), which scrolls the left screen position (RAM address 0x71C) to 0xec before the scroll lock is applied, saving the necessary frame in the ending cutscene. The goal was to move mario as far forward as possible without exceeding that screen scroll number. And the best possible movement was just good enough (as in if couldn't be even a single subpixel worse) to make it work. Yes, the code contains the entire map for most stages, as it's easier to work with like this, but each calculation only ever uses a small part of it. I used lua scripts to format Mario's state into the format the program understands, so that I could just copy and paste a state into the program and have it work from there, and for that it's important that the position is absolute, so I need the whole level to be represented. Dumping the level data from the rom was fairly straight-forward, using a python script to convert the memory contents into readable maps, so it was easier just to import the whole thing instead of worrying about which parts you actually need.
Expert player (2453)
Joined: 12/23/2007
Posts: 822
Wow that was impressive. You've really worked most improvements out yourself. My apologies for assuming that your tools did more work because I didn't learn many details about those improvements through your submission text. If you really did succeed getting Fireflower in 1-4 in running speed before using exhaustive search tools, I take my hat off to you. I didn't know exactly how you did that since you didn't mention it in your submission text, and still I think you're missing the key to getting it in running speed in your explanation. But whatever, I'll just believe that you did. The 4-4 case is a lot like I assumed, that you've figured out the relative screen position you need to load the Firebar and for the endscene first, then run your tools to find the best possible movement in the wall. I worked out the screen position part also, but the piece I was missing to solve this puzzle is that you can jump earlier in the wall to land a frame earlier. I think that particular piece that I missed was solved through your tools, but whatever, it's still very amazing that you could solve the entire 4-4 puzzle on your own, since I know it takes lots of knowledge and calculation, and yes, the movement in the wall couldn't be even a subpixel worse, and the movement between the Firebar and the axe couldn't be half a pixel worse. So congratulations again for solving a puzzle that's just barely solvable.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).
Skilled player (1019)
Joined: 7/24/2013
Posts: 175
I agree my submission text didn't explain this too well, I wrote it mostly for people not intricately familiar with the game's mechanics to understand what's going on, and these details seemed arbitrary and not very helpful in this regard. In retrospect, I should have had more emphasis on how the improvements worked in greater detail and less in explaining the game and this run in general, which of course was no new information for you. I'm glad we could resolve this debate in the end though, and I'd like to apologize that it got somewhat heated in the middle of it. Speaking of barely solvable, for this one which was solvable, there were many that weren't. The one annoying me most was the pipe entry in 8-4 after the pipe clip, which is exactly one subpixel short of making it a frame earlier. What makes this especially annoying is that you can make it to the pipe a frame early, but you can't press down to enter it if you do, since you can't press down and right at the same frame while on the ground. You probably knew that, I just wanted to rant about it.
Expert player (2453)
Joined: 12/23/2007
Posts: 822
I'd also like to apologize for it got somewhat heated and for some of my language. Probably very few people could appreciate your work and those improvements more other than me.
MrWint wrote:
The one annoying me most was the pipe entry in 8-4 after the pipe clip, which is exactly one subpixel short of making it a frame earlier. What makes this especially annoying is that you can make it to the pipe a frame early, but you can't press down to enter it if you do, since you can't press down and right at the same frame while on the ground. You probably knew that, I just wanted to rant about it.
Yes, I knew that in 2010 when I was improving SMB TAS, and I got a bit disappointed also. I even did some research whether it's possible to enter the pipe while keeping the running power of holding right through other controller inputs, but I guess it's just not possible. Same thing also applies to SMB any% 1-1 and 4-2, where you're just 1 frame away from saving a framerule but probably just not possible. Before your submission, I assumed the same thing for warpless 4-4. You've proved that I can be wrong sometimes. But now I got more confidence in SMB any% 1-1, 4-2 and 8-4, as your tools have proved that there isn't room for more improvements through mere optimization of existing movements.
Recent projects: SMB warpless TAS (2018), SMB warpless walkathon (2019), SMB something never done before (2019), Extra Mario Bros. (best ending) (2020).