Him: “the actual compression and decompression algorithm used in the game is fairly complicated” Also him: decompresses an entire 5*5 Pokémon sprite by hand on a livestream
@@Lokear lol what. You sound so dumb here. You think, in retrospect, that he is smarter than the Game Boy developers who made the game? (not spaghetti code btw, you clearly don't know what that means) It's a lot easier to understand old techniques than invent new and improved ones.... you think someone who recounts Newton's laws is smarter than them because they can write proofs faster? hahah bro. Just be quiet man.
@@TrueLimeyhoney thrice actually, with the first and third appearances being uncorrupted and the second one having the top left 8x8 square corrupted. check the video carefully and you'll see the same. also the beta sprite for tentacruel with crossed arms (not his actual sprite in game but stored here nonetheless) and the sprite for charizard.
My favorite thing about your videos is the fact that I can understand them, despite the fact I have never done anything with assembly language. You do a great job keeping it understandable while still diving *way* deeper than any other channel I've seen.
Thats true. My only criticism is that it is a bit too fast to get whats going on at some points. He should maybe make longer pauses between sentences to give viewers some time to think.
@ I don't like that either, however he makes almost no pause between sentences. If I did that in school when doing a presentation, I'd have gotten a worse grade. It's just better when you try to teach people something to make longer pauses... Not everybody is an expert on this field. I'm talking about 1 sec. of pause between sentences... Maybe I also feel that way because my native language is german and german feels like a slower language than english with longer pauses...
The whole not shifting pokemon and just slapping missingno whenever a pokemon was removed is the classic "I shouldn't do this, but it'll do for now" programmer move. Also I'm so amused by how the game didn't crash with all those indexes going out of range. Unreal Engine take note!
Fun fact: modern games would have the potential for more ridiculous glitches, but they have error detection systems that INTENTIONALLY crash the game if something too weird happens.
@@elementgermanium Yeah, because one of the even weirder things that can happen is arbitrary code execution, which you definitely don't want in networked multiplayer games.
@@kylek.3689not to mention we're usually not dealing with such low-level programming. Early Pokémon games were likely coded entirely in assembly which doesn't have most of the safety nets most modern high-level languages have.
@@AllThoughts3rased Yeah, most early games were coded in assembly, including the first generation of Pokemon games. The programmers had to cut all sorts of corners to fit all that data into such a small cartridge _(I want to say like 16 KB)_ and have it actually function. The fact that those games work at all is a miracle tbh
I used to program Gameboy Color for a living. This is slightly nostalgic for me. I don't understand why they divided the sprites into two bit planes unless that is how they are normally stored in memory. It has been 19 and 2/3 years since I last programmed a Gameboy, so I don't remember.
@@Kawa-oneechan I understood, but that does not seem to me like a given. Data is data, and it can compress either way. However, if it leads to more white space in the characters, then that totally makes sense.
Yeah, I had trouble understanding the developer's intentions here as well. The compression algorithm used here was more efficient when compressing data with lots of runs of zeros, so my guess is that either they tested it and found this format more efficient, or there was a different compression algorithm used earlier in development where this splitting made more sense.
@@RGMechEx The dumbed down Z80 in the Gameboy doesn't have much processing power, so doing more work decrompressing could be an issue. However, if it is a one time thing at the beginning of a level, then it is probably not a problem, because it would likely take a fraction of a second. However, when I was programming the SNES, it was constantly pulling information from the ROM as you scrolled through long levels.
@@RGMechEx In the 1990's, one of my coworkers was working on a compression algorithm that would combine similar looking characters. If the characrters were animated, your eye is not likely to notice that a pixel or two was off, because it would only be on the screen for a frame. As a side note, I am impressed that the original Super Mario Brothers used the same characters for the clouds and the bushes, where just the pallete was different.
Best of luck on your studies! Here's some spoiler alerts from somebody now in industry: computer and programs only work when you don't look at them too closely. As soon as you start setting eyeballs on them you realize it's just a pile of string and duct tape somebody set up 5 years ago and then ran away from before somebody else could notice.
Fun fact: The Glitch Pokemon that are missing from certain parts of the ID no.s will sometimes evolve into certain other Pokemon. There's one that evolves into Kangaskhan. People suspect that baby Kangaskhan used to be a Pokemon because of this.
That may have been because of an April fools joke made by the devs of Pokemon. It went something like this, it was a dragonite that would evolve into yoshi.
@@madajahpowell9023 Wait, was that *from* the devs? I knew it was in a gaming magazine, but I was under the impression that it was made up by the authors.
Back in the red/blue days, 10-year-old me was briefly obsessed with Missing Number. I noticed, after catching one just to see what would happen, that beating the Elite 4 afterward caused my winning pokemon images to glitch...one of them glitched into a sprite of Mew. After I realized Missing Number can evolve, I experimented for a pretty long time; convinced that there was some sort of massive secret locked within this glitched mess of pixels. As with almost all the "secrets" (more like child folk-lore) from those games, there really was nothing to find.
"Child folk-lore" is so fascinating to me. There's an academic term for this, "children's culture" -- the unique subculture created and maintained by children, with little to no influence from adults. Somehow through friendships with kids at other schools, cousins in other states and countries, etc. you end up with this global "children's culture" that propagates itself. Even as we grow out of childhood, new young children replace us and maintain many of the traditions and beliefs we left behind. I remember a Reddit comment where somebody shared some of the new Pokemon rumors he learned from his young child. The most fascinating thing was that corrupted versions of the same rumors from 20+ years ago still persisted among these young kids. Apparently this guy's kid heard about a secret Pokemon named "Mysterio" who could give you many items but at the risk of destroying your game. The legend of Missingno lives on, retained through oral tradition amongst children. That's pretty mind-blowing to me.
@@PKNproductions I am probally wrong here so take EVERYTHING i say with a truckload of salt thinks this may happen due to it being like a stream of children lets say you are in middle school 6th grade first year there you hear about a mystical secret in a game called "I’m using this game as an example for a comment since i can’t think of anything AKA Needed Something" you try to find the secret in "Needed Something" you turn up blank but then you go onto 7th grade and hear about a secret in a game called "Needed Something 2" you tell some 6th graders about it they believe you you try to find the secret and find SOMETHING related to it but it doesn’t lead where you want you go onto 8th grade and hear of a secret in a game called "Needed Something The 3RD Final Battle" you try to find the secret and you find nothing but before that happened you told a few 7th graders about it and they believed you you leave the middle school for 9th grade but those 7th graders are now 8th graders and those 6th graders that were told about it by the 7th graders just like you did they are now 7th graders and tell the new 6th graders and this keeps looping AGAIN THIS IS JUST SOMETHING I THOUGHT UP TAKE IT WITH A TRUCKLOAD OF SALT (had to add like 50% of this cause accidentally hit enter button HOPEFULLY youtube goes "Yep you can edit this otherwise you have some half finished story)
Recently graduated with my bachelor's in computer science - you definitely earned a sub from me with this video!! Messing around with Pokemon glitches and roms as a child was one of my very first introductions to certain computer science concepts. I remember my dad teaching me hex conversions so I could work with action replay codes easier. But beyond that, I always felt a great deal of affection for the first gen pokemon glitches. When I was a kid, I used to do Red/Blue glitch runs where I would demonstrate to my brother as many Red/Blue glitches as I could in a single run over a couple of hours. Great fun. Thank you for this video. It feels so nice to understand more about something that ended up pointing (haha) me in this direction in life. 'M having part of its sprite data in its name is poetic justice, and finally understanding why the Hall of Fame data gets completely chewed up is really cathartic. Seriously, thanks so much.
"The actual compression and decompression used in the game is fairly complicated so I won't go into much detail here." You mean everything else is LESS THAN fairly complicated??
@@professionalprocrastinator8103 I don't think so, that would have been very odd for the era. I found a page that suggests it uses a variation of the LZSS compression algorithm, which is a kind of dictionary coding algorithm. Edit: wiki.nesdev.com/w/index.php/Tile_compression
As a programmer who grew up with Pokemon Blue, this is particularly fascinating (though I want to know more about the decompression algorithm and should probably just go read it on the "pokered" project on Github). The workings of these older, simpler machines and the clever tricks they used to work around limited memory space and CPU speed are amazing to see. But this stuff is pretty much meaningless if you want to make modern games or software -- you shouldn't be doing anything like this, and if you do and it glitches out like this you just see "Segmentation fault" or a pretty backtrace pointing out the exact line in your code where the poo hit the fan.
you said the compression system was complicated, but id still love a video on it (or at least some good resources for learning more), even if it is more technical than usual.
Judging from how to the animations play out, it seems to be based on "write X 1s at position Y". I tried googling it but I could only find off-topic forum threads and dead links :(. Edit: It looks like someone else found the answer while I was typing my reply, and my guess about the algorithm is quite inaccurate. Oh well.
Nickolas Wilcox True. One of the reasons Gen 1 is so fascinating is that most glitches don’t come up/aren’t that noticeable if you aren’t looking for them, so you can have a perfectly normal game if you want. Even now it’s fun to play normally, even if it’s a little basic and rough compared to newer games. The main thing that hasn’t aged well is the movepool.
Nickolas Wilcox That too. Though you know what might’ve helped with Psychics a little bit? Having a Bug move that did remotely decent damage. The best Bug move in Gen 1 was Pin Missile. PIN MISSLE. Oh, and the only damaging Ghost move outside of Night Shade was LICK. (Which wouldn’t affect Psychics this gen anyway, but still).
This is the single glitch that started my love back in the day for investigating weird game mechanics... it was my first glimpse into the ability to manipulate someone's programming in a weird but fun way
Missingno was special in that it corrupted just all the right things. The sucker had no defense, randomized item 6 to find but got caught by the 99x item limit. Its not a pokemon I'd ever actually use in-game. But you sure loved those not so rare candies.
I remember reading as a kid about how the Pokémon data for MissingNo. comes from trainer data being interpreted as something it isn't. I think that was when I realized that there isn't really anything fundamentally different about types of data on a binary level.
Now all we need is a video about the "True Cry" effect that some glitch pokemon do. Like with "4 4" in pokemon yellow. It just trashes the graphics, and the sound with encountering it. Especially when it produces Pikachu's sounds in a crazy corrupted way.
This video about Pokemon opened a can of worms (well, maybe not worms heh), now we want all glitches explained on this channel haha! This guy is so good at this! Some other people try to explain glitches and either get so technical it doesn't make much sense to me, or I end up wanting more.
@konakonaa How does that explain how some forms of Missingno, to me at least, sound like Nidoran♂ or Dragonair? Was the sound pointer get sent to the right spot?
@konakonaa Doesn't seem to be the case with OG Metroid, from what I heard. Trying a vulgar password with older firmware can apparently brick the system. Now, I heard that you can fix the bricking by taking the battery out, but I'm not fool enough to even try the password on an emulator. It can be a killer POKE on an NES, as well.
This is going to sound a bit like an insult but isnt: I am 100% falling asleep listening to this. Your voice is perfect to soothe my anxiety. I can barely understand the maths behind whats going on but I’m still engaged and interested just enough to not fall into panic thoughts. Genuinely dude thanks for the amazing content!
For anyone curious, the blue tiles in the glitch list at the end come from control characters. When the game reads one in the script, it turns it into a whole word, often something cumbersome to write a lot or something dynamic like a player name.
Incidentally, this is why naming yourself "ASH" gets you different Pokémon from the Old Man glitch than choosing the ASH preset name. The preset names actually set your name to a control code that prints the selected name out when read, while the name you enter in yourself is just stored directly as text and printed normally.
@@LonelySpaceDetective Kinda. The Preset Ash has all other names stored after it. Like ASHREDBLUEJACK or whatever. That's why you get different stuff and neither 'M nor Missigno.
14:40 So what you're saying is, in-universe, Missingno's appearance is that of an eldritch data construct representing the very concepts of human speech and writing, and that's why its true form is indecipherable to mortal eyes. That's fucking awesome.
Data is data. Even if it isn't the "right" kind of data, it will be interpreted as though it were unless there's error or sanity-checking going on. Have you ever tried loading a .dll into Audacity (or other audio editing programs, presumably) as raw audio data? You can do that, and it'll play a sound. It might damage your speakers and/or ears, but it can do that because ultimately it doesn't care if the data it's getting is audio or not; it'll try to play it anyway.
@@pmangano You're almost right, but I'll nitpick. Notepad won't actually show you the raw data properly, since even Notepad expects a particular format! There are plenty of bytes that won't display at all. :)
@@olbluelips Any byte that is not in an UTF-8 table gets displayed as a space, in a similar way to how anything that isn't ASCII gets displayed as a dot in a hexeditor. But it is similar in that Notepad will show you a lot of garbage text. Glitch tiles are kind of a lost art though, since memory segmentation became a thing... and as long as you're not dealing with a dying hard drive or graphics card, but it's kind of amazing that plaintext editors are among the only remaining programs to lack any kind of header checking, and will continue to open _anything_ as text. I would've expected them to implement a small arbitrary line length and filesize limit, along with rejecting any files with non-printable characters in them sometime in the 00s. I know Notepad has a filesize limit, but it'll stop responding and get extremely sluggish long before you hit it, and I know many text editors in Linux have a line length limit, but they'll all open files with invalid bytes in them. I know multiple codepages are a thing, but even then, it's a rare find in modern computing. I get Audacity's raw audio option, since it's impossible for them to tell apart what's intended to be digital audio and what isn't. The raw audio format itself uses the entire byte range and has no parameters or headers aside from the waveform's samples themselves, making literally anything 100% valid raw digital audio. But afaik, the different plaintext formats don't use the entire byte range and positions for printable text characters, so invalid bytes should be possible to catch, and in fact are caught...
They took the Game Boy and stretched every possible limit as hard as they possibly could to make this game. It's not exactly surprising that they needed to tape up a few holes here and there.
@@Leafia_Barrett I'd say Gold and Silver, along with Link's Awakening, pushed the Gameboy to it's limits. And yes, they do work on the original Gameboy.
"Looking at theoretical glitch pokémon that don't actually exist" I genuinely CAN'T wait for that. I've always treated glitch Pokémon almost as an unintended DLC for gen 1 lol, and I've always been fascinated by this type of stuff, I'm definitely subscribing to see that video.
@@koopa1018 I basically use C++ for its improved graphics/audio libraries (currently SFML). My actual code and game logic are mostly written in standard C, and I just swap in the C++ libraries and syntax wherever they differ (for example, iostream vs stdio). This makes it easier to port the code to older systems in the future, as the only things I need to change are the graphics and audio calls, and replace iostream's cout calls with stdio's print() function.
I want the next pokemon essential handbook to have a page for missingno that’s covered in glitchy text and messed up graphics. They’d also list him as the only bird type, making him incredibly rare.
you just made me look what pokemon essential handbooks are. they aren't a thing here, since instead of Scholastic, nintendo itself sells "pokedex books" for every generation, but they're a bit bigger, pricier, more high quality and more geared towards a non-child audience. they also sell matching guides for every generation of games and they've been doing this ever since firered and leafgreen in 2004. the experience of playing each new game is really enhanced by having a handy book easy to navigate with even the most intricate secrets and tricks by your side, so when you have any doubt on how to do something you can just look it up there, and maybe get lost reading interesting facts in the process and over the course of your playthrough end up much more knowledgeable of each new respective generation than if you had just played the games unaided.
@@TrigramThunder I always had the essential handbooks as a kid, but I never used it while playing the game because I always found Google more convenient lmao. but now I want to find one of my old handbooks and use it while playing
I would love to see what some of these glitchy Pokemon "should" or "were supposed" to look like. I'm definitely going to be waiting for that video. Pre-emptively, thank you for doing that, it's something I've always wanted to know.
This is not possible. Their graphics data weren't supposed to be anything, because they aren't graphics data in the first place. Imagine you take an image document, rename it to a txt, and open it. You will see random garbage, because that text wasn't supposed to be anything. It's not text.
Ok but, am i the only one that would be incredibly hyped to see missingno as an actual pokemon? It doesnt even sound too absurd when you realize theres already Porygon and its evolutions, which are basically not glitched MissingNo. Imagine seeing a Nintendo direct and theyre like "let us introduce a new pokemon" and its MissingNo I'D SCREAM
@@FoundedScreenLady But how did they come up with this design for missingno.? It has nothing to do with the original sprite or original MissingNo. except for the Bird Type and that its supposed to be a glitch Pokemon within the context of the games it appears in... Pretty bad design in my opinion. They should have stuck to something that more closely resembles the original Missingno..
There's actually a lot in the design that makes sense. The color palette matches the original Missingno., as well as the bird typing giving the bird-like body. There's a lot of subtle but minor details that link it together basically.
@@FoundedScreenLady Yes but when I saw the sprite I did not think of missingno. as it looks so drastically different to the original. One could maybe make a bird like Pokemon and distort the sprite to this weird backwards L shape. Maybe use animations that make the Sprite change from the fully distorted version to a non distorted version. You could even include inbetween stages and semi-randomize it to really make it look weird, glitchy and unstable. Missingno. should not look like a regular Pokemon...
@@SadoMessiahLP There is a sprite that does that distorted/non-distorted change though? Point is though, it's designed to look like an official Pokemon, not a glitch. It's a "what if" scenario. You're looking too far into the concept.
I feel like you should cover Charizard 'm, the 255th Pokemon, who also happens to be the embodiment of the Cancel button. It'd be very interesting to cover, I think.
Same with Q, who is actually a fusion Scientist since you can use a glitch to combine two Pokémon together. Like Pikachu and Lapras, or Porygon and the glitch Pokemon X x .
Holy shit, i can't imagine the amount of work you put to edit this video, all the animations on the compression side are just so well done and help understand what you're saying, kudos to you man.
It is rare to see such accessible and yet in-depth and correct explanations about this stuff. As someone who's dug into old DOS sprites and compressions in the 1-bit to 8-bit graphics era, I salute your efforts.
He explains it earlier in the video! Basically, when a glitch Pokémon shares its ID Value with a Pokemon (it seems that Pokémon have multiple ID numbers assigned to them in a number wraparound manner), it will attempt to load that Pokémon's sprite. Where it gets jumbled is when trying to calculate the bounding box, ending up at a non-square or rectangular shape. You made me think harder about this, and now I think I actually gained a better understanding for the whole thing. :)
It's strange that it loads Bulbasaur, considering that dex number 85 is actually Dodrio. But Bulbasaur is $55 $4000 Dodrio is $77 $4000 ID 224 is also $77 $4000 Weird stuff.
Thank you so much for this video, it exactly what I was looking for a cs student. You clearly have a great understanding of the content and a very impressive teaching ability. The animated graphics, use of real ingame sprites, and visualizations of data were extremely well crafted. The added touch of the other missingno(s) at the end was also awesome. Keep up the good work! :)
I was literally looking into how this was working last night. This has answered some of the questions I was had, like why it was appearing to make multiple copies of the data into RAM. I also saw they were using the stack pointer to move 2 bytes of data at once, which I thought was pretty nifty.
So with the blue and yellow source code leak, I'm excited to see what kind of videos you can make on pokemon now! There's so much cool stuff we're finding!
@@undergroundmonorail a lot of stuff leaked. Mainly localization files and what not. But the source for yellow and blue leaked, and I actually managed to compile yellow and run it. There's a ton of things already being found, like references to a pokemon pink. There were also releases of assets and graphics, but no actual prototype build of gen 1 Hopefully we'll be able to play that soon... Wouldn't it be so cool?
@@undergroundmonorail I'm sure they learned plenty while doing it. They could compare and see how well they did! Then put their skills to work on other games. If I had worked on it, I'd be very excited.
it would have also been very interesting to explain why you would meet missingno only after setting the memory in a certain way and some steps have to be very accruate, whereas other steps can be done in any way that you want. I know this was only about the appearance, but in general that would have fit he theme i think
You do a really good job of explaining complicated things at a good pace in simplistic ways, and the graphics really help. A lot of similar channels don't give you the pause to appreciate what was just said before continuing.
It looks like there's some other weird stuff going on, where despite those missingno forms having the same sprite indexes (see 182, 183, and 184 at 19:39), they have the pointers overriden in GetMonHeader (see home.asm lines 552-587 in the pret/pokered repo). Those IDs are also used by the objects in the Pewter Museum to actually display the fossils in engine/hidden_object_functions17.asm (I haven't looked into the ghost one). Mew has similar sillyness (note that its ID is 0x1F, probably filling in something else that was once a missingno).
@@Pokechu22 Mew was a really late addition to the game, after the debug tools were removed. The story is that after they were done testing the game, someone noticed that there was *just* enough space for one more Pokémon, and snuck in one despite the risk of breaking something. The ID can probably be explained by the programmer (idr who it was that added Mew unfortunately) just choosing an arbitrary slot that wasn't taken by a legitimate Pokémon.
2 years later and I still revisit this video sometimes. Another thing that you really have to appreciate is the extreme limitations they had to work with. On better or more modern hardware, improving compression to save 300 some bytes would be a waste of time for such a miniscule amount of data. But on ancient hardware like this, every single byte matters.
When you encounter a pokemon, the game looks for a bit representing the "seen" box in the pokedex. If it's 0, it flips it to a 1. This only works properly for pokedex numbers 1-151. Since missingno. has a pokedex number of 0, the pokedex is looking outside of the data it should. The bit it's actually checking is the largest bit of the byte that represents the quantity of the 6th item in your bag. So if you have less than 128 of the 6th item, the game finds a 0 bit at the point where missingno.'s "seen" data is supposed to be, and flips it to a 1. This adds 128 of the 6th item to your bag.
@@mechanisedsandcastle I always wondered about this one ha. Just looked at the code and when marking as seen it converts the pokemon internal id to pokedex index, which is 0 for missingno, then substracts 1 which underflows to 255, then uses it as an index to the wPokedexSeen bittfield ($d30a), which is only 190 entries long, this results in the out of bounds write (oob by 13 bytes at $d329 which is 6th item quantity). If the oob write would have been a byte before or after we would have got item mutation which would also be cool
@smb85 dkc94 from my understanding, there are basically 256 spots for pokemon, and because your name is being written to the encounter slots for pokemon, it will look for whatever your name's letters point to in memory in terms of pokemon, and it will very likely stumble across an "empty slot", at which point you get a missingno or similar. So now everyone is please free to correct me, but with the exact same coding, if there'd been 256 legit pokemon, there'd have been no possibility of missingno's appearing because the letters of your name would always point to a real pokemon.
@@foamingstuffye3951 Fun fact - there are exactly 256 pokemon in gen II, and it uses the exact same system. Not only does it not have any glitch pokemon, but every gen I glitch pokemon will turn into a real pokemon if traded to a gen II game using the time capsule. If anything like the Old Man Glitch were to exist in gen II, it would not make any glitch pokemon.
Been learning more about memory management and efficiency in C, and this video showed up under recommended. Great supplemental material for any C programmer seeing it all in action. Especially if you are nostalgic for the Gameboy. Thank you for all of the work you put into making this video.
I’m glad someone actually understands it and doesn’t spread misinformation. All too often does this happen. Also if anyone wants to know what a ‘sprite’ is it’s not a soda basically, a sprite is a game object that can be moved and animated. That’s a very basic description but every time he says sprite he is just referring to whatever Pokémon is on screen.
Well, the data isn't an image in the first place, so it would look like garbage no matter what. Maybe you could set reasonable top-left offsets, but it wouldn't look normal
Nice video! Ratchet and Clank 3 has a similar glitch text rendering system. It uses single byte chars for regular letters and double byte chars for special characters and images. You can trick the text entry system to let you type double wide characters by starting with the escape character (á = 128 32) the input would trim the 32 thinking it's a space, letting you inject the next byte with anything you can type. What proceeds is very similar to Pokemon! You can get the sprite renderer to point to some fun memory addresses.
This content creator has fostered a brilliant presentation style. His math/video game mechanics explanation to the layperson . Please donate to this brilliant classroom .
Hey, I’m currently in college (senior in EE) and I recently took a course in Microprocessors. Just want to say, your content is awesome, and extremely well researched, since I have always wondered how the games I love truly work. I can only look at Assembly for finite amount of time before I rip my hair out, so props to you for putting in that time and work. Keep doin what your doin man, it’s awesome!
It's actually pretty likely Game Freak merely copied over hex:00's data into all of the deleted Pokémon's index numbers, as MissingNo. and hex:00 have more in common then just their Pokédex number, such as starting moves and type. Game Freak likely removed all of MissingNo.'s level up moves and it's evolution data (hex:00 can evolve into Kangaskhan and it can learn moves over Level 100) for some reason and changed its name from garbage characters to MissingNo. as an error message so while debugging, they could easily identify encounters that needed to be replaced.
It's really the opposite. The developers filled in placeholder data for all Pokémon removed in development, and set their Pokédex numbers to 0. And, completely by accident, the hex:00 Glitch Pokémon happens to have Pokédex number 0, so it inherits some of that data. When loading Pokémon data, some things are derived from the Pokédex number, like the Pokémon's typing, starting moves, base stats, sprite palette when viewed on a Super GameBoy, experience group and much more, which is why hex:00 shares all of these things with Missingno. At 20:56 in the video, you can see the glitch Pokémon hex:DD. Notice that it shares its typing, starting moves, and even its sprite with Tentacruel. This is because hex:DD happens to have a dex number of 073, which is also the dex number for Tentacruel. In the Gen I glitching community, the term for this is "hybrid glitch Pokémon" or "glitch Pokémon family" - look it up if you're interested! However, other things like level-up moves, evolutions, TM/HM compatibility, are not derived from the dex number, but from the Pokémon's internal identifier. That's why 'M (hex:00) evolves into Kangaskhan, while Missingno. does not. That's also why Missingno. learns no moves by level-up, whereas 'M learns Pound at level 136 (yes you read that right, level 136). And Missingno. can't learn any TM/HM moves, while 'M can learn quite a bit of them, like Mega Punch or Mega Kick. All of this data is assigned to internal IDs, not Pokédex numbers. So 'M does not inherit any of that placeholder data. Notice that all of the "crazy/wild" things (typing, base stats, sprite) are related to the Pokédex number, while all of the "tame/placeholder" data (level-up moves and evolutions, TM compatibility, name) are related to the internal identifier. That's because Game Freak set some placeholder data in the Pokémon structures, but didn't do the same for the Pokédex number. In fact, dex number 0 is interpreted as dex number 256 and indexed out of bounds.
@@TheZZAZZGlitch I'm not a great programmer or hacker, but it looks to me like what you just described is how hacks that add either some of the cut beta pokemon or the 2nd Gen Pokemon (some of which were cut from G1) back into the game. Are there 2 copies of BIRD (or other) type in the ROM as well, which is how the Dark/Steel/Fairy hacks work?
Man you put so much work into these videos its beyond impressive. When I caught Missingno on my Blue cart it completely ruined the cartridge's ability to keep a save game. Even after swapping the battery in the cartridge, which I thought would remove any altered data, it STILL wont keep a save.
SRAM doesn't lose its data immediately when it loses power, it may keep bits and pieces for a while, you can help it out by shorting out the pins (e.g. with a screwdriver) in the battery socket. If you are sure the SRAM is completely cleared, and it's still not working, then I congratulate you on breaking the laws of physics.
Watching this I understand why gamefreak said that encountering Missingno can corrupt your game and make it unplayable even though this wasn't true. Obviously overwriting data not associated with the sprite because the tile size is designated too large could be pretty bad and gamefreak may not have known at the time what data was being overwritten, but may have known that some data unassociated with battle sprites was being overwritten when Missingno was encountered. It's just very fortunate that the only data being overwritten was Hall of Fame data.
Missingno is also (iirc) only harmless in EN R/B (and possibly JP Blue?), almost every other version's Missingno (including Yellow and JP R/G) uses incorrect data that causes crashes on load or other negative effects. It is astoundingly fortunate that the version with the easiest to see Missingno has the most harmless version, rather than it ending up like early FFVI revision Sketch Glitches.
@@InnocentGuillotine in think in Pokemon yellow version Missingno. has a cry which soft locks the game. It doesn't actually crash it. But if you encounter fossil or ghost sprite versions, they're harmless in yellow.
Although a lot of this is very hard to understand, I'm so glad someone finally did a video that is ACTUALLY in-depth. This is the kind of detailed stuff I've always wanted to hear about game glitches. Love it.
@@Captain.Dank64 Inaccurate. Missingno. cannot harm your game, the most it can do is corrupt your hall of fame. Sad to see that Missingno. has this accusation when in reality it's often separate glitch pokemon such as Q or 4 4 that do proper damage depending on the scenarios.
I partly wonder if Missing No.'s entry is due to Mew's inclusion. Since Mew was originally never meant to be added, it would make sense that the data would generate a missing entry. While it was possible to get mew before the glitch with event only, it still wouldn't fully explain Missing No. appearing. Unless it has something to do with the ghost/fossils acting as "dex" entries, but actually not being catchable.
Best explanation for MissingNo. I've ever seen. Well done! Turning your Hall of Fame record to garbage was a small price to pay for the useful side of effect of getting 128 Master Balls, Rare Candy or whatever else you had in the sixth item slot. I've read some Gen 1 developers actually credit that aspect of the glitch for helping boost Pokémon's early popularity.
i miss the days of no internet with my friends, and all these weird things in the game sparked rumours and theories. for me, I always saw Missigno as a special pokemon, the most mysterious. i wish nintendo makes him a pokemon in the upcoming series.
As someone who barely understands this sort of thing, I find it fascinating & oddly beautiful. Having it explained to me is like witnessing magic happen. lol
TLDR: The data parameters for MissingNo were unintended because it's a corrupted Pokedex number. That's why the game doesn't "read" its sprite properly. MissingNo goes way beyond the proper format for the Pokemon sprites and that affected the Hall of Fame data. So why does MissingNo exist in the first place? They were probably Pokemon removed from the final version. However, their data are still in the internal ID and the devs did not adjust their Pokedex number. P.S. 18:15 onwards is the best part.
Modern games are impressive, but I find the "juggling" of hardware limitations that was required for old games so much more impressive. And this is a really solid explaination of how that came to create one of the most iconic "errors" in games.
13:25 Ah yes my favorite Pokémon, A Pair of Rocks. Very useful against Scissors, not so much against Papers.
What's the betting it's not Rock or Ground type?
wraithcadmus I’m betting 10₽ it’s a Rock type and 20₽ it’s a dual Rock/Rock type
I always had trouble finding the Stone Stone so I could evolve it into Three Rocks.
Missed opportunity to say Scizor!
@@Bagabundoman Like Game Freak would be lazy enough to make a mon that's just three of an earlier one!
Watching that hall of fame data get overwritten with garbage was so satisfying.
Nice
Yeah, right?
THE SACRED TEXTS
Deoxal ==\
ah shid
sorry i was cleaning tea off my ipad screen
its kinda like how i watch sorting algorithm videos because they look so cool but i desperately want to stop watching it and get back to work
I'm guessing everyone else was playing Who's That Pokémon as the decompression algorithm was animating, yeah?
I actually recognized the rock sprite...
it's jigglypuff from above
Hester Franks That joke shall never be forgotten
I thought Magikarp was Rapadash.
"Who's that pokemon? It's OH GOD WHAT"
I actually got Magikarp right, I recognized the mouth and eye.
jesus this is an incredibly well made video
Oh hello there
Interesting to see you here!
8 likes lol
No lie your bowser unboxing made me so mad I didn't get one myself.
i agree bald guy
Him: “the actual compression and decompression algorithm used in the game is fairly complicated”
Also him: decompresses an entire 5*5 Pokémon sprite by hand on a livestream
Well, yeah, but he is a lot more capable than a spaghetti-code Game Boy game.
That part of the video was playing right when I read your comment. Coincidence? I think not
He did WHAT
@@Lokear lol what. You sound so dumb here. You think, in retrospect, that he is smarter than the Game Boy developers who made the game? (not spaghetti code btw, you clearly don't know what that means) It's a lot easier to understand old techniques than invent new and improved ones.... you think someone who recounts Newton's laws is smarter than them because they can write proofs faster? hahah bro. Just be quiet man.
Obviously it wouldn’t take him a lot of time, he already knows how it all works. A person with surface knowledge would take a while to figure it out.
I like how Magnemite's sprite is hanging out in the middle of that eldritch garbage like "sup"
Twice!
Same with Tentacruel, this is because they have "real" dex numbers and their names don't corrupt enough of the data to fuck up the sprite
charizard made an appearance as well
also Rattata.
@@TrueLimeyhoney thrice actually, with the first and third appearances being uncorrupted and the second one having the top left 8x8 square corrupted. check the video carefully and you'll see the same. also the beta sprite for tentacruel with crossed arms (not his actual sprite in game but stored here nonetheless) and the sprite for charizard.
My favorite thing about your videos is the fact that I can understand them, despite the fact I have never done anything with assembly language. You do a great job keeping it understandable while still diving *way* deeper than any other channel I've seen.
Thats true. My only criticism is that it is a bit too fast to get whats going on at some points. He should maybe make longer pauses between sentences to give viewers some time to think.
@@SadoMessiahLP .75x speed in settings
@@TheBooklyBreakdown No, that slows the entire video down to a crawl and does not adress my critique
Speak for yourself, I have no idea what's going on but I still enjoy it.
@ I don't like that either, however he makes almost no pause between sentences. If I did that in school when doing a presentation, I'd have gotten a worse grade. It's just better when you try to teach people something to make longer pauses... Not everybody is an expert on this field.
I'm talking about 1 sec. of pause between sentences...
Maybe I also feel that way because my native language is german and german feels like a slower language than english with longer pauses...
This is the type of in depth content that actually teaches you something. Great work!
very good editing work too
@@B3Band bruh if you are gonna be hating better you go away
@@B3Band We don't criticise what we enjoy, that is how humans work m8.
If only actual school was like this.
@@araigumakiruno who are you quoting?
The whole not shifting pokemon and just slapping missingno whenever a pokemon was removed is the classic "I shouldn't do this, but it'll do for now" programmer move.
Also I'm so amused by how the game didn't crash with all those indexes going out of range. Unreal Engine take note!
The game's code is as magical as the concept behind the games XD
Fun fact: modern games would have the potential for more ridiculous glitches, but they have error detection systems that INTENTIONALLY crash the game if something too weird happens.
@@elementgermanium Yeah, because one of the even weirder things that can happen is arbitrary code execution, which you definitely don't want in networked multiplayer games.
@@kylek.3689not to mention we're usually not dealing with such low-level programming. Early Pokémon games were likely coded entirely in assembly which doesn't have most of the safety nets most modern high-level languages have.
@@AllThoughts3rased Yeah, most early games were coded in assembly, including the first generation of Pokemon games. The programmers had to cut all sorts of corners to fit all that data into such a small cartridge _(I want to say like 16 KB)_ and have it actually function. The fact that those games work at all is a miracle tbh
Missingno graphics in a nutshell: A quality worker getting gibberish order from his new erratic boss.
Yep
Heh. Funni.
I used to program Gameboy Color for a living. This is slightly nostalgic for me. I don't understand why they divided the sprites into two bit planes unless that is how they are normally stored in memory. It has been 19 and 2/3 years since I last programmed a Gameboy, so I don't remember.
Because it'd compress tighter that way.
@@Kawa-oneechan I understood, but that does not seem to me like a given. Data is data, and it can compress either way. However, if it leads to more white space in the characters, then that totally makes sense.
Yeah, I had trouble understanding the developer's intentions here as well. The compression algorithm used here was more efficient when compressing data with lots of runs of zeros, so my guess is that either they tested it and found this format more efficient, or there was a different compression algorithm used earlier in development where this splitting made more sense.
@@RGMechEx The dumbed down Z80 in the Gameboy doesn't have much processing power, so doing more work decrompressing could be an issue. However, if it is a one time thing at the beginning of a level, then it is probably not a problem, because it would likely take a fraction of a second. However, when I was programming the SNES, it was constantly pulling information from the ROM as you scrolled through long levels.
@@RGMechEx In the 1990's, one of my coworkers was working on a compression algorithm that would combine similar looking characters. If the characrters were animated, your eye is not likely to notice that a pixel or two was off, because it would only be on the screen for a frame.
As a side note, I am impressed that the original Super Mario Brothers used the same characters for the clouds and the bushes, where just the pallete was different.
I love how MISSINGNO's sprite, even if it's just random data, still has something that looks like an eye.
It's like how we see things in clouds that's just part of the natural tendency of the human brain to recognize patterns that aren't necessarily there
and the true form looks like a face
And a mouth.
I don't see it
Derpion the Derpy me neither
As a computer science major, it continues to astound me that computers work at all
Life is a suboptimal computer in many places, so that's pretty amusing as well.
@@ais4185 Yep. Glitches in biological computers are what we tend to call "disorders", and oh boy there are SO MANY of those that exist.
@smb85 dkc94 really efficient calculators.
@smb85 dkc94 What they already were before the internet was invented. Number crunchers, digital libraries, and overly complicated typewriters.
Best of luck on your studies! Here's some spoiler alerts from somebody now in industry: computer and programs only work when you don't look at them too closely. As soon as you start setting eyeballs on them you realize it's just a pile of string and duct tape somebody set up 5 years ago and then ran away from before somebody else could notice.
Fun fact: The Glitch Pokemon that are missing from certain parts of the ID no.s will sometimes evolve into certain other Pokemon. There's one that evolves into Kangaskhan. People suspect that baby Kangaskhan used to be a Pokemon because of this.
now I'm wondering why this is the only time I've seen a UA-camr simply use avatars instead of usernames when listing all of their patrons. so elegant.
*memory: unprotected*
*buffer: overflown*
*hall of fame: corrupted*
*yep.. it's segfault time 😎*
MMU not found. Can't segfault.
make a segue
escape on your Segway
...Hotel: Trivago
@@kanden27 Trip: Advisor
I don't think it had an os
13:24 I like that you even edited the display output as well! 🤣🤣🤣
"A pair of ROCKS appeared!"
I remember people at the time saying that Missingno.'s sprite was actually a corrupted Yoshi sprite, lol
That may have been because of an April fools joke made by the devs of Pokemon. It went something like this, it was a dragonite that would evolve into yoshi.
He was erased from relating after failing his taxes
@@spongeboi.offical3901 huh
@@madajahpowell9023 Wait, was that *from* the devs? I knew it was in a gaming magazine, but I was under the impression that it was made up by the authors.
@@madajahpowell9023 It wasn't the devs, just an unofficial magazine
Back in the red/blue days, 10-year-old me was briefly obsessed with Missing Number. I noticed, after catching one just to see what would happen, that beating the Elite 4 afterward caused my winning pokemon images to glitch...one of them glitched into a sprite of Mew. After I realized Missing Number can evolve, I experimented for a pretty long time; convinced that there was some sort of massive secret locked within this glitched mess of pixels.
As with almost all the "secrets" (more like child folk-lore) from those games, there really was nothing to find.
@@gik0kaleidos417 K
@@gik0kaleidos417 k
I had the hall of fame glitch too
"Child folk-lore" is so fascinating to me. There's an academic term for this, "children's culture" -- the unique subculture created and maintained by children, with little to no influence from adults. Somehow through friendships with kids at other schools, cousins in other states and countries, etc. you end up with this global "children's culture" that propagates itself.
Even as we grow out of childhood, new young children replace us and maintain many of the traditions and beliefs we left behind.
I remember a Reddit comment where somebody shared some of the new Pokemon rumors he learned from his young child. The most fascinating thing was that corrupted versions of the same rumors from 20+ years ago still persisted among these young kids. Apparently this guy's kid heard about a secret Pokemon named "Mysterio" who could give you many items but at the risk of destroying your game.
The legend of Missingno lives on, retained through oral tradition amongst children. That's pretty mind-blowing to me.
@@PKNproductions I am probally wrong here so take EVERYTHING i say with a truckload of salt thinks this may happen due to it being like a stream of children lets say you are in middle school 6th grade first year there you hear about a mystical secret in a game called "I’m using this game as an example for a comment since i can’t think of anything AKA Needed Something" you try to find the secret in "Needed Something" you turn up blank but then you go onto 7th grade and hear about a secret in a game called "Needed Something 2" you tell some 6th graders about it they believe you you try to find the secret and find SOMETHING related to it but it doesn’t lead where you want you go onto 8th grade and hear of a secret in a game called "Needed Something The 3RD Final Battle" you try to find the secret and you find nothing but before that happened you told a few 7th graders about it and they believed you you leave the middle school for 9th grade but those 7th graders are now 8th graders and those 6th graders that were told about it by the 7th graders just like you did they are now 7th graders and tell the new 6th graders and this keeps looping AGAIN THIS IS JUST SOMETHING I THOUGHT UP TAKE IT WITH A TRUCKLOAD OF SALT (had to add like 50% of this cause accidentally hit enter button HOPEFULLY youtube goes "Yep you can edit this otherwise you have some half finished story)
Recently graduated with my bachelor's in computer science - you definitely earned a sub from me with this video!! Messing around with Pokemon glitches and roms as a child was one of my very first introductions to certain computer science concepts. I remember my dad teaching me hex conversions so I could work with action replay codes easier. But beyond that, I always felt a great deal of affection for the first gen pokemon glitches. When I was a kid, I used to do Red/Blue glitch runs where I would demonstrate to my brother as many Red/Blue glitches as I could in a single run over a couple of hours. Great fun.
Thank you for this video. It feels so nice to understand more about something that ended up pointing (haha) me in this direction in life. 'M having part of its sprite data in its name is poetic justice, and finally understanding why the Hall of Fame data gets completely chewed up is really cathartic. Seriously, thanks so much.
"The actual compression and decompression used in the game is fairly complicated so I won't go into much detail here."
You mean everything else is LESS THAN fairly complicated??
It's unfairly complicated
Curious question. By complicated was he talking about the wavelet transform?
@@professionalprocrastinator8103 I don't think so, that would have been very odd for the era. I found a page that suggests it uses a variation of the LZSS compression algorithm, which is a kind of dictionary coding algorithm.
Edit: wiki.nesdev.com/w/index.php/Tile_compression
@@xanfsnark Thank you, that was useful
This guy explains everything really well. You might have to rewind a few times but it makes sense with a very basic understanding of computers
It's funny how I think I'm going to understand this.
and how important for me to know this.
Like you want to make games? If so, same here.
I don’t understand it, but I’m obsessed with game and tech stuff
As a programmer who grew up with Pokemon Blue, this is particularly fascinating (though I want to know more about the decompression algorithm and should probably just go read it on the "pokered" project on Github). The workings of these older, simpler machines and the clever tricks they used to work around limited memory space and CPU speed are amazing to see. But this stuff is pretty much meaningless if you want to make modern games or software -- you shouldn't be doing anything like this, and if you do and it glitches out like this you just see "Segmentation fault" or a pretty backtrace pointing out the exact line in your code where the poo hit the fan.
@@joemck85 salute for you my friend
you said the compression system was complicated, but id still love a video on it (or at least some good resources for learning more), even if it is more technical than usual.
Same tbh, I wonder what kind of compression they implemented on the gameboy back then
Had to be something simple like LZ77 because the Gameboy doesn't have much RAM
@@Tatsh2DX yes, it was a variant of LZ77 wiki.nesdev.com/w/index.php/Tile_compression#Pok.C3.A9mon_LZ
Judging from how to the animations play out, it seems to be based on "write X 1s at position Y". I tried googling it but I could only find off-topic forum threads and dead links :(.
Edit: It looks like someone else found the answer while I was typing my reply, and my guess about the algorithm is quite inaccurate. Oh well.
What he means is *over*complicated for no reason
13:24 this is actually from a cut part in the game where you have to find the rocks before using them in the Safari Zone.
Broke: Gen 1 was held together with tape and strings
Woke: Gen 1 pushed Game Boy to its limits, and if it glitches, it's because it pushed too hard
Why not both? :)
hey now, played correctly it stays within its limits, people just tend to not like to do that for long
Nickolas Wilcox True. One of the reasons Gen 1 is so fascinating is that most glitches don’t come up/aren’t that noticeable if you aren’t looking for them, so you can have a perfectly normal game if you want.
Even now it’s fun to play normally, even if it’s a little basic and rough compared to newer games. The main thing that hasn’t aged well is the movepool.
@@wingedmirage4226 that and the type table, damn psychic's
Nickolas Wilcox That too.
Though you know what might’ve helped with Psychics a little bit? Having a Bug move that did remotely decent damage. The best Bug move in Gen 1 was Pin Missile. PIN MISSLE. Oh, and the only damaging Ghost move outside of Night Shade was LICK. (Which wouldn’t affect Psychics this gen anyway, but still).
0:12 pokemon were designed so well even the glitches have a recognisable silhouette.
Even the garbage is iconic.
You got 69 likes. Nice.
I don't see any glitch at that timestamp.
@@NoriMori1992 sorry, i fixed the timestamp
This is the single glitch that started my love back in the day for investigating weird game mechanics... it was my first glimpse into the ability to manipulate someone's programming in a weird but fun way
Squiggs 【Glitches - ROM Hacks - Speedruns】 you should look into corruptions
Do you have any favorite glitches? Besides Missingno of course.
Missingno was special in that it corrupted just all the right things. The sucker had no defense, randomized item 6 to find but got caught by the 99x item limit. Its not a pokemon I'd ever actually use in-game. But you sure loved those not so rare candies.
I remember reading as a kid about how the Pokémon data for MissingNo. comes from trainer data being interpreted as something it isn't. I think that was when I realized that there isn't really anything fundamentally different about types of data on a binary level.
“Now I’m not going to go in depth, but,”
*Proceeds to melt my brain with incomprehensible computer language*
now someone use smth like 8F or smth else to A.C.E every single possible glitch pokemon.
@@nameless...................... You mean 8F?
@@JetFalcon710 edited to fix error
@@nameless...................... Epic
why did my reply dupe to here
As a kid this felt so magical and mysterious...as an adult it is fascinating due to how the glitch becomes that way
Now all we need is a video about the "True Cry" effect that some glitch pokemon do.
Like with "4 4" in pokemon yellow. It just trashes the graphics, and the sound with encountering it.
Especially when it produces Pikachu's sounds in a crazy corrupted way.
This video about Pokemon opened a can of worms (well, maybe not worms heh), now we want all glitches explained on this channel haha! This guy is so good at this! Some other people try to explain glitches and either get so technical it doesn't make much sense to me, or I end up wanting more.
@konakonaa How does that explain how some forms of Missingno, to me at least, sound like Nidoran♂ or Dragonair? Was the sound pointer get sent to the right spot?
@konakonaa I do not play with 3Trainerpoké or similar glitches. I don't know what they'd do to my 3DS.
@konakonaa Doesn't seem to be the case with OG Metroid, from what I heard. Trying a vulgar password with older firmware can apparently brick the system. Now, I heard that you can fix the bricking by taking the battery out, but I'm not fool enough to even try the password on an emulator. It can be a killer POKE on an NES, as well.
@konakonaa well, we now have the source code so maybe there is a way to find it out.
This is going to sound a bit like an insult but isnt: I am 100% falling asleep listening to this. Your voice is perfect to soothe my anxiety. I can barely understand the maths behind whats going on but I’m still engaged and interested just enough to not fall into panic thoughts. Genuinely dude thanks for the amazing content!
For anyone curious, the blue tiles in the glitch list at the end come from control characters. When the game reads one in the script, it turns it into a whole word, often something cumbersome to write a lot or something dynamic like a player name.
Incidentally, this is why naming yourself "ASH" gets you different Pokémon from the Old Man glitch than choosing the ASH preset name. The preset names actually set your name to a control code that prints the selected name out when read, while the name you enter in yourself is just stored directly as text and printed normally.
@@LonelySpaceDetective Kinda.
The Preset Ash has all other names stored after it.
Like ASHREDBLUEJACK or whatever.
That's why you get different stuff and neither 'M nor Missigno.
The whole decoding sprites part was like "whos that pokemon?"
14:40
So what you're saying is, in-universe, Missingno's appearance is that of an eldritch data construct representing the very concepts of human speech and writing, and that's why its true form is indecipherable to mortal eyes.
That's fucking awesome.
ur right
Who thought that the uncorrupted data would show an actual sprite?
I was ready to see Missingno's true form tbh
Data is data. Even if it isn't the "right" kind of data, it will be interpreted as though it were unless there's error or sanity-checking going on.
Have you ever tried loading a .dll into Audacity (or other audio editing programs, presumably) as raw audio data? You can do that, and it'll play a sound. It might damage your speakers and/or ears, but it can do that because ultimately it doesn't care if the data it's getting is audio or not; it'll try to play it anyway.
@@LonelySpaceDetective you can also do the opposite and load any kind of extension on notepad to see raw data of anything.
@@pmangano You're almost right, but I'll nitpick. Notepad won't actually show you the raw data properly, since even Notepad expects a particular format! There are plenty of bytes that won't display at all. :)
@@olbluelips Any byte that is not in an UTF-8 table gets displayed as a space, in a similar way to how anything that isn't ASCII gets displayed as a dot in a hexeditor. But it is similar in that Notepad will show you a lot of garbage text. Glitch tiles are kind of a lost art though, since memory segmentation became a thing... and as long as you're not dealing with a dying hard drive or graphics card, but it's kind of amazing that plaintext editors are among the only remaining programs to lack any kind of header checking, and will continue to open _anything_ as text. I would've expected them to implement a small arbitrary line length and filesize limit, along with rejecting any files with non-printable characters in them sometime in the 00s. I know Notepad has a filesize limit, but it'll stop responding and get extremely sluggish long before you hit it, and I know many text editors in Linux have a line length limit, but they'll all open files with invalid bytes in them. I know multiple codepages are a thing, but even then, it's a rare find in modern computing.
I get Audacity's raw audio option, since it's impossible for them to tell apart what's intended to be digital audio and what isn't. The raw audio format itself uses the entire byte range and has no parameters or headers aside from the waveform's samples themselves, making literally anything 100% valid raw digital audio. But afaik, the different plaintext formats don't use the entire byte range and positions for printable text characters, so invalid bytes should be possible to catch, and in fact are caught...
for a game that is "held together by scotch tape" this sure is complex
They took the Game Boy and stretched every possible limit as hard as they possibly could to make this game. It's not exactly surprising that they needed to tape up a few holes here and there.
It's complex _because_ it's held together by scotch tape.
imagine rockstar goes apeshit and adds every single game in one disk?
@@Leafia_Barrett I'd say Gold and Silver, along with Link's Awakening, pushed the Gameboy to it's limits. And yes, they do work on the original Gameboy.
@@kirin1230 Just like how Sun and Moon pushed the 3DS... and then the Ultra games *really* pushed the 3DS.
'this video is getting pretty long'... No! Keep going
"This is too long" is something creators always worry about and viewers always wish they wouldn't.
For real. I would watch a feature length film about this.
@@helloofthebeach This guy could make hour-long videos and I'd watch every second.
Yeah, I'm not sure people with short attention spans tend to watch these kinds of vide... SQUIRREL!!!
Through the video I was getting more and more into a trance. By the end I felt like I was maximum absorbing information, and then it ended. D:
Me at age 10: “who’s that Pokémon?!” Me at age 30: “WHYs that Pokémon?!”
I don't get it. Where is the funny?
funny, did laugh
The most underrated comment
How's that Pokémon
@@braintwo3398 my charizard says hes doing fine
Shout out to my 4th grade classmate Ali Abedin, where ever he may be. He taught me the Missingno. trick and it changed my life forever. Lol
My guy doxed his classmate wtf
@@Mizu2023 Since when is giving a shout out "doxing" someone? Fkn zoomer.
"Looking at theoretical glitch pokémon that don't actually exist"
I genuinely CAN'T wait for that. I've always treated glitch Pokémon almost as an unintended DLC for gen 1 lol, and I've always been fascinated by this type of stuff, I'm definitely subscribing to see that video.
"discovering something that doesn't exist" - Phineas and Ferb
Oh no smile dog I gotta spread the word aaaah
Once I realised Pikablu didn't exist the glitch Pokemon became my Pokegods.
nice pfp
I wonder if RGME just looks at MissingNo and instantly understands him. Like being able to read the code in The Matrix.
Imagine saying something is boring but your profile picture is _C_
lol
It definitely helps that there is a disassembly of pokemon red/blue, so he can literally read the code :)
@@forgado7396 I mean, some people do still write in C rather than C++, even in today's world~
@@koopa1018 I basically use C++ for its improved graphics/audio libraries (currently SFML). My actual code and game logic are mostly written in standard C, and I just swap in the C++ libraries and syntax wherever they differ (for example, iostream vs stdio). This makes it easier to port the code to older systems in the future, as the only things I need to change are the graphics and audio calls, and replace iostream's cout calls with stdio's print() function.
I want the next pokemon essential handbook to have a page for missingno that’s covered in glitchy text and messed up graphics. They’d also list him as the only bird type, making him incredibly rare.
you just made me look what pokemon essential handbooks are. they aren't a thing here, since instead of Scholastic, nintendo itself sells "pokedex books" for every generation, but they're a bit bigger, pricier, more high quality and more geared towards a non-child audience. they also sell matching guides for every generation of games and they've been doing this ever since firered and leafgreen in 2004. the experience of playing each new game is really enhanced by having a handy book easy to navigate with even the most intricate secrets and tricks by your side, so when you have any doubt on how to do something you can just look it up there, and maybe get lost reading interesting facts in the process and over the course of your playthrough end up much more knowledgeable of each new respective generation than if you had just played the games unaided.
Francisco Manuel Sánchez Rubio cool
@@TrigramThunder I always had the essential handbooks as a kid, but I never used it while playing the game because I always found Google more convenient lmao. but now I want to find one of my old handbooks and use it while playing
This literally explains "Glitch City" beautifully for the visual learner.
I would love to see what some of these glitchy Pokemon "should" or "were supposed" to look like. I'm definitely going to be waiting for that video. Pre-emptively, thank you for doing that, it's something I've always wanted to know.
If you watched the video, doesn't seem to be possible.
This is not possible. Their graphics data weren't supposed to be anything, because they aren't graphics data in the first place. Imagine you take an image document, rename it to a txt, and open it. You will see random garbage, because that text wasn't supposed to be anything. It's not text.
Ok but, am i the only one that would be incredibly hyped to see missingno as an actual pokemon? It doesnt even sound too absurd when you realize theres already Porygon and its evolutions, which are basically not glitched MissingNo.
Imagine seeing a Nintendo direct and theyre like "let us introduce a new pokemon" and its MissingNo
I'D SCREAM
Google "Phancero"
It's basically a fan version of what Missingno. would look like, if it were to be an official pokemon.
@@FoundedScreenLady But how did they come up with this design for missingno.? It has nothing to do with the original sprite or original MissingNo. except for the Bird Type and that its supposed to be a glitch Pokemon within the context of the games it appears in... Pretty bad design in my opinion. They should have stuck to something that more closely resembles the original Missingno..
There's actually a lot in the design that makes sense.
The color palette matches the original Missingno., as well as the bird typing giving the bird-like body.
There's a lot of subtle but minor details that link it together basically.
@@FoundedScreenLady Yes but when I saw the sprite I did not think of missingno. as it looks so drastically different to the original. One could maybe make a bird like Pokemon and distort the sprite to this weird backwards L shape. Maybe use animations that make the Sprite change from the fully distorted version to a non distorted version. You could even include inbetween stages and semi-randomize it to really make it look weird, glitchy and unstable. Missingno. should not look like a regular Pokemon...
@@SadoMessiahLP There is a sprite that does that distorted/non-distorted change though?
Point is though, it's designed to look like an official Pokemon, not a glitch. It's a "what if" scenario.
You're looking too far into the concept.
I feel like you should cover Charizard 'm, the 255th Pokemon, who also happens to be the embodiment of the Cancel button. It'd be very interesting to cover, I think.
Same with Q, who is actually a fusion Scientist since you can use a glitch to combine two Pokémon together. Like Pikachu and Lapras, or Porygon and the glitch Pokemon X x .
As always your presentation is beatiful, and I love the way developers of these old systems had to deal with system contrains
I've never seen that patron avatar roll-in anywhere else and it's extremely cool.
Holy shit, i can't imagine the amount of work you put to edit this video, all the animations on the compression side are just so well done and help understand what you're saying, kudos to you man.
It is rare to see such accessible and yet in-depth and correct explanations about this stuff. As someone who's dug into old DOS sprites and compressions in the 1-bit to 8-bit graphics era, I salute your efforts.
Here's the thing about long videos; We all secretly love it.
god thats so interesting.. would love to hear on how some of the other glitch sprites came to be like that jumbled bulbasaur at 20:17
That appears to be the correct Bulbasaur graphic but the wrong bounding box.
Yeah, check out 6:30 or so for what wrong bounding-box sizes look like, everything gets a bit jumbled into the left columns.
what are you talking about?
thats the correct sprite for my favourite pokemon: jumblesaur
He explains it earlier in the video! Basically, when a glitch Pokémon shares its ID Value with a Pokemon (it seems that Pokémon have multiple ID numbers assigned to them in a number wraparound manner), it will attempt to load that Pokémon's sprite.
Where it gets jumbled is when trying to calculate the bounding box, ending up at a non-square or rectangular shape.
You made me think harder about this, and now I think I actually gained a better understanding for the whole thing. :)
It's strange that it loads Bulbasaur, considering that dex number 85 is actually Dodrio.
But Bulbasaur is $55 $4000
Dodrio is $77 $4000
ID 224 is also $77 $4000
Weird stuff.
Your visualization of writing out of bounds gives me giggles for some reason, it's great.
Thank you so much for this video, it exactly what I was looking for a cs student. You clearly have a great understanding of the content and a very impressive teaching ability. The animated graphics, use of real ingame sprites, and visualizations of data were extremely well crafted. The added touch of the other missingno(s) at the end was also awesome. Keep up the good work! :)
MissingNo - The Most Legendary non Legendary Pokémon in the World.
I was literally looking into how this was working last night. This has answered some of the questions I was had, like why it was appearing to make multiple copies of the data into RAM. I also saw they were using the stack pointer to move 2 bytes of data at once, which I thought was pretty nifty.
I noticed Gold/Silver used the stack pointer technique to quickly copy tile buffers to VRAM and was similarly impressed.
Thats why they load in looking like they're coming out of a shadow!!!!
Yeah, cool!
So with the blue and yellow source code leak, I'm excited to see what kind of videos you can make on pokemon now! There's so much cool stuff we're finding!
Did the source leak? I know there's a really good disassembly but I hadn't heard that
@@undergroundmonorail a lot of stuff leaked. Mainly localization files and what not. But the source for yellow and blue leaked, and I actually managed to compile yellow and run it.
There's a ton of things already being found, like references to a pokemon pink.
There were also releases of assets and graphics, but no actual prototype build of gen 1
Hopefully we'll be able to play that soon... Wouldn't it be so cool?
@@LaskyLabs Huh! That's really cool, though I bet the people who worked on the disassembly feel like they got a kick in the pants :P
@@undergroundmonorail I'm sure they learned plenty while doing it. They could compare and see how well they did! Then put their skills to work on other games. If I had worked on it, I'd be very excited.
@@LaskyLabs Yeah, I'm not being entirely serious, but I feel like on some level there would be a voice saying "come on!!"
it would have also been very interesting to explain why you would meet missingno only after setting the memory in a certain way and some steps have to be very accruate, whereas other steps can be done in any way that you want. I know this was only about the appearance, but in general that would have fit he theme i think
Yes I agree, I would love to learn more aboit how certain movements and button entries can lead to memory manipulation
12:37
Him: Let's create a new one just for fun!
*Me still trying to understand the old ones*
Amazing job, dude, seriously
You do a really good job of explaining complicated things at a good pace in simplistic ways, and the graphics really help. A lot of similar channels don't give you the pause to appreciate what was just said before continuing.
Me, watching this video and pretending to understand anything: Ah yes, I too like to buffer
Question though. What about when MissingNo took the form of a skeletal Kabutops?
It looks like there's some other weird stuff going on, where despite those missingno forms having the same sprite indexes (see 182, 183, and 184 at 19:39), they have the pointers overriden in GetMonHeader (see home.asm lines 552-587 in the pret/pokered repo). Those IDs are also used by the objects in the Pewter Museum to actually display the fossils in engine/hidden_object_functions17.asm (I haven't looked into the ghost one). Mew has similar sillyness (note that its ID is 0x1F, probably filling in something else that was once a missingno).
@@Pokechu22 Mew was a really late addition to the game, after the debug tools were removed. The story is that after they were done testing the game, someone noticed that there was *just* enough space for one more Pokémon, and snuck in one despite the risk of breaking something.
The ID can probably be explained by the programmer (idr who it was that added Mew unfortunately) just choosing an arbitrary slot that wasn't taken by a legitimate Pokémon.
2 years later and I still revisit this video sometimes. Another thing that you really have to appreciate is the extreme limitations they had to work with. On better or more modern hardware, improving compression to save 300 some bytes would be a waste of time for such a miniscule amount of data. But on ancient hardware like this, every single byte matters.
Watching this with bluetooth headphones
"This is also where the placeholder name of BATTERY LOW came from"
Wow. Perfection.
why does missingno make the 6th item in your inventory 255?
a video explaining glitch items would be pretty cool imo.
When you encounter a pokemon, the game looks for a bit representing the "seen" box in the pokedex. If it's 0, it flips it to a 1.
This only works properly for pokedex numbers 1-151. Since missingno. has a pokedex number of 0, the pokedex is looking outside of the data it should. The bit it's actually checking is the largest bit of the byte that represents the quantity of the 6th item in your bag. So if you have less than 128 of the 6th item, the game finds a 0 bit at the point where missingno.'s "seen" data is supposed to be, and flips it to a 1. This adds 128 of the 6th item to your bag.
@@mechanisedsandcastle I always wondered about this one ha. Just looked at the code and when marking as seen it converts the pokemon internal id to pokedex index, which is 0 for missingno, then substracts 1 which underflows to 255, then uses it as an index to the wPokedexSeen bittfield ($d30a), which is only 190 entries long, this results in the out of bounds write (oob by 13 bytes at $d329 which is 6th item quantity). If the oob write would have been a byte before or after we would have got item mutation which would also be cool
@smb85 dkc94 from my understanding, there are basically 256 spots for pokemon, and because your name is being written to the encounter slots for pokemon, it will look for whatever your name's letters point to in memory in terms of pokemon, and it will very likely stumble across an "empty slot", at which point you get a missingno or similar. So now everyone is please free to correct me, but with the exact same coding, if there'd been 256 legit pokemon, there'd have been no possibility of missingno's appearing because the letters of your name would always point to a real pokemon.
@@foamingstuffye3951 Fun fact - there are exactly 256 pokemon in gen II, and it uses the exact same system.
Not only does it not have any glitch pokemon, but every gen I glitch pokemon will turn into a real pokemon if traded to a gen II game using the time capsule. If anything like the Old Man Glitch were to exist in gen II, it would not make any glitch pokemon.
"This video is getting pretty long so I'll end it here"
This could go on all day and we would all be happy. Amazing work!
14:52: Sooo, you're telling me that "MISSINGNO." would technically be a reasonable and correct name for my own in-house text/dialogue box engine? ;)
Been learning more about memory management and efficiency in C, and this video showed up under recommended. Great supplemental material for any C programmer seeing it all in action. Especially if you are nostalgic for the Gameboy. Thank you for all of the work you put into making this video.
I’m glad someone actually understands it and doesn’t spread misinformation. All too often does this happen.
Also if anyone wants to know what a ‘sprite’ is it’s not a soda basically, a sprite is a game object that can be moved and animated. That’s a very basic description but every time he says sprite he is just referring to whatever Pokémon is on screen.
Oooh I'm deffo looking forward to seeing you attempt to recover the "real" sprite of the MissingNOs
me: **watches the same topic with different ways of explaning**
youtube: wanna see more?
"Fix" Missigno would be like a dream for a 9yo kid... I want see that in the Next video
Fixing garbage data ... hmm is it even possible?
Well, the data isn't an image in the first place, so it would look like garbage no matter what. Maybe you could set reasonable top-left offsets, but it wouldn't look normal
In the nicest way possible i fell asleep to this video.
Not because it was boring but it was nice to listen to something before a nap
Nice video!
Ratchet and Clank 3 has a similar glitch text rendering system. It uses single byte chars for regular letters and double byte chars for special characters and images. You can trick the text entry system to let you type double wide characters by starting with the escape character (á = 128 32) the input would trim the 32 thinking it's a space, letting you inject the next byte with anything you can type. What proceeds is very similar to Pokemon! You can get the sprite renderer to point to some fun memory addresses.
I absolutely love the way you present these videos, and your editing is top notch! Can't wait for more!
This is the first time I’ve heard of someone calling it Stairstep shaped
I watched this while high and enjoyed every bit of it, even if I don’t understand fully
This content creator has fostered a brilliant presentation style. His math/video game mechanics explanation to the layperson . Please donate to this brilliant classroom .
Hey, I’m currently in college (senior in EE) and I recently took a course in Microprocessors. Just want to say, your content is awesome, and extremely well researched, since I have always wondered how the games I love truly work. I can only look at Assembly for finite amount of time before I rip my hair out, so props to you for putting in that time and work. Keep doin what your doin man, it’s awesome!
I never knew that I wanted to know this. Very nicely done! The limitations of older hardware inspired some incredible creativity among programmers.
meanwhile game theorist be like "y'all wanna know if mario would survive the coronavirus"
LOL
Underrated comment.
Game theory looks at stuff like the lore and science behind the stories not the mechanics.
Don't diss my boi matpat.
@@blueartist4011 he’s already dead stop
@@kuromifan10 ...
It's actually pretty likely Game Freak merely copied over hex:00's data into all of the deleted Pokémon's index numbers, as MissingNo. and hex:00 have more in common then just their Pokédex number, such as starting moves and type. Game Freak likely removed all of MissingNo.'s level up moves and it's evolution data (hex:00 can evolve into Kangaskhan and it can learn moves over Level 100) for some reason and changed its name from garbage characters to MissingNo. as an error message so while debugging, they could easily identify encounters that needed to be replaced.
It's really the opposite. The developers filled in placeholder data for all Pokémon removed in development, and set their Pokédex numbers to 0. And, completely by accident, the hex:00 Glitch Pokémon happens to have Pokédex number 0, so it inherits some of that data.
When loading Pokémon data, some things are derived from the Pokédex number, like the Pokémon's typing, starting moves, base stats, sprite palette when viewed on a Super GameBoy, experience group and much more, which is why hex:00 shares all of these things with Missingno.
At 20:56 in the video, you can see the glitch Pokémon hex:DD. Notice that it shares its typing, starting moves, and even its sprite with Tentacruel. This is because hex:DD happens to have a dex number of 073, which is also the dex number for Tentacruel. In the Gen I glitching community, the term for this is "hybrid glitch Pokémon" or "glitch Pokémon family" - look it up if you're interested!
However, other things like level-up moves, evolutions, TM/HM compatibility, are not derived from the dex number, but from the Pokémon's internal identifier. That's why 'M (hex:00) evolves into Kangaskhan, while Missingno. does not. That's also why Missingno. learns no moves by level-up, whereas 'M learns Pound at level 136 (yes you read that right, level 136). And Missingno. can't learn any TM/HM moves, while 'M can learn quite a bit of them, like Mega Punch or Mega Kick.
All of this data is assigned to internal IDs, not Pokédex numbers. So 'M does not inherit any of that placeholder data.
Notice that all of the "crazy/wild" things (typing, base stats, sprite) are related to the Pokédex number, while all of the "tame/placeholder" data (level-up moves and evolutions, TM compatibility, name) are related to the internal identifier.
That's because Game Freak set some placeholder data in the Pokémon structures, but didn't do the same for the Pokédex number. In fact, dex number 0 is interpreted as dex number 256 and indexed out of bounds.
@@TheZZAZZGlitch I'm not a great programmer or hacker, but it looks to me like what you just described is how hacks that add either some of the cut beta pokemon or the 2nd Gen Pokemon (some of which were cut from G1) back into the game. Are there 2 copies of BIRD (or other) type in the ROM as well, which is how the Dark/Steel/Fairy hacks work?
Glad this popped up in my suggestions. I was trying to look this up a couple months ago to no avail
Man you put so much work into these videos its beyond impressive. When I caught Missingno on my Blue cart it completely ruined the cartridge's ability to keep a save game. Even after swapping the battery in the cartridge, which I thought would remove any altered data, it STILL wont keep a save.
SRAM doesn't lose its data immediately when it loses power, it may keep bits and pieces for a while, you can help it out by shorting out the pins (e.g. with a screwdriver) in the battery socket. If you are sure the SRAM is completely cleared, and it's still not working, then I congratulate you on breaking the laws of physics.
Watching this I understand why gamefreak said that encountering Missingno can corrupt your game and make it unplayable even though this wasn't true. Obviously overwriting data not associated with the sprite because the tile size is designated too large could be pretty bad and gamefreak may not have known at the time what data was being overwritten, but may have known that some data unassociated with battle sprites was being overwritten when Missingno was encountered. It's just very fortunate that the only data being overwritten was Hall of Fame data.
Missingno is also (iirc) only harmless in EN R/B (and possibly JP Blue?), almost every other version's Missingno (including Yellow and JP R/G) uses incorrect data that causes crashes on load or other negative effects. It is astoundingly fortunate that the version with the easiest to see Missingno has the most harmless version, rather than it ending up like early FFVI revision Sketch Glitches.
@@InnocentGuillotine in think in Pokemon yellow version Missingno. has a cry which soft locks the game. It doesn't actually crash it. But if you encounter fossil or ghost sprite versions, they're harmless in yellow.
Although a lot of this is very hard to understand, I'm so glad someone finally did a video that is ACTUALLY in-depth. This is the kind of detailed stuff I've always wanted to hear about game glitches. Love it.
I'm excited to see what "fixed" Missingno looks like.
@@ratt2634 I'm just gonna wait for him to do the video on it like he said he would at the end.
Missingno’s move set
-crash your game
- corrupt your hall of fame
- burn game
- delete save file
@@Captain.Dank64don't forget freeze/crash your game!
@@Captain.Dank64 Inaccurate. Missingno. cannot harm your game, the most it can do is corrupt your hall of fame. Sad to see that Missingno. has this accusation when in reality it's often separate glitch pokemon such as Q or 4 4 that do proper damage depending on the scenarios.
@@FoundedScreenLady And even most of those are safe, if you know what you're doing.
4 4 is never safe, but Q and Charizard M are fun to play with.
19:56 My favorite Pokémon: ▓ POKé WTRAINER
Avoiding too much data then: Highly complicated, but genius compressing of sprites.
Today: DeXiT
@the hevy excuse me? I never said anything about not understanding
20:03 TRAINER
Now the trainer is the Pokémon lol
I partly wonder if Missing No.'s entry is due to Mew's inclusion. Since Mew was originally never meant to be added, it would make sense that the data would generate a missing entry. While it was possible to get mew before the glitch with event only, it still wouldn't fully explain Missing No. appearing. Unless it has something to do with the ghost/fossils acting as "dex" entries, but actually not being catchable.
Best explanation for MissingNo. I've ever seen. Well done! Turning your Hall of Fame record to garbage was a small price to pay for the useful side of effect of getting 128 Master Balls, Rare Candy or whatever else you had in the sixth item slot. I've read some Gen 1 developers actually credit that aspect of the glitch for helping boost Pokémon's early popularity.
"A pair of ROCKS appeared!"
idk why but it's funny to me
i miss the days of no internet with my friends, and all these weird things in the game sparked rumours and theories. for me, I always saw Missigno as a special pokemon, the most mysterious. i wish nintendo makes him a pokemon in the upcoming series.
0:25 This "placeholder graphic" he showed is actually the gen 3 variant of missingno
it's not missingno, it's ??????????
As someone who barely understands this sort of thing, I find it fascinating & oddly beautiful. Having it explained to me is like witnessing magic happen. lol
TLDR: The data parameters for MissingNo were unintended because it's a corrupted Pokedex number. That's why the game doesn't "read" its sprite properly. MissingNo goes way beyond the proper format for the Pokemon sprites and that affected the Hall of Fame data.
So why does MissingNo exist in the first place? They were probably Pokemon removed from the final version. However, their data are still in the internal ID and the devs did not adjust their Pokedex number.
P.S. 18:15 onwards is the best part.
Modern games are impressive, but I find the "juggling" of hardware limitations that was required for old games so much more impressive.
And this is a really solid explaination of how that came to create one of the most iconic "errors" in games.
Awesome and detailed work here. Never played this game but were unable to stop watching this video. Good job.
20:11 216's name: Exists
Me: Coincidence?
I THINK NOT
F (pk) (mn) K