tl;dr: in this thread I'm a) listing all the times where the UberASMTool example code has confused newcomers, and b) presenting a fix that will hopefully be implemented in the future.
UberASMTool is great, but as with everything in SMW hacking, there's a bit of a learning curve. The greatest hurdle for newcomers is the fact that it comes with example code.
There's a file with a line of code that increments the player's powerup state every frame - making the player cycle through all 252 glitched powerup states - and a default entry in list.txt that makes that code run in level 105. It's there for demonstration purposes and it's meant to be removed, but many people don't know enough about the tool to figure that out. They don't know how to get rid of the effect, often mistake it for a bug, and make posts in the forums or in Discord asking for help.
The problem is of course easy to fix when you encounter it, but if you don't know what's going on it looks like a serious glitch. And if you don't know what's going on but try to help, you might give unhelpful advice like "guess you gotta start your hack over" or "I don't know, just don't use level 105 and that seems to work".
A history lesson
This problem is not one person's fault - not the user's, and not even that of UberASMTool. As far as I can tell, it started more than a decade ago, in 2010, with Ersanio's levelASM, a patch that was the predecessor to uberASM and UberASMTool.
levelASM had example code in level 105 that would change the background color depending on the player's X position in the level, so any time you moved, the background would flash. People got confused.
Some time in mid-2010, levelASM received an update that changed the example code so that half the time (alternating every few seconds), all inputs were disabled. This was arguably more perplexing and subtler to notice, and harder to connect to levelASM. People got confused.
In 2012, the first version of uberASM (then still in patch form) was released by p4plus2. As far as I can tell, it didn't include any example code (the version currently in the Patches section still doesn't.) People didn't seem to get confused.
In 2016, UberASMTool was released by Vitor Vilela and quickly became the standard. It came with example code again: the now-famous
All the times people got confused
These are all the instances I could find of people asking for help because they mistook the example code for a bug. (As if anyone needed evidence, but it's kind of fun making and seeing such a long list.) If you find any more, let me know! (seriously)
2010-05-13 (flashing background color)
2010-05-29 (flashing background color)
2010-06-25 (disabled movement)
2011-05-20 (disabled movement)
2012-05-12 (disabled movement)
2016-07-27 (glitched powerup states)
2017-12-16 (glitched powerup states)
2018-06-19 (glitched powerup states)
2018-07-28 (glitched powerup states)
2018-08-31 (glitched powerup states)
2019-02-05 (glitched powerup states)
2019-02-27 (glitched powerup states)
2019-03-26 (glitched powerup states)
2019-04-06 (glitched powerup states)
2019-04-18 (glitched powerup states)
2019-06-11 (glitched powerup states)
2019-06-18 (glitched powerup states)
2019-07-29 (glitched powerup states)
2019-10-04 (glitched powerup states)
2019-10-27 (glitched powerup states)
2019-12-24 (glitched powerup states)
2020-04-09 (glitched powerup states)
2020-05-23 (glitched powerup states)
2020-07-20 (glitched powerup states)
2020-08-27 (glitched powerup states)
2020-11-08 (glitched powerup states)
2021-01-21 (glitched powerup states)
2021-03-28 (glitched powerup states)
2021-09-17 (glitched powerup states)
2021-11-17 (glitched powerup states)
2021-11-26 (glitched powerup states)
2021-12-17 (glitched powerup states)
What to do about it?
Again, this is not the fault of any one person. In fact, it's arguably due to the success of UberASMTool, and the fact that it's otherwise very easy to use: it's become popular, and many other resources have come to rely on it. This means that people who want to use (say) Screen Scrolling Pipes are only using UberASMTool as a means to that end, so they aren't likely to get very familiar with the tool. They only do what the other resource's instructions say to do, and if those don't mention removing the example code, they get confused.
Over the past decade many people (including me) have argued that this confusion is entirely preventable, and have asked for the example code to be replaced with something more obvious or removed entirely. For this C3, I decided I'd try and make this update myself.
I (and many others) have been imagining code that uploads text to layer 3 saying something like "this is a test message, UberASMTool works, you can remove test.asm from the list". However, that wouldn't be entirely fool-proof: if someone was messing with the layer 3 position or using layer 3 ExGFX that aren't letters, they'd still be perplexed.
I decided to go the easy route and do two things:
I have no business working on and submitting UberASMTool versions, so I didn't submit this change directly to the site. Instead, I created a pull request in Vitor's repository. Vitor has approved of the changes and merged them in, and I assume the next version submitted to the site will include them. And that should be the day, dear to our hearts as Incio may be, where we put the INC $19 confusion behind us once and for all.
well that was a rant and a half for very little content to show
UberASMTool is great, but as with everything in SMW hacking, there's a bit of a learning curve. The greatest hurdle for newcomers is the fact that it comes with example code.
There's a file with a line of code that increments the player's powerup state every frame - making the player cycle through all 252 glitched powerup states - and a default entry in list.txt that makes that code run in level 105. It's there for demonstration purposes and it's meant to be removed, but many people don't know enough about the tool to figure that out. They don't know how to get rid of the effect, often mistake it for a bug, and make posts in the forums or in Discord asking for help.
The problem is of course easy to fix when you encounter it, but if you don't know what's going on it looks like a serious glitch. And if you don't know what's going on but try to help, you might give unhelpful advice like "guess you gotta start your hack over" or "I don't know, just don't use level 105 and that seems to work".
A history lesson
This problem is not one person's fault - not the user's, and not even that of UberASMTool. As far as I can tell, it started more than a decade ago, in 2010, with Ersanio's levelASM, a patch that was the predecessor to uberASM and UberASMTool.
levelASM had example code in level 105 that would change the background color depending on the player's X position in the level, so any time you moved, the background would flash. People got confused.
Some time in mid-2010, levelASM received an update that changed the example code so that half the time (alternating every few seconds), all inputs were disabled. This was arguably more perplexing and subtler to notice, and harder to connect to levelASM. People got confused.
In 2012, the first version of uberASM (then still in patch form) was released by p4plus2. As far as I can tell, it didn't include any example code (the version currently in the Patches section still doesn't.) People didn't seem to get confused.
In 2016, UberASMTool was released by Vitor Vilela and quickly became the standard. It came with example code again: the now-famous
INC $19
, from which the glitched player sprite gets its nickname "INC $19 Mario". I don't think this is where joke originated though, because cycling through powerups had always been a somewhat common thing to do to test if code runs, and it was Ersanio who made the GIF of it.All the times people got confused
These are all the instances I could find of people asking for help because they mistook the example code for a bug. (As if anyone needed evidence, but it's kind of fun making and seeing such a long list.) If you find any more, let me know! (seriously)
2010-05-13 (flashing background color)
2010-05-29 (flashing background color)
2010-06-25 (disabled movement)
2011-05-20 (disabled movement)
2012-05-12 (disabled movement)
2016-07-27 (glitched powerup states)
2017-12-16 (glitched powerup states)
2018-06-19 (glitched powerup states)
2018-07-28 (glitched powerup states)
2018-08-31 (glitched powerup states)
2019-02-05 (glitched powerup states)
2019-02-27 (glitched powerup states)
2019-03-26 (glitched powerup states)
2019-04-06 (glitched powerup states)
2019-04-18 (glitched powerup states)
2019-06-11 (glitched powerup states)
2019-06-18 (glitched powerup states)
2019-07-29 (glitched powerup states)
2019-10-04 (glitched powerup states)
2019-10-27 (glitched powerup states)
2019-12-24 (glitched powerup states)
2020-04-09 (glitched powerup states)
2020-05-23 (glitched powerup states)
2020-07-20 (glitched powerup states)
2020-08-27 (glitched powerup states)
2020-11-08 (glitched powerup states)
2021-01-21 (glitched powerup states)
2021-03-28 (glitched powerup states)
2021-09-17 (glitched powerup states)
2021-11-17 (glitched powerup states)
2021-11-26 (glitched powerup states)
2021-12-17 (glitched powerup states)
What to do about it?
Again, this is not the fault of any one person. In fact, it's arguably due to the success of UberASMTool, and the fact that it's otherwise very easy to use: it's become popular, and many other resources have come to rely on it. This means that people who want to use (say) Screen Scrolling Pipes are only using UberASMTool as a means to that end, so they aren't likely to get very familiar with the tool. They only do what the other resource's instructions say to do, and if those don't mention removing the example code, they get confused.
Over the past decade many people (including me) have argued that this confusion is entirely preventable, and have asked for the example code to be replaced with something more obvious or removed entirely. For this C3, I decided I'd try and make this update myself.
I (and many others) have been imagining code that uploads text to layer 3 saying something like "this is a test message, UberASMTool works, you can remove test.asm from the list". However, that wouldn't be entirely fool-proof: if someone was messing with the layer 3 position or using layer 3 ExGFX that aren't letters, they'd still be perplexed.
I decided to go the easy route and do two things:
- rewrite list.txt to be tidier and easier to understand even if you haven't read the readme (unlike the readme, list.txt is the only place you're guaranteed to open).
- include example entries in list.txt for level, overworld and game mode code, but leave their corresponding code files essentially empty so they have no side effects. Arguably this can still be confusing if you add an entry for level 105 without removing the existing one, but UberASMTool catches that, and I felt it was a good idea to include example entries so people know how they look like and where to put them.
I have no business working on and submitting UberASMTool versions, so I didn't submit this change directly to the site. Instead, I created a pull request in Vitor's repository. Vitor has approved of the changes and merged them in, and I assume the next version submitted to the site will include them. And that should be the day, dear to our hearts as Incio may be, where we put the INC $19 confusion behind us once and for all.
well that was a rant and a half for very little content to show