How Bad Apple was played inside Super Mario Bros.

  Рет қаралды 74,980

100th Coin

100th Coin

Күн бұрын

In this video, I break down the steps I took to create a TAS of Super Mario Bros. wherein I play the Bad Apple music video on screen.
Here's the TASVideos submission for more information: tasvideos.org/8991S
My game Fantastic Fist can be found here: store.steampowered.com/app/21...
If you want to follow my TAS tomfoolery, join my discord: / discord
All the background music used in this video (If it isn't coming out of the NES) is from my game's soundtrack.
This video makes some assumptions on your 6502 Assembly programming knowledge. Many of the concepts used in this video would require an entire course on 6502 ASM, and I'd probably lose 90% of the audience halfway through explaining all that. Instead of explaining all that, I'll just assume my target audience is people who already have a decent idea of what's going on, and are willing to pause the video to read the comments on my ASM code if needed. (The ASM code can also be found in the TASVideos link)
On top of explaining how the recent Bad Apple TAS was put together, I also show some ways to improve this TAS, such as playing colored videos.
I don't usually make videos with commentary, so if you want to provide feedback in the comments, all is welcome! If the subtle music in the background is distracting, if I sound too monotonous, or if I completely forgot to explain something, I'll keep that in mind for future videos.
Timestamps / chapters:
0:00 Introduction
0:16 Step 0 - Glossary: TAS
1:10 Step 0 - Glossary: ACE
2:03 Step 0 - ACE in Super Mario Bros.
6:14 Step 0 - Writing our own custom code
9:09 Step 1 - The Graphics: Convert the video into "Mario tiles"
11:47 Step 1 - The Graphics: How to draw to the NES background
14:29 Step 1 - The Graphics: Compress the data into "packets"
15:39 Step 1 - The Graphics: The limitations of VBlank
16:56 Step 1 - The Graphics: Create packets and convert into inputs
18:11 Step 2 - The Audio: How to play PCM audio on the NES
21:03 Step 2 - The Audio: Generate the inputs, and give it a listen
23:02 Step 2 - The Audio: Fixing the audio
24:27 Step 3 - Return to Stable Gameplay
25:34 Step 4 - Bonus Audio: Multiple interlace functions
26:06 Step 4 - Bonus Audio: 26.6Khz audio loop
26:38 Step 4 - Bonus Graphics: Larger resolution
27:07 Step 4 - Bonus Graphics: 60 Frames per second
27:21 Step 4 - Bonus Graphics: Color video: Intro
28:10 Step 4 - Bonus Graphics: Color video: Determine color palettes
29:12 Step 4 - DOOM
30:10 Conclusion

Пікірлер: 456
@HBMmaster
@HBMmaster 20 күн бұрын
using this method it might one day be possible to play super mario bros (1993) inside of super mario bros
@buivars
@buivars 19 күн бұрын
Finally making Super Mario Bros. (1993) A mainline game.
@AzamMujahidProductions
@AzamMujahidProductions 19 күн бұрын
toki, nasin seme li suno sina?
@kaogaroo
@kaogaroo 19 күн бұрын
@@AzamMujahidProductions TOKI PONA LESGO
@morphious86.
@morphious86. 19 күн бұрын
Im genuinely curious how it would look if you were to pass a video of smb through it
@ImusingX
@ImusingX 19 күн бұрын
@@AzamMujahidProductions most random toki pona encounter
@Altilt
@Altilt 20 күн бұрын
Oh so we're just casually skimming over coding an emulator?
@chiefhydropolis
@chiefhydropolis 19 күн бұрын
nesalizer:
@hedwig7s
@hedwig7s 18 күн бұрын
Probably a fork tbf but
@evangaming7447
@evangaming7447 18 күн бұрын
if the emulator dosnt need to be visualy and real time accurate and just needs to count cycles it is a good bit easier than a normal emulator that needs to display grqaphics and audio and be properly paced source: ive wrote a super basic emulator for the 6502 that has a subset of insturctions to be turring complete
@100thCoin
@100thCoin 18 күн бұрын
@@hedwig7s Nah, it's an original emulator. I've made a handful of NES emulators before (A lot of the visuals in my video about how Mario 3 loads levels were generated through emulating), though this one was from the ground up so it could have open bus support. Not that it needed open bus support to count cycles, but it was nice to learn more about open bus.
@evangaming7447
@evangaming7447 18 күн бұрын
to clarify its still takes a good bit of time and requires you to be a good programmer
@Keatosis_Quohotos
@Keatosis_Quohotos 19 күн бұрын
This was the smartest way to advertise an indie game
@100thCoin
@100thCoin 19 күн бұрын
I gotta learn how to market my game somehow!
@AgentLazarus
@AgentLazarus 15 күн бұрын
​@@HyperVanilostfu about Touhou nobody cares
@B3Band
@B3Band 2 күн бұрын
I like how he shows maybe 10 seconds of Bad Apple, 3 seconds of his own game, but for some reason showed almost a full minute of a DOOM speedrun.
@NewSchattenRayquaza
@NewSchattenRayquaza 20 күн бұрын
Super Mario is a gateway drug to comuter science
@ChadMcCall42
@ChadMcCall42 20 күн бұрын
How so? Mario travels everywhere by pipe :3
@hw8910
@hw8910 18 күн бұрын
you enter the compsci pipeline
@Tuntor689
@Tuntor689 18 күн бұрын
@@ChadMcCall42i don’t want any child of mine commuting by pipe system
@MintTheProtogen
@MintTheProtogen 16 күн бұрын
Be careful of the Mario pipeline.
@B3Band
@B3Band 2 күн бұрын
I like how he shows maybe 10 seconds of Bad Apple, 3 seconds of your own game, but for some reason showed almost a full minute of a DOOM speedrun.
@appleando752
@appleando752 19 күн бұрын
Any and all video players will play Bad Apple, and anything that isn't a video player will be forced into one so it can play Bad Apple. For being the video equivalent of "Can it run Doom" It is criminal that almost none of these Bad Apple videos and barely any of the comments mention Touhou.
@MintTheProtogen
@MintTheProtogen 16 күн бұрын
I wonder if there will ever be something new, but similar in the future.
@LennyQUMFIF
@LennyQUMFIF 16 күн бұрын
@@MintTheProtogenThere’s some guy on YT Shorts that requested for People to play his Video on the weirdest Devices. Sadly it actually got more popular than Bad Apple, since his Video played on a Times Square billboard… which Bad Apple hasn’t done yet.
@LennyQUMFIF
@LennyQUMFIF 16 күн бұрын
There sadly still isn’t a Video of Bad Apple on a Times Square Billboard… But that gives me an Idea… Bad Apple, on Super Mario Bros, on a hacked NES Mini??
@AgentLazarus
@AgentLazarus 15 күн бұрын
Nobody cares about Touhou
@appleando752
@appleando752 15 күн бұрын
@@AgentLazarus Ah yes. An indie multimedia series with 19 games (31 including spin-offs) that has been going on since 1997, and whose fan game catalog probably surpasses Sonic's. Nobody cares about.
@IrisGalaxis
@IrisGalaxis 20 күн бұрын
I watched until you casually said "so I'll just write a nes emulator". I had to pause there. I just had to. Lmao! So awesome.
@M4XD4B0ZZ
@M4XD4B0ZZ 18 күн бұрын
Just wow
@QuintarFarenor
@QuintarFarenor 17 күн бұрын
especially considering he is already in an emulator to even have that kinda possibility (or a hardware modded nes to make cardrige swapping possible)
@flameofthephoenix8395
@flameofthephoenix8395 10 күн бұрын
@@QuintarFarenor Hm, pretty sure you can swap cartridges on an NES.
@jokerofspades-xt3bs
@jokerofspades-xt3bs 8 күн бұрын
@@flameofthephoenix8395 You don't understand what kind of swapping they are talking about
@flameofthephoenix8395
@flameofthephoenix8395 7 күн бұрын
@@jokerofspades-xt3bs Interesting, I don't know much terminology.
@Alberos
@Alberos 17 күн бұрын
Step 0: Get a Bad Apple video Step 1: Write a NES emulator in C# Step 2: ??? (Hand waving intensely) Step N-2: Profit
@ct3000
@ct3000 19 күн бұрын
"Nes ROMs don't have enough storage for full length PCM music" Should've just made the player spam buttons for the music to play
@Pixelcraftian
@Pixelcraftian 20 күн бұрын
2:11 Hey, look, there I am! :D Incredible stuff!! Can't wait to see what you get up to next :]
@amogaamogus
@amogaamogus 20 күн бұрын
WOW! ITS PIXELCRAFTIAN NO WAYKGJDFGIUIOSUHGSGREGG
@heylloimdave
@heylloimdave 19 күн бұрын
hey look! there you are!!!!!!
@saikitonia
@saikitonia 19 күн бұрын
hmm i can only WONDER who is under the blur....
@prettymuchabandonedaccount9141
@prettymuchabandonedaccount9141 18 күн бұрын
@@saikitonia Yes, I too WONDER that.
@gdplayer1035
@gdplayer1035 17 күн бұрын
hey look, there he is
@OhhCrapGuy
@OhhCrapGuy 19 күн бұрын
Honestly, asking "why" of any arbitrary code execution attack is probably another way of saying "this video wasn't made for me"
@FirstnameLastname-sb3hj
@FirstnameLastname-sb3hj 17 күн бұрын
why is it possible? bugs and oversights!
@alephnull127
@alephnull127 20 күн бұрын
no way, 100th coin voice reveal? hell yeah.
@aktchungrabanio6467
@aktchungrabanio6467 18 күн бұрын
No.
@jc_art_
@jc_art_ 18 күн бұрын
Yes.
@Snidbert
@Snidbert 20 күн бұрын
guys will watch this and think "hell yeah"
@AlbySilly
@AlbySilly 19 күн бұрын
Hell yeah
@fco64
@fco64 19 күн бұрын
Yeah Hell
@radiotomatosauce99
@radiotomatosauce99 18 күн бұрын
I'm girls and I think "hell yeah"
@TheGameBoyss
@TheGameBoyss 17 күн бұрын
Hell yeah
@SireBab
@SireBab 16 күн бұрын
Hell yeah
@guzik1252
@guzik1252 19 күн бұрын
16:00 well guess what? I want math. I want to see dirty and naughty math and nasty assembly code, that's my entertainment
@smob0
@smob0 17 күн бұрын
Instead of using a 1x1 kernel when searching for mario tiles, I wonder if a different shape could be better. Maybe a 3x3 gausian spread could help make some of the edges less jagged. I also like how the piano roll analogy became a reality. Its a sequence of button presses to make music. It's just the the first part of the piano roll builds the piano itself.
@SpringySpring04
@SpringySpring04 19 күн бұрын
This is pretty interesting. As a computer science major and a massive fan of Touhou and programming, this really hits the spot!
@xXBlueSheepXx
@xXBlueSheepXx 19 күн бұрын
The audio playing the NES part is what amazed me the most. Honestly, I was expecting Bad Apple added as SMB custom music
@HappyLeeHL
@HappyLeeHL 20 күн бұрын
Great video. You're absolutely fantastic at what you do. :D
@minirop
@minirop 20 күн бұрын
incredible breakdown, we need more videos that go into the nitty-gritty asm shenanigans 🤩 and as always "why? why not!"
@twingemios5139
@twingemios5139 7 күн бұрын
After taking an assembly class in college these videos actually make sense to me now.
@marlee_goat
@marlee_goat 20 күн бұрын
all of your content is so high quality how arent you more popular ...
@luimu
@luimu 16 күн бұрын
way too niche and technical content to reach mainstream interest
@trulyhuman6227
@trulyhuman6227 15 күн бұрын
Have you been out there? 😂 It's idiocracy....literally. We got to stay together. ❤
@dragonslayerz2220
@dragonslayerz2220 19 күн бұрын
...wrote an emulator, what a madman!
@hexagon_
@hexagon_ 20 күн бұрын
I guessed a lot of how this was done, but going into the details was so fun! I figured you used a black-and-white video because of the color palette limitations, but it's insane how it still just about works with color video. Also, I can't believe you wrote your own cycle-accurate NES emulator as a side-project for this. Insane
@ncrecc6040
@ncrecc6040 20 күн бұрын
30:42 video quality level: pareidolia
@blara2401
@blara2401 13 күн бұрын
The constant back and forth between entry level explanations and _"I wrote an NES emulator"_ level madness is beyond hilarious. Great job !
@emilycurtis766
@emilycurtis766 20 күн бұрын
I had a ton of fun watching this. Incredibly impressed you pulled this off, and even more that you explained it in a way that made sense to me. Normally technical glitch explanation videos fly a bit over my head but I was able to get this one with a minimum of pausing and rewinding.
@Lemony123
@Lemony123 19 күн бұрын
This is unironically the first video I watch in 1440p
@LucasBNagy
@LucasBNagy 17 күн бұрын
that intro to the audio chapter, fucking great so seamless
@ItsPietroFelix
@ItsPietroFelix 19 күн бұрын
i thought you peaked at beating mario 3 in the title screen but GOD DAMN THIS IS FIRE
@MTR-Journeys
@MTR-Journeys 20 күн бұрын
Bad Apple is the new Doom
@user-dh7vk9zn2i
@user-dh7vk9zn2i 18 күн бұрын
Bad apple is just doom easy mode
@TheGameBoyss
@TheGameBoyss 17 күн бұрын
They coexist
@LennyQUMFIF
@LennyQUMFIF 16 күн бұрын
Nah, Bad Apple is Doom’s Japanese Cousin. I am aware that someone made Bad Apple in DooM’s MIDI, so Bad Apple in DooM, and technically PART of DooM in Bad Apple
@NotZawie
@NotZawie 19 күн бұрын
so glad to see coin finally getting the recognition he deserves
@WM_Nonsense
@WM_Nonsense 20 күн бұрын
Great video! I’ve seen so many other people talk about ACE but no one really explains fully how it works. But I do have a question, if you had not swapped a cartridge but did have a cheat code or something to get to world N, could you write/execute code?
@100thCoin
@100thCoin 20 күн бұрын
If you use cheats, like a game genie, to reach world 'N', you could still defeat bowser and execute whatever data exists at address $0181. The issue though, is that's uninitialized RAM, and since SMB1 doesn't write there under normal gameplay, it's going to simply have whatever pattern is used by the console's "resting state", which is usually "00 00 00 00 FF FF FF FF FF FF FF FF 00 00 00 00", which will lead to a 'BRK' instruction, moving the PC to the location determined by the interrupt vector, which SMB1 doesn't use, so the game crashes. If you have a massive list of game genie codes, you could use those to replace some of SMB1's data with code that writes data at address $0181 though! The best alternative would be world 0xFC (found by negative_seven), which would execute RAM at address $03D0, which isn't impossible to manipulate, but the bytes that you could control simply aren't enough to prevent a game crash, as far as I can tell. These bytes are "masking flags" SMB1 uses to check if objects are off screen. For instance, Mario is composed of 8 objects. if half of mario is over the screen (leaving just his feet on screen) then half of the bits in one of these bytes will be set. I haven't looked into it all that much, but I wasn't able to form a jump instruction, so I looked elsewhere, and found world 'N'.
@kalandillon8320
@kalandillon8320 3 күн бұрын
I love how when random people on the internet do some crazy tech stuff, it’s either, doom (1993) or bad apple.
@ssg-eggunner
@ssg-eggunner 19 күн бұрын
The fact that the entirety of bad apple with good audio quality within the 2kb RAM is beyond me
@CreationCarlos
@CreationCarlos 18 күн бұрын
It's not lol
@ssg-eggunner
@ssg-eggunner 18 күн бұрын
@@CreationCarlos explain how is not smb in itself is a very simple game and its code takes up 32kb you might say visuals ain't that impressive since it reuses tiles from CHR ROM and resolution is very low But a whole long 7bit-PCM sample fitting within 2kb of RAM sounds unbelievable
@angille
@angille 18 күн бұрын
it was multiple megabytes of data. the ram only contains the code to read that data streamed through the controller port. it's basically like playing Guitar Hero except you're strumming a thousand times a second.
@ssg-eggunner
@ssg-eggunner 18 күн бұрын
@@angille so It's mostly the CPU working on it?
@angille
@angille 18 күн бұрын
@@ssg-eggunner ...I'm not sure how to explain this any better in a comment than the video already does, lol.
@kgibbershnoxss
@kgibbershnoxss 19 күн бұрын
Cute seeing WinForms used in 2024 Love to see more videos combining programming and speedrunning
@Democrab
@Democrab 16 күн бұрын
14:46 fun fact, this is how PNG compresses images
@HedgehogGolf
@HedgehogGolf 3 күн бұрын
13:30 lmao that brief moment of Chill Programming was way funnier to me than it has any right to be
@MnMGaming69
@MnMGaming69 12 күн бұрын
Imagine you're watching someone play super mario bros when suddenly they kill bowser, start mashing 5000 buttons, and bad apple starts playing
@FireNLightnin
@FireNLightnin 20 күн бұрын
this video was insane. The whole time, I just could not believe you put so much time into making this work so well.
@gavinsin7567
@gavinsin7567 20 күн бұрын
Super good video, love the little jokes and animations. Gave me a good laugh and learned a whole lot! Keep it up! I'd love to see you just take off on KZbin and your games like Fantastic Fist to absolutely pop-off and you get the recognition you deserve!
@And-So-On
@And-So-On 18 күн бұрын
22:45 okay but it actually sounded good, you keep impressing me more on as the video goes
@MarkusIfquil
@MarkusIfquil 18 күн бұрын
you sound like stryder7x, makes me nostalgic for when i was watching his videos in middle school, anyways great video!
@AgentLazarus
@AgentLazarus 15 күн бұрын
Your best work yet by far
@mrnik3
@mrnik3 17 күн бұрын
that was the best analogy for TAS ive ever seen. great job.
@itztaken
@itztaken 20 күн бұрын
Absolutely wonderful video. Definitely far surpassed my expectations when I clicked on the video, I wish you a good algorithm ❤
@name123-jq1bf
@name123-jq1bf 15 күн бұрын
The audio quality is impressive.
@NotBroihon
@NotBroihon 19 күн бұрын
I originally believed your video was a clever april fools joke. This is incredible!
@VinsCool
@VinsCool 19 күн бұрын
Simply amazing, I love this stuff!
@Mr_Doon
@Mr_Doon 17 күн бұрын
Thanks a ton for describing the details of this project! A lot of KZbinrs might have resorted to dumbing things down for a general audience, so I'm glad you described things with an introductory level of cs/cpe terms. Who knows, maybe some kid who understands none of this but really likes video games will see this video, become fascinated, and use this video as a sort of gateway drug to kickstart their interest in cs/cpe.
@chocolate_maned_wolf
@chocolate_maned_wolf 20 күн бұрын
Loved the video this was very interesting to watch. I can actually understand a lot of it after playing turing complete and nandgame. This sort of engineering feels adventurous, like you are trying to hack the matrix its so fun
@DaveDemers69
@DaveDemers69 18 күн бұрын
Amazing video, that was really fun to watch.
@bearfeet.
@bearfeet. 12 күн бұрын
A rule of the internet: if it can computer, can bad apple and doom
@LucasWills
@LucasWills 20 күн бұрын
Excellent explanation, loved this
@Interloper1337
@Interloper1337 20 күн бұрын
Superb work.
@SkyCharger001
@SkyCharger001 11 күн бұрын
two small improvements that could be made to the tile selection: A. the Floyd-Steinberg diffusion matrix could be used to get a slightly better fit. B. Instead of merely looking at the current frame, you could look at a blend of the current and the previous frames, and the previous tile for that position. (this allows for slightly more fluid tile level animation and/or a few more grays/colors through temporal dither)
@100thCoin
@100thCoin 7 күн бұрын
I like the idea for the Floyd-Steinberg diffusion matrix! I think temporal interpolation wouldn't work too well here. Especially on frames that completely swap black and white, which would likely just be grey for a frame, reducing the impact of the immediate swap.
@GekkiSpeedruns
@GekkiSpeedruns 20 күн бұрын
Awesome video man!!
@terpsidance.
@terpsidance. 17 күн бұрын
Finally a worthy rival to using half A presses to travel to parallel worlds
@summunkid
@summunkid 20 күн бұрын
i like how this video is in 4:3
@100thCoin
@100thCoin 20 күн бұрын
I didn't plan that, but now that you mention it I could render my own video inside SMB1! Any 4:3 video will work.
@SireBab
@SireBab 16 күн бұрын
So much expertise and time spent to produce bad apple in super Mario bros on the nes. I applaud the effort but goddamn man 😂
@100thCoin
@100thCoin 16 күн бұрын
A lot of people will ask "why do this?", because from their perspective this was a waste of time or something, completely missing the point. I'm fascinated by old hardware, and I want to learn more about it. I think making a game that runs on the NES some day would be neat (even if it's not the best financial decision) This was an exercise for myself to become more familiar with NES hardware and it's limitations. You might as well do something nobody has ever done before if you really want to prove to yourself that you got everything figured out.
@SireBab
@SireBab 16 күн бұрын
@@100thCoin That's totally valid! Sorry if It came off as condescending. It's impressive as all hell, and I was just surprised it went into such a niche idea. The generic video player playing doom was the chef's kiss of the video in my opinion. It was all amazing, and i'm amazed at the skills involved.
@Txrje
@Txrje 19 күн бұрын
This video was a whole out of body experience, incredible lmao
@Fritzafella
@Fritzafella 18 күн бұрын
15:05 Litterally my first thought was, you were inspired by Pokemon Sprite Decompression. Absolutely love seeing another video deal with that. Nust love this deep dive in general!
@StereoBucket
@StereoBucket 19 күн бұрын
Controller data streaming, one of my absolute favorites.
@AndrewIdot
@AndrewIdot 19 күн бұрын
you kinda sound like stryder7x sick video. creating an entire emulator just to get the audio working was definitely a shocker honestly lol
@Ap3xHD
@Ap3xHD 18 күн бұрын
Great job really enjoyed the video :)
@lukew3732
@lukew3732 20 күн бұрын
Solid video dude. 10/10
@burritoman2k
@burritoman2k 20 күн бұрын
I read through the write-up of this on TASVideos but it went way over my head, this is a much easier way to understand what exactly happens in the tas itself P.s. the fantastic fist soundtrack in the background did not go unnoticed
@shadygrove424
@shadygrove424 20 күн бұрын
lovely video, informative and entertaining. thx
@Kosin-zs9il
@Kosin-zs9il 17 күн бұрын
Finally some good content on youtube
@NaraSherko
@NaraSherko 19 күн бұрын
Now make it run your video
@jj8703
@jj8703 10 күн бұрын
genius way to advertize your game. ngl might actually get it later
@eclogites
@eclogites 19 күн бұрын
ok u left me drooling with this one
@B3Band
@B3Band 2 күн бұрын
I like how you show maybe 10 seconds of Bad Apple, 3 seconds of your own game, but for some reason showed almost a full minute of a DOOM speedrun.
@100thCoin
@100thCoin 2 күн бұрын
I figured showing more Bad Apple would be unnecessary since I already have the full video in a separate video. Since I don't have DOOM in a separate video, I might as well show it off.
@elmi8769
@elmi8769 18 күн бұрын
absolutely amazing video. remember me when you hit a million subs
@NotNotGrumm
@NotNotGrumm 18 күн бұрын
next you gotta play mario bros inside of the bad apple music video
@casev799
@casev799 18 күн бұрын
Love that Pixelcraftien is such a popular commenter on literally everything that I can recognize that pfp anywhere
@casev799
@casev799 18 күн бұрын
18:47 Okay I can't lie, something about 1,000 just feels. Right? Something about it being so simple, idk
@edsknife
@edsknife 11 күн бұрын
Love to see computers absolutely fucking CLOWNING on Hammer Bros.
@MiirioKing
@MiirioKing 20 күн бұрын
The people that asked those questions should have read the submission in the description
@chiefhydropolis
@chiefhydropolis 19 күн бұрын
wowee. I read the whole tasvideos writeup but this is far more understandable lmao
@78wurrtrat
@78wurrtrat 7 күн бұрын
3:50 1: Kill bowser 2: He turns into object 3: Jump to open bus 4: ?????????? 5: Profit
@casinatorzcraft
@casinatorzcraft 17 күн бұрын
Woah, can't remember the last time I saw a new 4:3 youtube video
@q2ts
@q2ts 20 күн бұрын
Thank you. I was wandering why do, when I casually play Super Mario Bros in world N after swapping cartridge, the Bad Apple video started.
@nerfytheclown
@nerfytheclown 17 күн бұрын
I actually want every video I see or make to look like Doom inside Super Mario Bros
@Il_Dilettante
@Il_Dilettante 20 күн бұрын
IT'S HERE
@purplfish6248
@purplfish6248 19 күн бұрын
Imagine if a game used a controller on the second port to stream data into the console for more advanced games
@FoxDog1080
@FoxDog1080 17 күн бұрын
The entirety of SMB1 is probably a thousandth of the size of bad apple
@nezu_cc
@nezu_cc 16 күн бұрын
I know a rule is a rule, but this is going above and beyond.
@MadContendery
@MadContendery 17 күн бұрын
i like how your compression method is accidentally very similar to the way smb levels are compressed, lol
@Lorenz17
@Lorenz17 19 күн бұрын
Good job on the video. I especially like the segments where you made changes in TAStudio in real time (such as at 14:03) to demonstrate how absolute control works. Its a very intuitive visual, and I imagine recording them without making mistakes and while keeping a pace that could be paired with your commentary wasn't easy. I thought of an optimization to the controller reading code at 26:23 that could increase the sample rate and potentially (but probably not) allow the video to be rendered with a resolution of 32x24 tiles. Your method of reading controller inputs only uses standard controllers, and by extension only uses data line D0 (bit 0) of $4016. Consequently, forming a full byte of data takes eight controller pulses, or EOR instructions. If you instead used peripherals as input, you could use four data lines (D0-D3, bits 0-3) and could form a byte in only two pulses with this code: EOR $4016 ASL A ASL A ASL A ASL A EOR $4016 EOR #$40 ; changed to #$40 from #$C0 since only bit 6 will be inverted Doing this in the audio code would save 24 CPU cycles per byte (4 per EOR * 6 EORs saved). The code for reading inputs in the 32x24 video would no longer need to be a loop, since this code is small enough to remain unrolled. This would save the CPU cycles that loop overhead introduces. Unfortunately, I still don't think it saves enough cycles to allow all 384 bytes to be written in time, but it could be worth looking into. I don't know what capabilities TAStudio has in regards to accessing peripheral slots, but they are accessible on real hardware. According to the expansion port page on the nesdev wiki, the unused expansion port at the bottom on the NES can access all five data lines of both $4016 and $4017 if nothing is plugged into the main controller ports. Therefore, a TAS that used the peripheral slots for input could still be console verified on an NES. Unfortunately, it would lose Famicom support since the Famicom expansion port cannot access every data line.
@100thCoin
@100thCoin 19 күн бұрын
I was talking to people in the TASBot discord, and that's what they were suggesting too. I don't believe TAStudio has the ability to use the peripheral slots? One priority with this TAS was the ability to submit this to TASVideos, so making it work with TAStudio was a limitation. Another suggestion I received (that's also not viable in TAStudio) was to never strobe the controller, and exclusively read from the A button, one bit at a time. This would save time in the loops since I no longer need to spend time strobing the controller. I'm definitely considering working more on this to get a higher resolution video out of it.
@BloodisFuel7
@BloodisFuel7 4 күн бұрын
if it exists, it (for whatever reason) will have bad apple on it
@ladyamphibulon7784
@ladyamphibulon7784 17 күн бұрын
Incredible video! For colour video I’m wondering if it would be possible to render it as black and white before figuring out the palettes (sorta like jpeg compression). It looks like compressing the colours before rendering sucked all the detail out before it could get captured.
@100thCoin
@100thCoin 17 күн бұрын
There's definitely other methods that I'd like to explore with the algorithm for picking the color palettes. That's one to consider.
@elisabethl6818
@elisabethl6818 16 күн бұрын
super interesting video!! but how about using the tiles from the sprites aswell? I'm guessing it would take more cycles on the cpu but could be interesting?
@100thCoin
@100thCoin 16 күн бұрын
In order to use both sets of tiles simultaneously on the nametable, I would need to precisely swap which set of graphics is being drawn, which would be too much of a headache to juggle while also writing the packet data and audio. It might be possible, but I don't think the end result would be worth the effort.
@nmotschidontwannagivemyrea8932
@nmotschidontwannagivemyrea8932 19 күн бұрын
A bit of detail on how the SMB3 total control thing works to put you into World N, and on what it even means to be in a world that isn't 1 through 8, would have been neat. But considering how much detail you went into, that's really a nitpick. Very cool stuff!
@100thCoin
@100thCoin 19 күн бұрын
I showed ASM code for reading controllers, though let me explain in a bit of detail what's going on. When the console reads from the NES controller, the first step is to "strobe" it. This records whatever buttons are pressed inside a shift register contained on the controller. Then, this data is read one bit at a time through 8 separate read instructions. After a bit is read, the shift register automatically shifts the bits over in preparation for the next bit to be read. The nes has two different ways of playing audio samples. PCM, and DPCM. In this video, I covered PCM audio (writing samples to address $4011), so let's talk about DPCM for a minute. Instead of manually writing each sample to the audio chip, DPCM audio is handled entirely by this chip! All the programmer needs to do is write to registers to set up the samples length (how many bytes), location (where does the sample begin?) and sample rate (how many samples per second). Then, the audio chip will automatically fetch bytes from the ROM whenever it's time for another sample to be played. However, there is a hardware-level malfunction in fetching DPCM samples. If this happens on the same cycle the CPU is also fetching data from the controller, the controller gets "clocked" twice. This results in a single bit being read, yet the shift register will shift over 2 bits, effectively corrupting it. (at least, I'm pretty sure this is what happens...) In any case, DPCM audio samples can corrupt the controller. Super mario bros 3 uses DPCM audio samples to play extra drums in the music, so they needed a way to prevent the controllers from being corrupt. Their solution is to read the controllers multiple times in a row. With a bit of math, we can confirm that the controllers will never be corrupt twice in a row. (it takes several hundred cycles between DPCM samples being fetched, but the audio loop only takes about 120 cycles.) SMB3 reads the controllers in a loop until two consecutive reads match. The order of operation at the start of a frame in SMB3 is to swap out PRG banks to load code for updating the graphics, update graphics, read the controller, then restore PRG banks to whatever they were before loading in the graphics code. If we were to create a TAS that maliciously has alternating inputs, no two consecutive inputs will match, and the loop will go on forever! SMB3's title screen seems to have two layers to it. The moving curtains, and a checkerboard floor that doesn't move. This effect is done by scheduling an interrupt request to happen after 196 scanlines have been rendered, in which case the code that's currently running will briefly be interrupted to run some code for updating the screen, then an RTI instruction will return back to whatever was running before the interrupt. However, if we're still inside the controller reading routine when this happens, the wrong PRG banks are loaded! Instead of an RTI instruction, a series of RTS instructions get executed. This eventually leads to address $0001, so now RAM is executed as code. Once the controller reading routine finishes, it stores the data in RAM. I can use these bytes to write code in RAM that gets executed. I begin by making a JMP instruction back to address $0000, so I can continue to execute the first 256 bytes of RAM over and over again. Every frame, SMB3 will once again run the controller reading loop, updating the values in RAM, which I can then execute as code. This lets me carefully write a better input reading loop, which I then execute, allowing me to write anything I want anywhere I want, which I use to set up the payload at address $0181, and manipulate the bytes around $07C0+ to allow SMB1 to begin in world 'N'.
@nmotschidontwannagivemyrea8932
@nmotschidontwannagivemyrea8932 19 күн бұрын
@@100thCoin Wow, thanks!
@VinsCool
@VinsCool 18 күн бұрын
With such an elaborate SMB3 setup, is there any reason why is it not directly used for the entire TAS instead of swapping to a different cartridge? Or was it specifically for entertainment purpose that SMB1 was swapped in to be used for the final step?
@100thCoin
@100thCoin 18 күн бұрын
@@VinsCool The end goal is to run ACE inside SMB1. Ideally no cart swapping is needed, though there isn't a known way to do that yet. Everyone knows about the SMB3 ACE, though ACE in SMB1 is fairly unheard of. I definitely could have done all this inside SMB3, I would have even had an extra 8 Kibibytes of RAM to work with, though I think the limitations of SMB1 are more interesting.
@keropaci
@keropaci 17 күн бұрын
I love that this video is 4:3
@toyotaae86trueno
@toyotaae86trueno 17 күн бұрын
so you basically used page flipping like GBA bitmap but with tiles? what an interesting way of pushing hardware that was slower than the DMG.
@treacherous-doctor
@treacherous-doctor 19 күн бұрын
no joke, when I saw the original, I thought to myself, "one day someone's gonna try and run DOOM on this thing". lo and behold, here it is
@alessandrorossi1294
@alessandrorossi1294 18 күн бұрын
It’s not running doom at all, it’s playing a video recording of doom gameplay
@treacherous-doctor
@treacherous-doctor 18 күн бұрын
@@alessandrorossi1294 I know, he says it in the video
@waitwhat7838
@waitwhat7838 18 күн бұрын
3:19 baby you're a firework!
@mylittleparody2277
@mylittleparody2277 13 күн бұрын
Awesome! Say, what colorspace did you use for the color version? CIEDE2000 gives better results than plain rgb I think. Maybe something to try?
@qoombert
@qoombert 4 күн бұрын
doom tas video inside mario tas tasception
@AmaroqStarwind
@AmaroqStarwind 19 күн бұрын
The original famicom has two hard-wired controllers, and adapters exist which turn the expansion slot into two controller ports for American/European NES controllers. And all four controllers are read independently, so you could have four controllers providing inputs at the same time. More controllers means more bandwidth! The zapper also uses its own thingamajigger compared to normal controllers.
@100thCoin
@100thCoin 19 күн бұрын
I actually improved my audio/graphics interlacing code for the DOOM demonstration to use one controller for audio and another for graphics. They both get strobed simultaneously when writing to $2006, so yeah, that does save a few cycles for each loop!
@AmaroqStarwind
@AmaroqStarwind 19 күн бұрын
@@100thCoin I didn't watch that far into the video yet (assuming it's in the same video). I'm currently multiplexing my attention between multiple unrelated things.
@AmaroqStarwind
@AmaroqStarwind 19 күн бұрын
⁠@@100thCoin As for the Bad Apple music... Probably could have found a way to use the square and triangle wave channels to reduce the number of PCM samples required. A genetic algorithm or deep learning algorithm might help for generating the necessary NES soundchip data.
@SansTheYtber
@SansTheYtber 19 күн бұрын
Now we need You're Mine playing in Super Mario Bros.
@Samford_
@Samford_ 18 күн бұрын
how the hell does this guy only have 2k subs
Who can make Melee's Reverse Temple Jump?
8:38
Melee Moments
Рет қаралды 1,4 МЛН
I made a game with less than 100 pixels!
10:38
inDevelopment
Рет қаралды 57 М.
Would you like a delicious big mooncake? #shorts#Mooncake #China #Chinesefood
00:30
La final estuvo difícil
00:34
Juan De Dios Pantoja
Рет қаралды 29 МЛН
How Super Mario 64 was beaten without the A button
24:12
Bismuth
Рет қаралды 611 М.
Can Portal 64 be saved? - Libdragon
8:46
James Lambert
Рет қаралды 101 М.
Mario Quest (Super Mario Bros. Late 1984 Prototype) [Mockup]
2:33
N64 Controller Ports Mistakes & Oddities
8:14
Snooplax
Рет қаралды 116 М.
Bad Apple but it's played inside Super Mario Bros. [TAS]
4:06
100th Coin
Рет қаралды 40 М.
SM64’s Unopenable Door Has Finally Been Opened!
11:49
pannenkoek2012
Рет қаралды 1,8 МЛН
How People Reprogram Games...with a CONTROLLER
18:42
GlitchDoctor
Рет қаралды 169 М.
Reverse Engineering Game Code from the Neutral Zone
40:59
Retro Game Mechanics Explained
Рет қаралды 511 М.
I Made a Graph of Wikipedia... This Is What I Found
19:44
adumb
Рет қаралды 2,3 МЛН
how many Super Mario games are there NOW?
2:09:46
jan Misali
Рет қаралды 273 М.
HEROBRINE vs NIKOCADO AVOCADO Rank Up Challenge
0:20
Mazizien
Рет қаралды 9 МЛН
Как он смог забить гол
0:59
Garga
Рет қаралды 1,8 МЛН
Факты, Спасающие Жизнь 7 🔥
0:38
Глеб Рандалайнен
Рет қаралды 3,6 МЛН
SONIC VS AMY w WYSCIGU
0:30
Śpiący
Рет қаралды 6 МЛН
Toshiba Refrigerator Flagship Store Toshiba Ice Refrigerator
0:19
Blueberry Lutein
Рет қаралды 19 МЛН