One obscure correction: At 21:58, you state that the reason Mario immediately drops the cork box while the bobomb thinks it's held is because the two objects are colliding, but the actual reason is unrelated and IMO somewhat interesting. When a bobomb is held normally, it has a fuse timer that counts up every frame. Once this timer is greater than a critical value, the bobomb sets a bit every frame telling Mario to drop whatever he's holding (expected to be the bobomb) so that it can explode. This forced drop only requires the bobomb to think it is being held, and so when you go to grab the cork box, the bobomb still tells Mario to drop it. This can be circumvented by overflowing the bobomb's fuse timer, at which point you can grab the cork box or any other object normally, and the bobomb will still be invisibly suspended in the air before Mario. Unfortunately, it takes over two *years* for this overflow to occur, so nobody's actually done it on a real console. Everything else in the SM64 section seemed pretty accurate to me though, and is a great explanation of what's going on!
@ZimmervisionCZ4 жыл бұрын
I love the idea of letting your N64 run for two years in order to perform this glitch on authentic hardware in real time.
@dogg-paws4 жыл бұрын
@@ZimmervisionCZ Someone needs to attempt this.
@jongyon7192p4 жыл бұрын
Your everyday KZbin comment from SM64 *LEGEND,* ds273.
@Trimint1234 жыл бұрын
Somebody called pannenkoek2012 to do this!
@PC_Simo4 жыл бұрын
@Trimint Pikachu I also had him in mind. I mean, he’s our go-to -guy, whenever there’s any glitches/analyzing of SM64 involved. 😎
@jarrod7524 жыл бұрын
These conditions should never happen in the first place right?... Said every programmer at some point ever.
@KyoukiJuuno4 жыл бұрын
Such is the life of a coder. Tho to be fair, it's easy to blame such mishaps on the programmer when really it's quite hard to figure out such extreme scenarios as presented here without extended periods of testing against wild theories. Needless to say, you usually don't have that kind of time or money to cover for this, whether you work on a game or otherwise professional software.
@jarrod7524 жыл бұрын
@@KyoukiJuuno Yeah I pretty much just blame the user's data at this point.
@NoahtheEpicGuy4 жыл бұрын
Cheers bro, I'll drink to that
@pyromen3214 жыл бұрын
This is why I’ve made it a habit to always check for all stupid, implausible edge cases, but hide them behind a constexpr if so they can be disabled if performance is a concern. Modern C++ makes balancing performance and safety fun and easy
@Damien.D4 жыл бұрын
"these conditions should never happen in the first place, right?" Also said some nuclear reactor designers, aerospace engineers,... Any complicated system have loopholes where glitches can occurs. And the more the system is complex, the smaller is the possibility to get it 100% bulletproof from the get go.
@jblackquill88134 жыл бұрын
tbh I love that you put human-made captions on your videos, it's super nice for me as a hearing-impaired person, especially in the wake of KZbin removing community contributed captions
@RGMechEx4 жыл бұрын
I'm glad you found them useful! I've always made sure to have accurate captions available for this reason.
@kingofcrap44144 жыл бұрын
Wait, they did what?! Why?? What's the point??? Holy shit, KZbin has totally lost it...
@DavidZMediaisAwesome3 жыл бұрын
@Sushiirull Allegedly. Nobody really had this problem from what i’ve heard
@ikidu11023 жыл бұрын
@@RGMechEx I know this has been most likely asked before probably, but it would be really awesome if you could make a series about the Nintendo64, similar to the SNES series as well.
@adamnielson423 жыл бұрын
@@ikidu1102 The nintendo 64 was famously confusing and hard to develop for, so if he did make a series it would probably be long and boring.
@frostyelkk4 жыл бұрын
The simple way to have perfect redundancy against errors; Don't have data.
@gum81914 жыл бұрын
The GNOME philosophy
@fabzter4 жыл бұрын
Perfect redundancy
@manelcastillogimenez1944 жыл бұрын
@Lorash I guess that depends on the language it was written in, and the compiler. Like maybe you compile a C Hellos World with some buggy compiler and the resulting machine code can operate in weird ways under given conditions? So not even the simple hello world is saved from bug hell :)
@computer-love4 жыл бұрын
@@manelcastillogimenez194 just pull a ben eater and do it in raw assembly
@runneypo4 жыл бұрын
@@computer-love bug free until you add a number to the wrong register
@najwan36724 жыл бұрын
the sm64 part was really fascinating. i've been watching pannenkoek2012's and his uncommentated channel videos explaining unintended mechanics and glitches in that game for quite a long time. while he did explained some things in great detail, the "cloning" mechanic and the whole "hands-free" ordeal weren't explored with this much detail. this video really clears things up. i went from "i.. kinda understand...?" to "oh, i see!". good illustration, clear analogy, and great presentation. all around.
@D0Samp4 жыл бұрын
At least the aspect of holding things and cloning is explained somewhat better in his newer video "How Holding Objects Really Works" (compared to "The Science of Cloning" on his main channel, which is older and more convoluted), which uses the terms "ticket" resp. "slot" to talk about a pointer to the held object. kzbin.info/www/bejne/eIvchnqKbr6Dnsk
@serraramayfield92304 жыл бұрын
Petition to rename "cloning", "superposition"? It's a more accurate name since the object is not being duplicated, just rendered twice.
@PC_Simo4 жыл бұрын
@najwan Yep, it would also be cool to see a full-on co-op video on SM64 by pannenkoek2012 and Retro Game Mechanics Explained. They *DID* interact in the comment section of RGME’s video on ”Credits Warp” on SMW, on his other channel, and Pannenkoek even helped in making this video, so they’re *DEFINITELY* at least somewhat familiar with each other.
@PC_Simo4 жыл бұрын
@Serrara Willow Mayfield - aka Fluttershy Makes sense. Another alternative would be ”Wrong Grab”, as in DK64. Also, bad_boot has also called ”cloning” ”a bit of a misnomer”.
@Kapin053 жыл бұрын
@@serraramayfield9230 Ah yes, trying to replace Cloning with Superpositions. That complies with the No Cloning Theorem!
@Monody5124 жыл бұрын
The list terminator literally *being* the CANCEL button in Pokémon is brilliant! They didn't have to include specific code to append that option.
@AhnafAbdullah3 жыл бұрын
It's pretty amazing yes, I wish more programs nowadays were like that.
@adamantanarchist2 жыл бұрын
And now I use it in all my profile, but I can't imagine implementing it so long ago.
@n3rdv10l3nc38 ай бұрын
The first Gen Pokémon games were a marvel -- they were technologically very clever to pull off everything they did, but that cleverness left us with a lot of... These situations.
@JetFalcon7106 ай бұрын
@@n3rdv10l3nc3 Yeah, the cleverness unfortunately involved cutting tons of corners and making lots of assumptions -- but it's okay because it makes for some very entertaining glitches :]
@JetFalcon7106 ай бұрын
@@n3rdv10l3nc3 Yeah, all the cleverness came at the cost of cutting tons of corners and making lots of assumptions -- it does make for some very entertaining glitches though
@mikebarr24364 жыл бұрын
"But that's fine, right?" [long pause]
@twistedsoul4 жыл бұрын
....... right? Wrong! You should perform a bounds check. But that takes more CPU cycles, more code and thus more space. Oh, well in that case. It should be fine, it will always be valid anyway...
@isaacedelman38594 жыл бұрын
I got an ad during the long pause, maybe that’s what it was for?
@ABaumstumpf2 жыл бұрын
"You should perform a bounds check." It did bounds-checks, but not enough as it did not check against something messing with its internal memory.
@lpfan44912 жыл бұрын
The thing with bounds-checks are the classic "You don't need them if you just program well. 4Head" If everything worked in the code for the Pokemon-itemmenu example, then you wouldn't need these theoretical max boundries of 0 and 20, because it's normally impossible to get above 20+cancel or below 0 anyways. The bigger question would be to figure out a way to only let the ID instead of the quantity be recognised as a potential terminator. After that, it works, all other errorcases are caused by unrelated glitches messing up the redundancy-value directly and in that case, we should just fix that instead of wasting time and romspace by placing unnessesary failsaves.
@TS68159 ай бұрын
My mind just pictures John Krasinsky mugging to camera during the pause
@zeropointer1254 жыл бұрын
My main question is why do objects that aren't meant to be thrown stop working when they are thrown. Pannen describes these phenomenon as the "one touch rule" and that clones "can't send or receive signals". Like those are nice colloquial explanations, but I was hoping for a more technical explanation. Edit: So because I've yet to hear a sufficient explanation, I just looked at the disassembly source code and figured out myself. In Mario 64, every object contains a behavior. This behavior is merely a pointer to an array of small scripts. As the game runs, each object runs through its list of scripts, most of which just call that objects loop function to update it's state. How throwing objects work is by the method `obj_set_held_state` which takes an object and a BehaviorScript. The behavior scripts used (bhvCarrySomething3-5) in question actually do nothing: they begin, then immediately end. What `obj_set_held_state` does is check if the object is holdable, then if it is, it checks if the passed BehaviorScript is any of those three. If it is, it sets that object's `HeldState` to either held, thrown, or dropped. This is done without every running the script However, if the object is not holdable, it will overwrite that objects behaviour variable with the passed behaviour, which remember from above, does nothing. For example, with the coin, this results is the coin not being able to perform its update loop, as its behaviour is now the do nothing behaviour. Now despite this, why can we still "collect" the coin, and why doesn't it disappear. That is because collision is handled completely separately from an objects behaviour. When an object is initialize, it registers a hit-box along with an interaction type to it. A completely separate method is used to handle interactions. When Mario interacts with a coin, that coin's interacted flag is set to INTERACTED and it is here where Mario's coin counter is incremented, and 100 coin start spawns. Normally during the coins update loop, it checks if it is interacted, and if so, spawns sparkles and unloaded. However because the coin's behaviour was overwritten, the loop never runs, hence never de-spawning. Now why are you only allowed to touch it once, that's because the code to handle interactions completely ignore interactions between Mario and an object whose interacted flag is set to INTERACTED, and similarly to despawning, it is most object's update loop which un-sets this flag.
@sacrijuts72654 жыл бұрын
My first guess would be that these objects don't have a behaviour associated when they're being thrown (since they're not supposed to) and they are set to a state where no action is defined (like moving, updating sprite, despawning). So they exist but have no way of doing anything. Unfortunately, I find it hard to find the code that'd be relevent in the decompilation and am not even sure I could even read what it would do. So these are just assumptions
@zeropointer1254 жыл бұрын
@@sacrijuts7265 i thought that too, but I feel like that should crash the game if it didn't have some for of error handling. And if they did have error handling, their decision on how to handle it seems weird to me, which makes me think that there isn't any error handling. That confusion is why I want the amswer
@EvelynFTTE4 жыл бұрын
They probably don't have code to be thrown, as they weren't designed to be.
@zeropointer1254 жыл бұрын
@@EvelynFTTE that much I already assumed.
@EvelynFTTE4 жыл бұрын
@@zeropointer125 maybe it's related to the physics then. Maybe it says for them to be pushed in a certain way, but they aren't supposed to move so they don't.
@2WaterGuns2 жыл бұрын
I appreciate you using the fonts / color schemes for the games you're talking about, as if the game itself was displaying this information to us.
@cerulity32k3 ай бұрын
i know i love it its so cool
@lior_haddad4 жыл бұрын
Ah yes, gen 1 Pokemon and SM64, what a great episode this is...
@ohnoitschris4 жыл бұрын
*siiiiiip * Yep, 1996 sure was a great year for games
@dogg-paws4 жыл бұрын
@@ohnoitschris A pretty big year for Nintendo in terms of software thanks to those two games alone.
@donalynlavarias73854 жыл бұрын
How dis has so many likes???
@tuxedobird3 жыл бұрын
@@donalynlavarias7385 It’s a reference to how buggy both games can be, and people thought that was funny. Not sure why you felt the need to ask honestly.
@markhaus3 жыл бұрын
A great year for games with exploits speed runners would use years down the line. Data Redundancy errors is a frequent source for the glitches they use
@MatthijsvanDuin4 жыл бұрын
For a spectacular example of things like this going wrong in a modern game, look up a Hollow Knight Any% All Glitches speedrun, which has example after example of game state being desynchronized intentionally to benefit the speedrun, breaking the game completely and allowing them to beat it in less than 15 minutes with no real bossfight along the way. (They only "fight" the Hollow Knight, and do so by duping a room from Crystal Peaks into his arena, causing him to commit suicide on the crystals.)
@serraramayfield92304 жыл бұрын
It shows you just how good Team Cherry is at debugging and patching...and how bad they were in the past about sanity checking. I'm confident Silksong will be WAY more concrete in its codebase.
@GameDevYal4 жыл бұрын
Nitpick: the item list in the first example contains 21 items, since you start it at ID 0 and end it at ID 20.
@WormNut4 жыл бұрын
GameDevYal Yep - at 4:04 for anyone else looking for it.
@Nick-40o4 жыл бұрын
I hate you.
@dragonflyK1104 жыл бұрын
Ah, off-by-one errors, no matter how experienced you get as a coder you can never fully escape them.
@Cloiss_4 жыл бұрын
@OskarN Are you sure you didn't see zero? Or did you see the zeroth one?
@PC_Simo2 жыл бұрын
The 21st ”item” is likely the terminator, a.k.a. the ”Cancel”-button.
@biscuitslash54434 жыл бұрын
Over a decade ago I saw a glitch compilation where somebody teleported while holding the penguin, causing the penguin to be seemingly erased out of existence despite still crying away constantly and having its mother be thankful for their return (but not actually give a star for it). Great to finally an in-depth and clear explanation as to what the heck was going on there!
@globalistgamer64182 жыл бұрын
"erased out of existence despite still crying away constantly and having its mother be thankful for their return (but not actually give a star for it)." 15 Most Heartbreaking Anime Deaths Of All Time
@pasu2k4 жыл бұрын
Congrats on the channel's 4 year anniverary :) Honestly one of my favourite channels with such well edited video's every time! (Even though I don't fully understand them all xD;; But they're still very enjoyable!)
@DarkonFullPower3 жыл бұрын
This exact issue appears in the Japanese version of the GameCube game "Megaman X Command Mission." The Force Metal UI screen (the game's non-weapon equipment) is one box larger than what the list is programmed to be. The final box is "shared" with the Main Weapon list which is stored directly after it. Placing an item in the final slot will allow you to "take out" said item as a weapon on another screen. Most famously, Force Metal #25 "Thunder Guard" becomes Weapon #25 "X-Buster Mk 3", which is X's best weapon.
@proxy10354 жыл бұрын
it would be interesting to have a modified ROM of Pokemon Red that has issues like these fixed. then give them to speedrunners and see if they can find more exploits... repeat this cycle until you have a near-bug free game.
@steeltalon9374 жыл бұрын
Isn't that literally what the whole concept of beta testers are nowadays?
@livvy944 жыл бұрын
That sounds awesome
@henke374 жыл бұрын
Redundancies can't just be "fixed". But you can certainly add in sanity checks that intentionally error/crash when something that shouldn't happen does happen. If the check is only in the debug build, it's usually called an "assertion", from the pseudo function assert in C commonly used to implement it.
@proxy10354 жыл бұрын
@@henke37 but why can't it be fixed? if you for example change the "remove item" function to check the Item count before actually starting the fuction, and only check the item ID for 255, and stuff like that. why isn't that "fixing" them, when it does fix the issue? it's just error checking to make sure it never gets into an invalid state.
@Tom-jw7ii4 жыл бұрын
Fixing this bug wouldn't do much. For it to even happen, the game already has to be messed up. It would be better to just fix the shore tiles, which they actually did in later revisions.
@marksmithwas124 жыл бұрын
(I'm around 4:46) oh, so the count variable comes first! That explains the weird glitch I did in Virtual Console with my transfer box 😅 I forget if it was Pokémon Gold or Crystal, but basically I discovered that if you change boxes to any box other than box 1, and turn the power off when it says not to, the Pokétransporter app will read Pokémon data from this box instead of box 1 (which it's hard coded to do), and will subtract the number of Pokémon in this new box from box 1. My box 1 is currently at a negative number I think and it's eating into the Pokémon Center Vs data table
@vaendryl4 жыл бұрын
your production quality was already stellar and this video and the previous one are again on an entirely different level. you really deserve 10 times the number of subs you currently do, easily.
@pixelator53124 жыл бұрын
(shows wet-dry world background) "there's an infamous-" me: (grabs popcorn)
@Peffse4 жыл бұрын
You spooked me with that not-black background. I thought I had screen burn.
@pvc9884 жыл бұрын
I thought that video compression got wonky.
@alyplanty08374 жыл бұрын
Man, why are most KZbinrs better at teaching that my actual technology teachers?
@AmeshaSpentaArmaiti4 жыл бұрын
I imagine passion has something to do with it. It’s easier to be super passionate about a single lecture that you spend months preparing, but if you have to do it again and again every six months, it gets to be more effort than it’s ultimately worth to do that much work. A lot of my professors were also pretty new, so maybe that’s also a factor?
@Lovuschka4 жыл бұрын
You can relate more to Pokémon and Super Mario 64 than to what your teachers teach. So there's an emotional connection that makes learning easier.
@hh4hooch4 жыл бұрын
@Lorash As an engineer who was a professor, it's more likely that they didn't want to settle for the money a professorship has to offer. As a senior Instructor at a state university I was making 35k with benefits, as a principal architect at my current tech firm i make 125k with annual bonus and benefits. The difference is drastic sometimes, you need to be okay with making a lot less money.
@Metaphysician24 жыл бұрын
At school, number of potential teachers = N. On youtube, number of potential teachers = N*1000000. Larger body to choose from = greater ability to find outliers.
@Suspicious_Dog4 жыл бұрын
@Lorash There's an old saying that goes "Those who can, do. Those who can't, teach."
@CubemasterXD4 жыл бұрын
honestly, best channel on youtube... I wish old games were taught at university, they are so interesting
@CubemasterXD4 жыл бұрын
@@B3Band thats a problem with your country (presumably its the USA), my degree in germany costs me 6 semsters *300€, for which i even get 6*150€ government assisted
@General12th4 жыл бұрын
@@CubemasterXD bUt ThAt'S cOmMuNiSm ThOuGh!!1!
@tecanec97292 жыл бұрын
I was actally about to say that many of the issues described in this video are still prominent today. This video is great at describing them, so I think there is some merrit to what you're suggesting.
@blocks48572 жыл бұрын
@@General12th blame subsidies idiot
@General12th2 жыл бұрын
@@blocks4857 I blame reckless, unabashed greed.
@yairkatz62234 жыл бұрын
only listed 7 consoles and one of them was the TurboGrafx-16. You sir have earned my respect
@KoopaMedia643 жыл бұрын
He lost my respect when he removed the Virtual Boy. Yeah, totally not a coincidence.
@gabrielv.43582 жыл бұрын
I had none, so no big deal, lol.
@twistedsoul4 жыл бұрын
Have you ever thought about looking into 8/16 bit era passwords that were used for saving game state? Such as Super Hang-On, Metroid, MegaMan, Castlevania etc? There's some interesting systems that programmers came up with for generating/validating (or in some cases not) the passwords.
@JetFalcon7106 ай бұрын
TheZZAZZGlitch did a similar video -- he didn't really explain exactly what was happening, but he did show off some silly passwords he managed to generate for a number of old games
@jckf4 жыл бұрын
This is also what Stale Reference Manipulation in Ocarina of Time is. It is very similar to how grabbing an object in SM64 functions, except the actual object is being moved by updating its position relative to Link's position.
@Ouvii4 жыл бұрын
I was going to ask this question. Thanks for the explanation!
@dusklunistheumbreon4 жыл бұрын
Yeah. They're so similar that Pannenkoek's cloning vid actually *really* helped me understand SRM.
@Twisted_Code2 жыл бұрын
funny enough, I encountered a data redundancy error similar to the inventory one just a day or so before watching this. A Minecraft mod known as Not Enough Items (or NEI for short) provides server admins and others with access to the "/give " command a GUI for doing so, but instead of just dropping the item on you like that /give command does, it inserts it directly into your inventory. Inventory can have at least 36 slots, so finding an empty slot wouldn't take too long, but to save time anyway, the mod keeps track of the last slot it inserted an item into, incrementing it each time it inserts. However, this redundant pointer is not bounds checked to make sure it doesn't go past the end of the "main inventory", resulting in storing junk into your armor slots and possibly eventually overflowing the data structure completely. Fortunately the pointer is reset and starts again at the first empty slot if it reaches a full slot, but I didn't figure out how to make it do that until yesterday, just hours before watching this video for the first time. I swear, the KZbin's algorithm is psychic sometimes!
@Twisted_Code2 жыл бұрын
now, the question is... does Minecraft 1.7.10 (the version I was on) qualify as a retro game? I mean, it's not the version everyone is playing, but it's still playable... jk, if this channel does a video on ANYTHING involving the inner workings of a Java program, I'm going to worry about isoFreeze's sanity
@hanthonyc3 жыл бұрын
Your visuals have so much polish and effort it's insane. I wouldn't understand very well if you had just explained, but the detailed visuals add a whole new layer. Favorite content on youtube hands down.
@Nikapocalypse4 жыл бұрын
Thanks for this. Pannen's explanations of things are great, but for me personally, having it explained via code terminology allows me to finally actually get it.
@guttsu4 жыл бұрын
I love these videos, despite them being a bit beyond me. And I gotta say that your animation game is stellar, very slick production without being distracting. Very well done.
@IXSigmaXI3 жыл бұрын
i love your use of movement and color to connect what you're saying to the illustration. it makes it so easy to follow along.
@danhorus4 жыл бұрын
Hi! I just wanted to say I really enjoy your content and all the effort you put into understanding and presenting all of this technical information. The Missingno glitch videos are some of my favorites, which is why I wanted to leave a suggestion about another glitch I think would be nice to look into: the Sword Brothers Chapel Exit glitch, for Castlevania Symphony of the Night. It's supposedly one of the first glitches discovered in the game, in which you simply perform a a spell in the Royal Chapel area, and that's enough for the door's transition trigger to stop working for some reason, allowing you to fly out of bounds and gain some extra map completion. I couldn't find any technical explanation as to why this happens, though, so I thought I could mention it here :)
@andrebeller4 жыл бұрын
Man, as a music teacher, I'm in awe of your teaching skills. I don't know much about programming at all, and I feel like I followed you the whole time.
@yellowcrescent4 жыл бұрын
Great video and explanation as usual! Although in my mind the term "Data Redundancy Error" has a very different meaning in other CS contexts (such as in relation to parity checking, Reed-Solomon coding, etc.), so was a bit perplexed at first. lol
@parnikkapore2 жыл бұрын
sync error would sound like something related to multithreaded execution and race conditions I think, "state inconsistency", maybe?
@kleinesfilmroellchen4 жыл бұрын
Thanks for this amazing video and thanks again for letting me use your Pokémon background! You really understand the art of teaching CS with fun, games and glitches.
@derdehv4 жыл бұрын
While watching the Mario 64 portion of the V video the file selection music started playing in my head.. thanks for the great explanation!
@sirflimflam4 жыл бұрын
I love this channel. It's like...interesting answers to questions I never asked. I really miss the simplicity of old hardware. Such easy to manipulate memory. The days of switching on my NES game genie and entering gibberish codes to see what we can mess up or make interesting, almost never resulting in a simple crash, but almost always changing some weird data that causes the screen to erupt into weirdness or what have you.
@DanAtuch_Archives2 жыл бұрын
10:00 when showing a list of bits, when the bit for the item gets changed, the item (still blurry in the bg) changes as well. Nice touch.
@schoggi5553 жыл бұрын
i still admire how well you can explaing pretty complex things by neatly demonstrating it in the actual game right next to diagrams and charts that are animated in sync! i love that!
@schmoferino2 жыл бұрын
I ADORE hearing how games perform certain functions, it's so interesting to hear and understand.
@defensivekobra38734 жыл бұрын
You just adequately explained those two main weird things you see glitch showcasers and speedrunners do all the time in these games, thanks
@endymallorn4 жыл бұрын
Whenever someone starts talking about invalid states in Pokemon, I know that it's going to come back to the mother of all glitches, Missingno.. The moment you started talking about the item list and the terminator being 255, I knew where you leading; plus the "not "less than" but "not equal to" was a pretty solid hint that it's going to be a value outside the expected table - which happens with the item part of the Missingno. experience.
@thecolacat_ Жыл бұрын
I love how 1920x1080 in Full Screen makes the each game simulation's pixel not softened
@forbiddenera3 жыл бұрын
As a developer..wow..your videos are just insane.. so detailed, well animated and explained in a clear way that anyone should be able to understand, at least on some level. Instant sub.
@CurtisUpshall4 жыл бұрын
Awesome explanations and great animations! You just taught me how the 0:00 speedrun for Pokemon is achieved
@miles31732 жыл бұрын
I've just noticed the animation on the Quantity of Item #5 while it was blurred during the explanation of MissingNo setting the MSB of it.
@deepmind53184 жыл бұрын
I don't know what he's talking about in detail, but i did get an abstract understanding of how the game handles these things.
@Darkness21793 жыл бұрын
When a video is so good you don't even realize 20+ minutes have passed. Seriously, I was here expecting the next example and boom the video ended. It's been a while since this last happened to me.
@StellariumSound4 жыл бұрын
The amount of coordination between the audio and visual components of these videos must be insane.
@AniGaAG2 жыл бұрын
Watched a few videos, subscribed; this is exactly the kind of deep _technical_ insight into games that I find fascinating as a perfect supplement to all the game design essay channels I am subscribed to.
@sierranicholes67122 жыл бұрын
these videos are so well-explained! i can imagine exactly what the code would look like, and i think that even people who don't understand code would be able to get a sense of what's going on.
@donat56173 жыл бұрын
In the example at the beginning you sold the Virtual Boy. What a nice touch!
@Zer0mavrickTV Жыл бұрын
This still blows my mind. I never knew you were a KZbinr. I thought you were just a genius SMW speedrunner LMAO
@pleasedontwatchthese95934 жыл бұрын
I did not know what to call this in the past. I had named them caching errors because I was failing to properly maintain cached values.
@ClassicTVMan1981X2 жыл бұрын
The original Super Mario Bros. for the NES also had some redundant data in its source code, and I hope you might look into that on a future episode.
@electra_4 жыл бұрын
Really interesting! Makes it a lot more clear exactly how/why these glitches work and it fits in well with what I've been learning in Computer Science
@mjc09614 жыл бұрын
I really like how you use the game's font for each example. Very nice.
@superninja69674 жыл бұрын
7:35 "so it's fine right?" The video: Cuts to ad
@NoriMori19924 жыл бұрын
Lol yeah that happened to me too 🤣
@jceggbert52 жыл бұрын
The game Human Resource Machine is really great at making you think like an old console programmer - your resources are VERY limited and you have to do some crazy-risky stuff to meet their performance targets. It's a great puzzle-programming game that has made me appreciate those who program in assembly.
@citrusella-nomorecraptions2 жыл бұрын
Something about the way this video presented the Pokemon list actually made me figure out a potential way to fix a database issue I'd been having in an app I've been working on! ...I wasn't even having a redundancy problem. XP
@ThePhantomSafetyPin2 жыл бұрын
"But that's okay because these conditions should never happen in the first place, right?" Unfortunately, MISSINGNO. wants to battle...
@MIchaelArlowe2 жыл бұрын
Ah, the dangers of doubly linked lists.
@warmCabin4 жыл бұрын
This would be such a good lesson in a college class. "Here's how you make a linked list. Now here's how it can go _wrong!_"
@cerulity32k3 ай бұрын
Honestly, showing what goes wrong is a great way to demonstrate how safety is done. Like race conditions, which you might not even think of even know of when coming across one for the first time.
@deathcatthor2 ай бұрын
I love this guy. I like how the autotranslate captions let me watch in french Aswell
@Gameboygenius4 жыл бұрын
13:04 suddenly, abstract Pikachu!
@erik19borgnia4 жыл бұрын
Really nice explanation of the List Underflow glitch! Thanks!
@WalnutBun Жыл бұрын
2:10 this actually brings up a big debate in CompSci over whether it's better to have a list (such as a string, which is just a list of characters) keep track of its length or whether the end should just be indicated with a special byte (usually 0x0, aka NULL). Both have their own advantages and drawbacks, and there really is no "right" answer. A null-terminated list could theoretically be as long as it wanted, while a length-specified list would either be limited by the number of bytes used to store the length, or would have to figure out a way to have a variable-length list length indicator. Of course this isn't terribly relevant in modern programming or game development - since most coding today takes place in high-level languages that handle stuff like that for you, most programmers don't have to care whether or not a list's length property is calculated on-the-fly or read out of memory.
@roland.w Жыл бұрын
I have an idea for a video, I think that looking into super mario 64's "parallel universes" might be a cool video! It's probably really complicated but, it would be neat to finally know why that happens!
@connor_bell4 жыл бұрын
This is such a good video! It's very useful and did a much better job of explaining cloning than any other video I've ever seen on the topic!!!
@niconico4864 жыл бұрын
I've been looking for a video like this since forever now, thank you so much!
@lisafairymeadow20343 жыл бұрын
2:00 Yarandev be like "I'm just gonna ignore that."
@gabrote424 жыл бұрын
This is a fabulous channel. I loved to find out why that happens. Cheers
@PrivateSi3 жыл бұрын
My favourite dynamic list/array header in 64bit mode overloads the array pointer with an item count field.. I'm also developing a 'clean object, dirty pointer' object pointer system too... I've gone with a 44 bit address field and 20 bit count for my main list type. Million items is enough for most lists. Million classes is a lot too.. Only takes a shift or an and mask to extract a field and it's FASTER than storing the size field at the start of the array.. Class system is also no slower than putting a class pointer at the start of an object (with virtual methods) as it uses a constant array partitioned by 2 power n bytes so just an extra shift in total.. Bit wasteful as each class with a virtual method table takes up as much space as the largest VMT but saves 64bits per object so easily makes up for it.. Access is as fast as a standard C++ object. All dirty pointer ops are inlined in the base class so no procedure calls added when accessing the overloaded pointer fields...
@randomnessproductions42123 жыл бұрын
Thanks, now I finally understand the Mario 64 cloning glitch! You're right, the name really is misleading, considering it doesn't actually make objects duplicate like in the Pokemon glitch.
@Ganondurk4 жыл бұрын
You should have had the jolly roger bay theme playing while explaining the SM64 glitch.
@johneygd4 жыл бұрын
The last part was the most interesting part as it was so much more clearer what you actually mean by this,
@antshield4 жыл бұрын
Omg!! This is crazy, thank you for showing me this! 😄 I've been wondering this for so long. Thanks for answering a request I've had good sir.
@Arto914 жыл бұрын
This channel makes the most entertaining videos I don't understand
@an_annoying_cat4 жыл бұрын
I saw the thumbnail and was like wait this isnt Pannenkoek
@MerryMidlight4 жыл бұрын
This feels really useful as a modern programmer as well. Thanks!
@jao8584 жыл бұрын
This was a super interesting & thoughtfully presented video. Thank you!
@b.clarenc95174 жыл бұрын
So this is why Missingno interacts with the 6th item slot. I had always wondered why it was specifically and consistently that item.
@firepaca2626 Жыл бұрын
Damn you can really feel time slow down in this video it's just so, informative
@WillowEpp4 жыл бұрын
10:41 If your footnote video teaches people that underflow is specifically a floating point phenomenon, I will love you even more than I already do.
@RGMechEx4 жыл бұрын
Unfortunately not, but maybe I will clarify the distinction in a later video ;)
@JackBond12342 жыл бұрын
It's fascinating that the vagueness of a land border graphic causing a developer to forget to add encounter stats to a strip of land made it possible to manipulate an encounter of missingno, causing the index overflow, causing the item count to be in an invalid state that could be manipulated to expose all of RAM and allow arbitrary code execution.
@bluestartalron85024 жыл бұрын
Wow, this really pleased my turbonerd brain, is it bad that I understood and properly comprehended most everything of what you said without pausing? And while everyone's talking about the SM64 bit, which makes sense considering it's a better game in my opinion, the 1st gen Pokemon segment still got me quite interested Funny how one design element can totally break apart due to tricking the way it was programmed. Ah, the joys of old processors and their quirks.
@8bitalex7 ай бұрын
The two-way hold link gave me yoshi item-swap flashbacks Edit: yep, the unloading and holding any item is definitely similar
@EpiX0R4 жыл бұрын
Love it, instructional and ealy to follow! Well done! You did it again!
@SylveonTrapito4 жыл бұрын
I love learning programming this way
@ash07874 жыл бұрын
There isn't enough youtube channels ( as far as I know ) about game programming. I studied it at university over 10 years ago and I had to basically guess how most games worked. The course didn't really try to teach us any of that stuff... it was just a standard computer science course with digital media creation ( art ) modules thrown in. As a result I am really disillusioned with university, especially where its related to programming or video games.
@danny3xeer4 жыл бұрын
I understood this video more than I did anything in school
@starleaf-luna Жыл бұрын
well, the redundant list is also used for your party pokemon: in memory, after 7 bytes are reserved for player's name (6+1 terminator), the next byte @ d05f is the amount of pokemon you have in your party (0-6), then d060-d066 is which pokemon you have (species id)... terminator FF byte follows after the end of the list (or at d067 if 6 pokemon) and then starts the data for each pokemon, which always starts with the species id. so, the species id of a pokemon is literally stored twice in memory in a system that has 8k of wram (gbc had 12k, cause you could bankswitch wramx (d000-dfff) in one of two banks, but first gen didn't use it, only crystal version did).
@VBshredder3 жыл бұрын
You got a like for including the TG16 in that list of consoles in example 1 👍
@danielevans74392 жыл бұрын
“So, what message speed do you play at?” “Master Ball”
@PokeMaster222224 жыл бұрын
1:48 It's Count-Along Time with Retro Game Mechanics! Let's count this list together, kids!
@ag0ny4 жыл бұрын
case1: this Is why you Always make your list lenght a ^2 so you can AND the index and make It wrap around if something goes awry as you cannot go out of bound.
@therandomraddish72814 жыл бұрын
Wow I've always lived data redundancy
@gamefoun2 жыл бұрын
This video was fascinating, great job.
@notalostnumber86604 жыл бұрын
KZbinr: *is going to talk about SM64 The pancake: hello
@viridian68124 жыл бұрын
*The Dutch pancake
@30IYouTube3 жыл бұрын
19:44 - Cloning can be abused in ways that are pretty broken as the HOLP is also screwed - i.e. it doesn't update, so when it is thrown, it will go to the HOLP which is no where near Mario.