Goals
- Change the Princess's Speech
- Apply Fireflower palette to Mario
- Animate Mario's shoot animation (and play the fireball sound effect)
- Have the princess change to the crying animation
- Ensure the rest of the ending plays out without issues
What is ACE for the NES?
ACE (Arbitrary Code Execution) is the act of Executing code that was not created by the developers of the game (at least in this context). Normally, the PC (Program Counter) sits in ROM, executing code, as ROM cannot be changed. Meaning adding your own custom code to the console is impossible...
If it wasn't for RAM. Unlike the ROM, RAM can be changed, as anything the game needs to remember for later is stored here. ROM is just a bunch of bytes, RAM is also just a bunch of bytes. If the PC was "tricked" into executing RAM, it would interpret the values that were stored for later as instructions to execute. Usually, this would cause a bunch of garbage to be executed, eventually leading to a crash. But if we were to do specific things in the game, we can manipulate what values are stored in RAM, and therefore what instructions would be executed. For ACE to work, you need 2 main things:
- A way to write instructions in RAM
- A way to execute the written instructions (Aka move the PC to RAM)
Limitations
Obviously, there are some limitations with changing the ending of a video game arbitrarily, especially on a console from the 1980's, and I needed to work around these if I was going to have this work on unmodified hardware. One of the big limitations for any ACE TAS is the fact that ROM is read only (As stated in the name (Read Only Memory)) It makes sense as to why this is, but for the purposes of ACE, it means only certain pre-existing routines can be used, specifically ones that return BACK to the routine that invoked them (subroutines). Normal routines can't be used without losing control, as the PC (Program Counter) will never be told to return to RAM. A most of RAM cannot be manipulated to the level we need it to be, meaning just using normal gameplay to write all the code necissary for the entire modified ending would be impossible. Meaning I would need to first, write code to allow me to write more code. A pretty significant limitation with the way Super Mario Bros 3 stores controller inputs is that it automatically masks out normally impossible D-Pad input combinations (left + right, and up + down). This is an issue as this means I lose access to about half of the instructions I could normally use. To fix this, I used both top 4 bits of the P1 and P2 controller inputs (A, B, Select, Start) and combined them together to make a byte (with P1 being the top 4 bits, and P2 being the lower 4 bits) My system for writing what I needed to write in RAM was as follows:
- Read address to write to
- Read how many bytes to write
- Read the bytes to write
Using this, I was able to write anything I wanted, anywhere I wanted, meaning it was only a matter of time before I recreated all the necessary parts of the ending sequence...
Console Verification
I have verified this does work on an unmodified NES, and plays back with (at least as far as I can tell) A 100% success rate. I used the TAStm32 for playback, and cannot guarantee it will playback using a different replay device.
Credits
Most of the credit for the Inspiration for this TAS, along with the setup for this TAS goes to
lord_tompa.
Samsara: There's a lot to unpack, here.
The most generous description I can give to this run is that it feels like an ACE test. An experiment, a learning experience, a "Hello World!" if you will. A rudimentary payload of two ideas ripped wholesale from the existing published run: The "NES Console" framing device and changing Peach's dialogue at the very end. If this is all stuff you learned over the process of making this run, cool! I'm glad you learned something! I hope you keep playing around in this space and learning new things!
I also hope that you learn not to submit something like this again!
I'm not really sure what your motivation for submitting this was, but I'm going to assume it's the sole good faith reason I can think of: You don't understand what submissions mean here. Submissions are intended for publication to both the site and the YouTube channel, which means they're put in front of more people and put through more scrutiny as a result. Submitting this implies that you see this as an improvement to
the published run that you took inspiration from, which is quite literally the fifth highest rated run out of the several thousand we have published. I sincerely hope you didn't intend this to be an improvement of that run, because to be blunt this is a massive step backwards in every possible way except one, and that's the 11000+ frames of input you lifted directly from it without co-authorship credit. Granted, I don't think Lord Tom would want his name attached to... this.
I won't echo the sentiment that this is a domestic violence joke, because I don't personally think it is, or at least I really hope it isn't because I'd like to think better of new submitters. What I will say, though, is that it should be telling that a majority of our audience thought it was. They're not wrong to! There's no setup, there's no joke, there's no punchline. There's nothing. There isn't even an actual fireball, only a mildly implied one. Anything that could have swayed people away from thinking "Does this guy really expect us to laugh at a man attacking a woman for literally no reason and making her cry?" is just absent.
I genuinely hate that I have to say this, it's something I've been avoiding in judgements over the last few years, but this doesn't have nearly enough effort to warrant publication. Not in the input (since the entire setup was lifted from Lord Tom), not in the payload (the concepts seen in this run were also lifted from Lord Tom), not in the submission text (lord_tompa? really???), and ESPECIALLY not in the attempt at comedy. Even if the content was acceptable, there is so, so much more that could be done here, and we know that for a fact because of the published run.
Again, for something you probably made to further your interest in ACE, the nothingness is fine. Perfectly acceptable as a personal project, even though I and the rest of the site question your comedic standards! But this is something you decided to put in front of an audience for judgement, in hopes of putting it in front of a larger audience. Every submission is like that, every submission is going to be like that. That's not to say that this wouldn't have bombed just as hard outside of a submission, but at least the most prominent advice you would have gotten there is "you probably shouldn't submit this" and not just one collective, disappointed "bruh".
If you take anything away from this other than "this isn't funny and never will be", let it be that you should keep TASing. Whether it's just for yourself, or meant for others to see, I don't think anyone here would want you to stop outright. I mean, obviously, try actual jokes and not "hitting women funny XD XD XD" from now on, but please keep going and improving for as long as you enjoy it.
Rejecting.