No video

Super Mario Bros. 3: Glitch levels and level generation

  Рет қаралды 13,292

100th Coin

100th Coin

Күн бұрын

"I have to go now. My planet needs me"
Note: Mario died on the way back to his home planet
In this video I showcase everything currently known about glitch levels. (Or at least everything I considered important enough to document.) It's worth noting that there aren't any known methods to enter any without ACE or hacks, but should one be discovered, glitch levels are a potential entry point for ACE.
I also show levels being generated a single object at a time, as I found it incredibly satisfying. This includes the glitch levels that crash the game.
I also biased this video towards glitch levels that don't crash the game, but it should be known that there are hundreds of levels that crash for every level that doesn't.
The purpose of this video is documentation. You might've noticed I didn't do a full run from console boot to entering a glitch level. Most videos I've made where the topic is a new method of ACE, the full run TAS is the focal point, but I decided to shift the attention to how the glitch levels work and a myriad of ways one could potentially be entered as opposed to going all in and TASing a specific method. In fact, all of these recordings were set up using hex editing and I never created a full run. This shouldn't take anything away from the final product, but I thought I'd openly state that it was done this way.
Despite this being a new entry point for ACE, I glossed over it in the video, but let's talk about it here! For that demonstration, address $0015 had a value of $A7 on the frame the level generation used it to generate an object. As mentioned in the video, we take the jump table at index $50, and execute code from address $008D. On top of that, the bumped block and Toad overwrite any bytes you would have written for address $95 and $97, so writing DEC $7955 and JSR $8FE3 becomes significantly more complicated.

Пікірлер: 52
@Kosmicd12
@Kosmicd12 2 жыл бұрын
Very high quality
@kramsdell_
@kramsdell_ Жыл бұрын
why do you have no replies? not anymore. ;)
@Tomw1983theidiot
@Tomw1983theidiot Жыл бұрын
@@kramsdell_ ok mr smarty pants
@ScottStarrs
@ScottStarrs Жыл бұрын
2nd reply!
@sabugui
@sabugui 8 ай бұрын
wow
@AndyNPC
@AndyNPC 2 жыл бұрын
It's interesting how 2-1 draws a grid of pipes and then overwrites parts of it to create the level pattern.
@100thCoin
@100thCoin 2 жыл бұрын
I definitely wanted to show 2-1 being generated. it caught me by surprise!
@maxxbrick
@maxxbrick 2 жыл бұрын
Let's be real, 100th coin is the Pannenkoek of SMB3
@KabAudio
@KabAudio 2 жыл бұрын
My favourite of all your videos to date!!! I have always been intrigued as to why bowser's castle takes significantly more frames to generate compared to every other level in the game - I did my own research just a few months ago and read the level generation section, and was amazed how it always starts with the same pattern for "fortress" tilesets, wastes all that time drawing all those tiles and then removes them because barely any fortress used those tiles! (except for a few sections of checkerboard floor) The fixed and variable sized level generators was a really cool thing for the programmers to do! Makes sense though, such an efficient way to make each level, given only a handful of bytes are required to build a level. Even just watching Bowsers castle being generated frame by frame in the hex editor looked fascinating, but now you've made it completely visual too, so cool to watch! I've spent more time than I want to admit reading through all the disassembly, so I really enjoy it when you make videos like these. I was no joke thinking of a way to visualise Bowsers castle being generated only a few months ago, well, I guess you beat me! Although I had planned to put more emphasis on why this level in particular takes the most time to be generated. I also find it fascinating to note the difference between the level load function on the USA versions compared to the Japan version - the japanese version allows vblanks to occur throughout the level generation process, although all it runs is pretty much the sound engine... Whereas in the USA version, this little bit of code after the level entrance transition is completed is executed a few lines after PRG030_88AD - LDA #%00101000 ; use 8x16 sprites, sprites use Pattern Table 2 (NOTE: No VBlank trigger!) STA
@shellsterdude
@shellsterdude 7 ай бұрын
I really appreciate all the cool SMB3 glitches you show. One thought that keeps living rent-free in my brain is if there is a practical RTA glitch that would either break the extra rock or get runners an extra hammer so that there could be a true 100% SMB3 run. As most people know, it's impossible playing the game as intended to hit all mushroom houses because you need one more hammer than you can get. Might also be possible to just skip to the extra mushroom house (I don't know if the game would let you back out after that).
@100thCoin
@100thCoin 7 ай бұрын
There actually is a glitch that lets you collect an extra hammer from hammer bros. It's unfortunately comically slow to perform, and RNG dependent, but here's a video showcasing that: kzbin.info/www/bejne/q3WZgIN5g5Z-d8U
@shellsterdude
@shellsterdude 7 ай бұрын
@@100thCoin Thanks for the link. I had somehow missed that video. Like you said, it's an RNG-fest though so still not quite ripe for this kind of run idea.
@Patashu
@Patashu 2 жыл бұрын
The visualizations are top notch. It's so interesting to see how the sausage is made. Anyone as a kid would think level data is just grids of tiles, but oh no.
@lior_haddad
@lior_haddad 2 жыл бұрын
Your videos are so consistently high quality, I love it. The visuals really help with understanding your explanations.
@Titanic4
@Titanic4 Жыл бұрын
5:52 - that's one majestic way to complete the game...
@metarotta
@metarotta 2 жыл бұрын
all of the visualisations are very good and makes this infinitely easier to understand, great video
@TweeterMan287
@TweeterMan287 7 ай бұрын
Thank you algorithm for recommending me this channel! Instant sub.
@handlesareanunfortunatefeature
@handlesareanunfortunatefeature 2 жыл бұрын
damn this guy has the visuals
@ganondalf8090
@ganondalf8090 2 жыл бұрын
love the level generating sections! it would probably take forever to make, since i assume you're doing those sections by hand, but i would love to see a video of all the levels generating
@EmanueleX
@EmanueleX 2 жыл бұрын
he's probably using a script to read the level data and visualize it as a video but i could be wrong
@100thCoin
@100thCoin 2 жыл бұрын
Nah- I wrote a program to draw that stuff for me, ha! There's no way I would've done all that by hand. I might make a follow up video of generating all the main levels if people are interested.
@Selicre
@Selicre 2 жыл бұрын
@@100thCoin Did you use a standalone 6502 emulator to do this, or a whole nes emulator with lua scripts? I actually did the standalone emulator approach with the all-stars version with my editor, it's really fun to mess with.
@100thCoin
@100thCoin 2 жыл бұрын
​@@Selicre It's a custom made 6502 emulator written in visual studio .Net forms. I just plug in map coordinates and the world number and it generates the level while putting an image in an output folder for each step it took to generate the level. (though a lot of it was toggleable. I could set it up use the actual level's width, or force a full 15 screens, only draw the finished result, only draw the tiles that were newly added to the image, etc. At one point, just to find the cooler glitch levels, I made it loop over every tile on the map for worlds 1 through 8. I still have that folder. It has 65536 images in it, and it's about 1.33 gigabytes! There's a whole lot of poorly labeled checkboxes and toggleable options that I only ever used once, ha!) It also outputs the PPU character information, and a "tilemap" which I used for the visuals around the 13 minute mark. 5-2 actually starts in a tiny room with a pipe, so to draw the second area, I take the information from $7DFE and the tileset that loading a level stores there, and I can use that to generate the second part of the level as well. Generating the level mario enters after ascending in the toad house was trickier. I set it up so I can just paste a series of bytes into RAM at a specific address, then plug in the tileset and address to begin interpreting level data. It was a really fun project, and I'm glad I got to use it for this video!
@TompaA
@TompaA 2 жыл бұрын
Another great video! Love your visuals and explanations!
@wagnerramosmidichannelabso514
@wagnerramosmidichannelabso514 Жыл бұрын
(0:33) - "One hop on the pink noteblock will send you to a far away land!" - Toad That's one way to enter a glitch level in Toad's house.
@genblinko7801
@genblinko7801 2 жыл бұрын
a 15 minute video from 100th coin? LETS GOOOOO
@SMARTBoardSBMInchInteractiveWh
@SMARTBoardSBMInchInteractiveWh Жыл бұрын
Very well made and easy to understand
@NtQueryInformationProcess
@NtQueryInformationProcess 2 жыл бұрын
highly underrated
@Pascal-eu2oe
@Pascal-eu2oe 2 жыл бұрын
0:01 - The pipe glitch is probably crying in the corner after hearing that pink note blocks are more exploitable. 0:35 - Obviously Mario doesn't need the whistle to go to a far away land. 2:17 - This flowchart is very nice to see. An excellent way to visualize it. 4:30 - It's always a table that makes everything break, isn't it? 8:52 - This is so sad. 11:25 - I'm kind of surprised bouncing on the note blocks here doesn't crash the game at all.
@100thCoin
@100thCoin 2 жыл бұрын
> It's always a table... With my videos, yeah. I'm actively seeking which jump tables could be exploited, as it is certainly an effective method to crashing the game or executing in RAM. > kind of surprised bouncing on the note blocks here doesn't crash the game... All of these are mapped to the level data in RAM, so nothing goes wrong when bumping them. The out of bounds noteblocks can crash the game if they are pointing to ROM, as writing to certain places in ROM can cause Memory Mapper functions to occur, such as swapping PRG banks. In the case of the 7-1 noteblock, it swaps the positions of the bank it was reading and bank 30, and after a series of RTS instructions the stack underflows, which leads to pulling off unrelated bytes from $100 and $101 as if they were a return address. Unless you manipulate the bytes wherever it "returned" to, it's most likely going to crash the game.
@EmanueleX
@EmanueleX 2 жыл бұрын
amazing what you can do with this game, great video
@tjk113
@tjk113 2 жыл бұрын
very nice video and explanations.
@JustDavesRetroGames
@JustDavesRetroGames Жыл бұрын
hey there I came across youre super little channel here and wanted to show my support, great content keep it up ✌😎
@warmCabin
@warmCabin 2 жыл бұрын
This is awesome! So, why is the status bar scroll split always all screwy in these glitch levels?
@100thCoin
@100thCoin 2 жыл бұрын
As a quick refresher, the IRQ happens 192 scanlines after the screen starts being drawn. It causes an interrupt, so the game will stop whatever code it was reading temporarily to execute a short routine used for updating graphics so the HUD can utilize different characters, and also update the position / scroll. The toad houses have a specific branch in the IRQ routine (Tileset $07 uses the branch, to be more specific. The map and roulette houses use this branch too.). It doesn't have the step where it adjusts vertical scroll, so scrolling the screen upwards will move the HUD off screen. This looks funky, since it swaps the graphics and horizontal scroll, but the vertical scroll remains unchanged. In summary, toad houses shouldn't scroll upwards, so the developers never bothered to make the HUD remain in one place vertically. But they needed to give the map / toad houses a specific branch in the IRQ since this is where the hud can flip around to the pink side to showcase items you've collected. That's also why the HUD isn't broken in the other glitch levels showcased.
@warmCabin
@warmCabin 2 жыл бұрын
> Refresher Man, I've been skipping lecture :/ Interesting stuff. Would that be the same branch as used by the map screens? Another question, if you don't mind: is the area data in its entirety decompressed to cartridge RAM? Is collision data part of that? I'm looking at an ASCII Toad House at $60F0 right now so it seems like it!
@100thCoin
@100thCoin 2 жыл бұрын
@@warmCabin Correct, the level's tile data is from $6000 through $794F. The "collision data" is a bit of a vague wording... The tiles at $6000 aren't just visual. If you hex edit those then you can interact with any changes you make. The bytes at $7E94-$7E9B determine which tiles are solid or not.
@kales901
@kales901 Ай бұрын
the fact that the game has 'tiles' that delete tiles is very intresting
@02DooD
@02DooD 2 жыл бұрын
I wish I could edit this cool
@paulgoldstein5467
@paulgoldstein5467 Жыл бұрын
This Definitely one of the most underrated video I have ever seen.
@JMFSpike
@JMFSpike 2 ай бұрын
Glitch levels in SMB1 are sooooooooooo much more interesting due to the way that game works.
@AtKiba
@AtKiba 2 жыл бұрын
Your videos are awesome! :D
@rodrigo1593_
@rodrigo1593_ Жыл бұрын
I LOVE YOU SONIC!!
@clonefighter1996
@clonefighter1996 2 жыл бұрын
YOOO YOU'RE BACK!?
@BooeythePatooie
@BooeythePatooie Жыл бұрын
Sorry to be a bit Doo-Doo Brained, but is this possible without any code ejection? Ya know, like without doing any complex setups for your console and all that?
@100thCoin
@100thCoin Жыл бұрын
Everything showcased in the video was demonstrated through hex editing, though it could be done without it. It would just require a bunch of arbitrary code execution in 7-1, and some other shenanigans to get the game in such a state where this can be done.
@tallreversd
@tallreversd Жыл бұрын
Surely a faraway land
@user-lv8lt8gu4g
@user-lv8lt8gu4g 6 ай бұрын
Enjoyed
@TheNoSwearGuy
@TheNoSwearGuy Жыл бұрын
What about for generating the subworld in levels?
@ForYouPlays
@ForYouPlays Жыл бұрын
Super Mario Bros but it's a mod where you can make your own level using your own tileset, then it will tas that LMAO
@AmateurSuperFan
@AmateurSuperFan 2 жыл бұрын
1 minute in and i already don't understand
@mariocursed
@mariocursed 8 ай бұрын
no entendi un carajo pero buen video
Super Mario Bros. 3: Lag during screen transitions
23:06
100th Coin
Рет қаралды 2,7 М.
Super Mario Bros. 3: ACE by kicking the goal around
16:50
100th Coin
Рет қаралды 8 М.
Zombie Boy Saved My Life 💚
00:29
Alan Chikin Chow
Рет қаралды 28 МЛН
Dad Makes Daughter Clean Up Spilled Chips #shorts
00:16
Fabiosa Stories
Рет қаралды 3,1 МЛН
7 Days Stranded In A Cave
17:59
MrBeast
Рет қаралды 96 МЛН
Секрет фокусника! #shorts
00:15
Роман Magic
Рет қаралды 44 МЛН
The Wii's Music is a bit complicated...
23:41
Dublincalif
Рет қаралды 273 М.
Access Glitch Worlds in Super Mario Bros. via NES Tennis
13:06
Retro Game Mechanics Explained
Рет қаралды 638 М.
Computing Pi on the NES
9:43
NesHacker
Рет қаралды 227 М.
Dumping the ROM of a GBA game by crashing it
7:15
TheZZAZZGlitch
Рет қаралды 239 М.
I spent 100 days Mapping out Mario's ENTIRE Planet
32:50
CharlieAndLuke
Рет қаралды 608 М.
Why Old Games Still Look Great!
8:55
Video Game Animation Study
Рет қаралды 682 М.
Speedrunning Super Mario Bros. INSIDE Mario World?!
26:53
Kosmic
Рет қаралды 281 М.
Bugs & Glitches of High-Level NES Tetris
53:21
Retro Game Mechanics Explained
Рет қаралды 199 М.
The Code That Makes Mario Move
9:53
NesHacker
Рет қаралды 533 М.
Zombie Boy Saved My Life 💚
00:29
Alan Chikin Chow
Рет қаралды 28 МЛН