Super Mario Bros.: [TAS] Custom cutscenes through ACE

  Рет қаралды 11,312

100th Coin

100th Coin

Күн бұрын

Пікірлер: 53
@100thCoin
@100thCoin 10 ай бұрын
I ran out of space in the video description to mention this, but sorry for not adding any commentary to the side explaining what's going on. I know I usually do that for these kinds of videos, but I decided that can wait for whatever this TAS looks like when it's finished. Anyway, I'm having fun with this and I plan to make this a couple minutes longer. I don't usually share my work in progress projects, but I thought it was too good not to.
@TheNoSwearGuy
@TheNoSwearGuy 10 ай бұрын
Hey, just an FYI, to italicize your text on KZbin, surround your text with one underscore on each end. Surrounding your text with one asterisk on each end does bold, as you've already found out.
@Pixelcraftian
@Pixelcraftian 10 ай бұрын
SMB has ACE?????? And nobody told me?? Looks incredible :O Can’t wait to see the finished product!!
@SquidPartyDude
@SquidPartyDude 7 ай бұрын
I see you every popular video.
@Patashu
@Patashu 10 ай бұрын
There's something delightful about hearing Famitracker cracktro music over SMB1 graphics
@ac31048
@ac31048 10 ай бұрын
I hadn't realized we have discovered ACE in SMB.
@100thCoin
@100thCoin 10 ай бұрын
Here's the video I made in April after discovering a way to set up a payload an execute it: kzbin.info/www/bejne/rqCnkp5_dphkoMU
@Gustyguy
@Gustyguy 4 ай бұрын
They made a entire Mario game in a TAS HOLY COW!
@Kosmicd12
@Kosmicd12 10 ай бұрын
lol this is amazing. I assume you need DPCM bug or something too precise to start to do anything like this RTA? (I mean just to start the ACE, I know writing the payload is probably way too much)
@100thCoin
@100thCoin 10 ай бұрын
Starting the ACE is simply killing Bowser with fireballs in world 'N'. (You also need to be holding the A button and _Not_ the B button when the final fireball hits Bowser, but that's certainly doable RTA.) But yeah, writing the payload required subframe inputs in SMB3, and utilizing the payload required subframe inputs in SMB1.
@Kosmicd12
@Kosmicd12 10 ай бұрын
@@100thCoin ok, yeah that's pretty much what I thought. Doing anything useful with the exploit seems out of the scope of RTA at the moment. Thanks!
@mattb8075
@mattb8075 10 ай бұрын
I have actually played a Next Fest demo of your game at some point, pretty wild you're working on that and made this. That gives me some confidence of the quality the final game will have, considering the technical knowledge something like this project requires. Impressive work.
@100thCoin
@100thCoin 10 ай бұрын
Oh wow, that's awesome! I really appreciate the kind words!
@ronichoudhury
@ronichoudhury 16 күн бұрын
I mean this as a compliment: this is so surprising and amazing and good that I can't shake the feeling that it's an April Fools joke or something.
@100thCoin
@100thCoin 14 күн бұрын
That's why I always provide a link to download the TAS in the description. If you're skeptical, you can download the sequence of inputs and watch it run on your own computer. I appreciate the compliment!
@burritoman2k
@burritoman2k 10 ай бұрын
Don't have much to say about the video itself (other than the ACE is cool) but your game seems pretty interesting and I'll probably play the demo tomorrow Edit: The game was indeed pretty interesting and I ended up 100%ing it. Looking forward to the full release!
@100thCoin
@100thCoin 10 ай бұрын
I'm glad to hear you enjoyed the demo! The game will be coming out on Leap Day, Feb 29! I'm probably going to upload a video soon about it.
@snoworange5358
@snoworange5358 10 ай бұрын
This is so cool, nice work!
@KabAudio
@KabAudio 10 ай бұрын
YESS!!! Love it when you drop new videos!!!!!! This one is awesome!!!! GG 100th Coin!
@Mizumaririn
@Mizumaririn 10 ай бұрын
love your creativity
@alephnull127
@alephnull127 10 ай бұрын
It is genuinely criminal how underrated of a creator you are. keep up the good work mate! Also, question, do you happen to know how the game actually jumps to arbitrary code when killing bowser? i don't quite understand that.
@100thCoin
@100thCoin 10 ай бұрын
Okay, so when bowser is killed with fireballs, his sprite is replaced with another sprite. The sprite Bowser transforms into is different for each world, so in world 1 he becomes a Goomba, in world 2 a Buzzy Beetle, and so on. This is an intended feature of the game, and I think the "lore" is that it's just one of his minions in disguise, and burning him to death "Reveals his true form". This effect works perfectly fine for the 8 worlds of the game, but if Mario is beyond world 8 things go wrong. This can be done through manipulating RAM in another game and swapping cartridges. World 'N' is what you get if the byte that determines the world number has a value of hex 0x16. (22 in base ten) So when bowser dies via fireballs, we grab the 23rd value in a table only 8 bytes long. This returns an unrelated byte with a value of 0xC9, so bowser becomes "Object C9". Now on the next frame, the game needs to run the code for each of the existing objects. This works through a "Jump Table", essentially the game has a list of addresses to jump to corresponding to the ID of each object. C9 is once again out of the bounds of the list, so unrelated bytes are used for this jump instruction. This doesn't go directly to running the ACE, but it's going to set up what does. Object C9 jumps the PC to address $D007, which normally runs at the end of the level loading routine. Level loading is in it's own "Game state", indicated by address $0772, and level loading ends by incrementing $0772 from a value of 2 to 3. '3" being the value of $0772 for the main game loop. This is also done through a jump table. The "Game State" jump table only has 4 entries with a 0 based index, so the highest value is 3. Since Object C9 takes us to the routine that increments $0772, the game state is now set to 4. On the following frame, the game uses a value of 4 in that jump table, and jumps to address $53AE, which isn't mapped to anything. When fetching data from an address that isn't mapped to anything, we call that "Open Bus". Essentially, when the PC fetches an opcode, nothing replaces the data that already exists on the consoles databus, so whatever was already there is interpreted as the opcode. In this case, by jumping to address $53AE, "0x53" is on the databus. This forms the instruction "SRE ($53), Y". To make a long story short, this ends up shifting the byte at address $000A to the right, and that new value is then on the databus. Miraculously, I can manipulate the value of $000A. If I simply hold down the A button (and not the B button) on the frame the last fireball hits Bowser, this byte will have the value 0x80. This shifts to the right to become 0x40, and since 0x40 is on the databus, the next instruction to execute will be the instruction corresponding to a byte with the value of 0x40, the RTI instruction. This pulls 3 bytes off the stack, and ends up sending the PC to address $1181, which is a location in RAM Super Mario bros never writes to. Since SMB1 never writes there, I can use an ACE exploit in another game (Super Mario Bros. 3) to write custom code at address $1181 (or just address $0181, since those are mirrors of eachother) and then killing Bowser in world 'N' of SMB1 leads to a series of events ending with a return to the custom code I wrote.
@lior_haddad
@lior_haddad 10 ай бұрын
ACE, quite a funny thing... Is that really the best way to wait for vblank? Feels a little bad... Also, making a game sounds quite hard, so good luck!
@100thCoin
@100thCoin 10 ай бұрын
The way I have it working, it should sync up pretty fast even if the CPU/PPUs aren't aligned exactly in the same way the emulator was when making this TAS. Assuming a TAS like this *can* be verified on console with a replay device, the worst case scenario would be a few lag frames during the "Bowser is defeated" screen. But yeah, not being able to use the NMI to check for V-Blank is pretty rough. In my ASM code for the main loop, the lowest bit of the first input read every frame is either going to be a "0" or a "1" depending on if I need to waste a single CPU cycle to prevent the false-negative read from $2002. I set up a LUA script to automatically add a button press there if the lag frame occurs when working on this TAS.
@zetorux
@zetorux 10 ай бұрын
Oh my GOD
@sanderbos4243
@sanderbos4243 10 ай бұрын
This is amazing! How much of your 2 KiB did you use up, and up to how many more minutes of fun TASing do you think will fit?
@100thCoin
@100thCoin 10 ай бұрын
So far I've using about 32 bytes on the zero page, about 80% of the stack is replaced with my controller reading and code writing routines, I''m using the $200 page for OAM, the entire $300 page is dedicated to my graphics changing code (I'm using 128 bytes starting at $380 dedicated for writing a large series of bytes to be copy-pasted into the PPU), the entire $400 page is dedicated to my main loop that happens each frame, about half the $500 page is my audio code. So far I'm not using the $600 or $700 page. Edit: Oh, and I'll probably make this 4 minutes longer? That's a rough estimate, I have no idea what I'm going to do with this yet.
@sanderbos4243
@sanderbos4243 10 ай бұрын
@@100thCoin Wow, that's amazing, and I got what you said due to having written a little for the NES a few months back using NesHacker's tutorials. It could be fun to see more computer science references that you could connect with Mario, like Game of -Life- Luigi, Bo(g)o Sort, etc. :)
@BraydenMuzio-k5h
@BraydenMuzio-k5h Ай бұрын
Right after I saw that Pokemon Yellow video 💀
@WindowsDrawer
@WindowsDrawer 10 ай бұрын
Hold up, ACE can be done in SMB? I always thought it was impossible.. When did it get discovered?
@100thCoin
@100thCoin 10 ай бұрын
It was discovered in April last year. It requires writing a payload in RAM that SMB1 doesn't initialize, and swapping cartridges so you can start the game in world 'N'.
@BooeythePatooie
@BooeythePatooie 10 ай бұрын
@@100thCoincan you also do so using a cheat code that lets you start in World N?
@100thCoin
@100thCoin 10 ай бұрын
@@BooeythePatooie You would still be able to kill bowser with fireballs, thus leading the to PC executing code at $181, but unless you also have a significant list of cheats to write a payload at address $181, you would just crash the game.
@filicz1563
@filicz1563 9 ай бұрын
Would it be possible to set up the payload RTA? Like using similar method to the 7-1 wrong warp. Also do you think it will ever be possible to set up a payload in smb1?
@100thCoin
@100thCoin 9 ай бұрын
In theory, the payload could be set up RTA, though in practice it would be tedious, near impossible, and likely take multiple hours of manually storing specific bytes inside the stack (since SMB3 doesn't clear that region) to create an advanced payload for SMB3, run it, then have it set up the RAM for you. Alternatively, you could create a custom cartridge to just set up the RAM, which would be easy and RTA viable to just power on and swap carts.
@silverwolflee6978
@silverwolflee6978 10 ай бұрын
Any chance for the release of the music? Would love to listen to them.
@100thCoin
@100thCoin 10 ай бұрын
Sure! Give me a little bit, I'll upload the tracks...
@100thCoin
@100thCoin 10 ай бұрын
Here you go! kzbin.info/www/bejne/anylaGCqmZWLZ68
@alectrona6400
@alectrona6400 4 ай бұрын
are you able to make this into a rom hack by any chance? i love this.
@100thCoin
@100thCoin 4 ай бұрын
A rom hack that has a game similar to this would certainly be possible. Keep in mind, this was the prototype of what would become the bad apple TAS. The "game" shown in this TAS is very much not playable, and it's just a music engine that can move sprites around the screen and update the background.
@justsomeguy5628
@justsomeguy5628 Ай бұрын
Okay, now make it compute the optimal path for all graphs
@lolsaw14
@lolsaw14 Ай бұрын
i wanna ask, why when i try playing any tas like this its slowed down? speeding it up doesnt help
@YF501
@YF501 10 ай бұрын
Woah
@670839245
@670839245 6 ай бұрын
Can we have OST?
@100thCoin
@100thCoin 6 ай бұрын
Here you go! kzbin.info/www/bejne/anylaGCqmZWLZ68
@Alexs23743
@Alexs23743 4 ай бұрын
I shudder to think what the optimal route is. Aw, no 2hues and bad apples in this one. :(
@ncrecc6040
@ncrecc6040 10 ай бұрын
i suppose it's now theoretically possible to play back cory arcangel's 2010 hack Super Mario Movie (kzbin.info/www/bejne/nGHWc52EpZWNY7M) inside the actual super mario bros
@100thCoin
@100thCoin 10 ай бұрын
With the way my TAS is set up, in theory, yes! I *could* recreate that in an unmodified version of SMB1.
@SuperM789
@SuperM789 10 ай бұрын
wtf how
@100thCoin
@100thCoin 10 ай бұрын
So many button presses. Essentially, with an ACE exploit jumping the PC to uninitialized RAM, I'm able to put any custom payload there before swapping cartridges. The code I write lets me write more code through reading the controller a whole bunch, and it cascades from there. I added code for changing the Nametables (the backgrounds), the APU Registers (The music) and the OAM data (sprites). Everything is updated via reading the controller a bunch. I only have 2kib or RAM so I don't actually have space to program a whole "Travelling Salesman The Game" so it's just pretending there's gameplay by manually writing data to the screen and audio chip.
@SuperM789
@SuperM789 10 ай бұрын
@@100thCoin epic
@zigludo
@zigludo 5 ай бұрын
when is the optimal route speedrun for nerds :((
@NCXDKG
@NCXDKG 4 ай бұрын
Oh, sure, just (GARBAGE NOISE) your way into becoming a sailsman.
[TAS] SNES Family Feud "playaround" by Heisanevilgenius in 06:46.71
7:43
Super Mario Bros: Maximum Mario Part 1
34:57
aacglucas
Рет қаралды 76 М.
When u fight over the armrest
00:41
Adam W
Рет қаралды 29 МЛН
1, 2, 3, 4, 5, 6, 7, 8, 9 🙈⚽️
00:46
Celine Dept
Рет қаралды 108 МЛН
小路飞还不知道他把路飞给擦没有了 #路飞#海贼王
00:32
路飞与唐舞桐
Рет қаралды 85 МЛН
The Ultimate Sausage Prank! Watch Their Reactions 😂🌭 #Unexpected
00:17
La La Life Shorts
Рет қаралды 8 МЛН
TAS Explained: Super Mario Bros. 3 in 0.2 seconds
19:39
100th Coin
Рет қаралды 440 М.
Super Mario Bros. 3: ACE by kicking the goal around
16:50
100th Coin
Рет қаралды 8 М.
How People Reprogram Games...with a CONTROLLER
18:42
GlitchDoctor
Рет қаралды 228 М.
4:53 is Almost Possible
17:36
Kosmic
Рет қаралды 862 М.
[TAS] The Ultimate Any% Speedrun
5:10
Gaster
Рет қаралды 9 М.
Can I Remake Super Mario World in Godot? (Part 1)
18:44
Mario Sunshine can be Beaten in Under 10 Minutes. Here's How
16:38
How Super Mario 64 was beaten without the A button
24:12
Bismuth
Рет қаралды 1 МЛН
Videogames That Are Basically PERFECT
16:54
Wyvrn
Рет қаралды 459 М.
SNES Code Injection -- Flappy Bird in SMW
6:31
SethBling
Рет қаралды 2,8 МЛН
When u fight over the armrest
00:41
Adam W
Рет қаралды 29 МЛН