5 ms·
Bad Apple but it's played inside Super Mario Bros
- baobun 1y agoSuper cool. Is it mentioned anywhere how big the payload is? How many button presses? Are the audio samples "streamed" or does it all fit in NES RAM?
- larsiusprime 1y agoThere’s a full write up. Audio is streamed as button presses.
- gregdeon 1y agoThe entire TAS file takes about 16 MB, far more than the 4 KB of RAM on the NES. During the audio + video playback, the TAS is streaming via the controller by making inputs roughly 500 times per frame (15 kHz).
- ninjin 1y agoIndeed, if you want to see what is possible with only a Famicom (or NES) itself you can have a look at Little Limit's incredible Bad Apple "port" [1]. This recording is from an emulator [2], but I know from personal experience that it plays perfectly fine on my "New Famicom" (HVC-101). This is not to detract from how amazing the posted ACE is, but it is indeed different in terms of data limitations. [1]: https://littlelimit.net/bad_apple_2_5.htm https://littlelimit.net/bad_apple_2_5.htm [2]: https://www.youtube.com/watch?v=eNU1lzr_m4Q https://www.youtube.com/watch?v=eNU1lzr_m4Q
- lll-o-lll 1y agoInteresting. The visuals, presumably somewhat hand crafted, look infinitely better in this rendition. The sound is much less compelling, however.
- korhojoa 1y agoI like this version. https://youtu.be/WPUYjDNks9Y https://youtu.be/WPUYjDNks9Y It's impressive what can be done if a lot of effort is put in.
- ninjin 1y agoIt really is impressive, but it is also fair to point out that it uses the MXM-1 mapper which only came into existence in 2022 [1]. I find it pointless to argue whether it is "cheating" or not as the technology it uses was used for other consoles at the time and it is fun to see new mappers like this, but it is, again, very different compared to keeping it within the realm of original Famicom/NES mappers and limits. [1]: https://somethingnerdy.com/unlocking-the-nes-for-former-dawn https://somethingnerdy.com/unlocking-the-nes-for-former-dawn
- LocalH 1y agoThe submitted run here is also technically "only a Famicom (or NES)". The only difference is the rate of input from the controller to feed the data. Outside of the need to start in N-1 (which can be done on hardware with unmodified games by booting up SMB3 and then hotswapping to SMB1), if you feed these same controller inputs, frame by frame, to a real NES with no modifications, using an unmodified retail copy of SMB1 (and SMB3), this will work. The only "modification" is wholly external to the system, and is necessary to feed the controller inputs at a superhuman rate. The SMB1 (and SMB3) code is the exact same code Nintendo shipped on mask ROMs, and the Famicom (or NES) is also completely unmodified.
- ninjin 1y agoThis is art, so arguing about exact boundaries is pointless in my book. But can we at least agree that there is rather a big difference between "This is something that plays from a standard cartridge with a standard mapper on the Famicom/NES you have from your childhood" and "This is something that plays from a standard cartridge with a standard mapper on the Famicom/NES you have from your childhood with a modified superhuman-speed controller to in real time feed 16 times the amount of data of the largest cartridge ever released for the system"?
- 100th_Coin 1y agoHey, I'm the TASer who put this run together. This was 5.8 million inputs. I share the full assembly code in the tasvideos writeup: https://tasvideos.org/8991S#HereSTheAsmCode https://tasvideos.org/8991S#HereSTheAsmCode To summarize what I put in the writeup, the 7-bit PCM audio was streamed in at approximately 25 Khz, (reading from the controller and writing to address $4011 every 71 CPU cycles.) while occasionally dipping to 9 Khz while streaming in the graphics data.
- voidUpdate 1y agoyooo, its funny cartridge swap guy!
- temperceve 1y agoI'd love a laymane overview of what you've done here
- GrantMoyer 1y agoI'm not the author, but these video-in-game projects typically work with a few phases: 1. Get the game into a specific state by performing specific actions, moving to specific positions, performing specific inputs, etc. so that a portion of the game state in RAM happens to be an executable program. 2. Jump to that executable code such as by corrupting the return address in the stack with a buffer overflow 3. (optional) The program from 1 may be a simple "bootstrap" program which lets the player directly write a new, larger program using controller inputs then jumps to the new program. 4. The program reads the video and audio from the stream of controller inputs, decodes them, and displays them. The encoding is usually an ad-hoc scheme designed to take advantage of the available hardware. The stream of replayed inputs is computed directly from the media files.
- LocalH 1y agoSpecifically, this TAS abuses the fact that SMB doesn't clear RAM on bootup to use SMB3 to write $16 to the "continue world" RAM location, and then hotswaps to SMB1 to start the game in World N-1 which makes the rest of the TAS possible. If you download the TAS and use it with SMB1 on an emulator, the included base savestate will already have $16 in that RAM location, for convenience. The main HN link for this submission has the full technical writeup.
- atulvi 1y agocan this be done on real hardware with a modified controller?
- bombcar 1y agohttps://www.youtube.com/watch?v=OJXxmD_Qk2o https://www.youtube.com/watch?v=OJXxmD_Qk2o They use a modified ROM to set the memory state, but that could be done with SMB3 manually, apparently.
- flykespice 1y agoAh bummer, I wanted to see the authentic experience of the dude filming himself swapping catridges to setup RAM and start TAS playback... :(
- adzm 1y agohttps://www.youtube.com/watch?v=OJXxmD_Qk2o https://www.youtube.com/watch?v=OJXxmD_Qk2o This is a video of it running on a console, though I'm uncertain how the inputs were provided
- trenchpilgrim 1y agoUsually TASes use a modified controller with wires hooked up directly to the controller's circuit board.
- notpushkin 1y agoWouldn’t be much of a tool-assisted speedrun if it wasn’t using any tools, would it? :-)
- dormento 1y agoBehold the TASbot https://tasvideos.org/TASBot https://tasvideos.org/TASBot > TASBot is best described as a special R.O.B. robot outfitted with Legos to hold a custom circuit board that can exactly mimic the behavior of a video game controller. TASBot can play games on real video game consoles with superhuman abilities, usually leading to game breaking glitches in front of live audiences.
- userbinator 1y agoAfter checking each of the 256 cells, the cell with the lowest difference is chosen. This is essentially the fundamental operation of a vector quantizer codec, which was popular in the early days of lossy video compression due to its low processing requirements. The fact that this term doesn't appear in the article means the author has independently discovered and reinvented this theory, which is itself quite impressive.
- flykespice 1y agoThose kinds of things can be figured with intuition, and it's more productive this way than spending time looking through academic articles online
- mbStavola 1y agoI thought the audio was just overlayed on top, but it was streamed in via the controller. It sounds AMAZING, incredibly even on the console!
- jofzar 1y agoSame, I was like "oh shame it's audio is overlayed" then realized it wasn't. Amazing.
- srcoder 1y agoAwesome!!! Could it run doom?
- alex-moon 1y agoThere is an amazing video of a similar exploit in Pokémon Yellow where they basically run a bunch of different games: https://youtu.be/Vjm8P8utT5g?si=8N0Xh-VOq_gqHJ4z https://youtu.be/Vjm8P8utT5g?si=8N0Xh-VOq_gqHJ4z
- mrguyorama 1y agoSee https://www.youtube.com/watch?v=tLqU8qDkOZE https://www.youtube.com/watch?v=tLqU8qDkOZE @ 13:35 TASbot uses ACE to take over pokemon red running in a Super Nintendo Super Gameboy, then takes over the super nintendo itself, then streams twitch chat through the controllers to display on screen.
- p0w3n3d 1y agoit sounds better, more 8-bity to me, than the original, especially the bass
- crazygringo 1y agoI've read the post but I still have no idea what this is. Where is the data coming from? Why does it involve playing part of SMB to start with? Besides the sprites used, what does this have to do with SMB at all? How is this different from just a custom ROM that would play this music video? Could you even fit this much data into a ROM? I feel like there's a bunch of context you need to understand what this is about, and I clearly don't have any of it. And the "objectives" list at the top isn't helping ("1. Do a little tomfoolery 2. Execute arbitrary code..."). What are the actual parameters of this challenge, to understand what is actually being achieved? Can anybody here help explain? Edit: thank you so much for all the replies! Now I get why this is wild.
- BuildTheRobots 1y agoMy understanding is that they're glitching the game to inject data into memory, in this case processor instructions. And then they use another glitch to jump to and execute that code. No modifications needed to the hardware or ROM, you're just being extremely selective about how to play the game to cause memory to get flipped. This video is done by hand and explains a bit more about how and why it works: https://www.youtube.com/watch?v=hB6eY73sLV0 https://www.youtube.com/watch?v=hB6eY73sLV0
- dlcarrier 1y agoThere is a community of speed runners, who try to reach goals in video games as fast as possible, either with or without using glitches in the game, sometimes by hand and sometimes with tools, including tools that completely automate the entire process. The goals are usually related to completing the game or portions of the game, often as quickly as possible, as thoroughly as possible, or while doing as little as possible. There's online forums for posting speed-running accomplishments and challenging others' accomplishments. I'n this case, someone used the tools for automated speed running, to execute a glitch in SMB that allows for arbitrary code execution, then entered and ran a program that plays a Bad Apple music video, all with controller input. This is posted as a speed run with an accomplishment of playing the video. A custom cartridge could be made to make a Bad Apple music video, but this is showing off a way to play the video using only SMB cartridges. The data has to fit into RAM, which is much smaller than a tricky cartridge ROM. The music and graphic data is streamed as controller inputs, but the rest is done in RAM, using some data already in the SMB cartridge for video output, due to the low bitrate of controller input but also because the video processor can't display directly from RAM.
- LocalH 1y ago(2024), btw. Not that it's any less impressive. I have one question, as a general game hacker (mostly Guitar Hero/Rock Band) who also has a basic 6502 background from the C64. I wonder if there's any way to abuse input on an unmodified game to manage to poke $16 into $07fd without needing the SMB3 bootstrap. I don't know the SMB1 code well enough to find the answer to that, although I do know that games like SMW have a strong ability to use enemy X positions to get things set up just right to have the ability to install an arbitrary code and data payload into memory. But 6502 code isn't 65186 code so I'm not sure how much that matters. Port of this to SMAS SMB1 wen :)