Data Redundancy Errors Explained

  Рет қаралды 264,278

Retro Game Mechanics Explained

Retro Game Mechanics Explained

Күн бұрын

What can happen when a game's variables get out of control and the system is put into an inconsistent state? It's all explained right here.
LINKS
Twitter (updates): / retrogamemechex
Patreon (support): / rgmechex
SubscribeStar (support): www.subscribestar.com/rgmechex
Discord (discussion): discord.rgmechex.com
INLINE LINKS
* footnote video: • * Data Redundancy Erro...
EXTERNAL LINKS
Pokémon Red disassembly: github.com/pret/pokered
Super Mario 64 decompilation: github.com/n64decomp/sm64
PATRONS
Thank you to all of my supporters on Patreon and SubscribeStar. Your help keeps the channel going!
Anthony Losego, Dan Salvato, F. Murmel, Jonathan Aldrich, Ange Albertini, hyperforce, Avi Drissman, Steven, Mike Gerow, Larry Koubiak, Tina Wuest, Owen Christensen, Gynvael, Buddy, Chris Margroff, Brandan Lennox, Jason Hughes, Diamond Ice, Chris Post, Cypher Signal, Rupix, Gabe S, krivx, Walter Huf, David Spalding, Acceleration Shark, Rory Kelly, Carl Cassler, Joe Mecca, Michael Greb, Kefen, Bonzu Pippinpadolopsicopolis IX, leftler, Scott Beca, 19day, Michael Dragone, John Losego, Travis, Arthur Kunkle, Jordan Wright, Stephan J Hennion, Node1729, Andrea, Michael Cafarelli, Red Sona, KieferSkunk, Nik, tripper, Nebelwerfer Granitara, Sten, 333Rich333, Glenn hEADcRASH Sugden NPC, Alex Yancey, David Mazarro, null, Ryan, Corey Ogburn, Martin Trozell, Garret Kelly, Jake Hickman, Joel Kuhn, Dan Shedd, Sembiance, Xander479, 4F Panda, David, A Sentient JDAM, Alec Johnson, Brian Henriquez, Travis Nellor, Zach Hugethanks, dishsoap42, Yakov, Oxygen Chen, RetroReversing.com, yuriks, Ceres, Diego Santos Leão, Jeremiah, Chris Connett, Mark, Matthew, sapslaj, Jonathan Scott, Xkeeper, Bjoern Hansen, ers35, Pixy011, Daniel Bernard (ReckedCat), Lukas Kalbertodt, Vier Ladair, Bwangry, iPaq, Jeremy Wright, David Johnson, Brandon, Matt Shepard, Felix Freiberger, Sypwn, Niles Rogoff, Reflet, Yann Le Brech, Evan, Eugene Bulkin, Walter Weaver, Articate, Julien Oster, buzzert, Steve Losh, Samuel Stoddard, HattyJetty, Paige ? Hex, Yeero, Cruz Godar, Linh Pham, Noah Greenberg, Nick Rogers, Sean Nelson (audiohacked), Bryce, Andrew Yukhymchak, Sean Bryant, John Gabriel, BazBadger, Kyle, Master Knight DH, Tim Romero, Michael B., Eric Loewenthal, Adrian Haslinger, Proxy, Nolan Varani, Thoscellen, Daniel Robinson, Hans Jorgensen, Daniel A.A. Pelsmaeker, Aaron, Max Gartung, Nicolas Dohrendorf, Eric Hoppe, Chaz Serir, derHinek, Gyiyg, samfu, Dominic Wehrmann, André Greubel, Anon42, Urda, Ted Berkowitz, araknofennisti, AA, Joseph Torres, serhef, Daniel, Patrick Johnston, Rodrigo Monteiro, Punchmaster, Stephen Bank, Thomas Berg, Dasterin, Matthew Yu, Alice Hartley, Marcus N., Agoaj, Nicholas Carhuff, Aaron Murray, Epsilion, Olivier Cahagne, bob johnson, Seth N. Hetu, Permian Strata, supergtt, & Alex Berliner!

Пікірлер: 479
@jarrod752
@jarrod752 3 жыл бұрын
These conditions should never happen in the first place right?... Said every programmer at some point ever.
@KyoukiJuuno
@KyoukiJuuno 3 жыл бұрын
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.
@jarrod752
@jarrod752 3 жыл бұрын
@@KyoukiJuuno Yeah I pretty much just blame the user's data at this point.
@NoahtheEpicGuy
@NoahtheEpicGuy 3 жыл бұрын
Cheers bro, I'll drink to that
@pyromen321
@pyromen321 3 жыл бұрын
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.D
@Damien.D 3 жыл бұрын
"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.
@frostyelkk
@frostyelkk 3 жыл бұрын
The simple way to have perfect redundancy against errors; Don't have data.
@gum8191
@gum8191 3 жыл бұрын
The GNOME philosophy
@fabzter
@fabzter 3 жыл бұрын
Perfect redundancy
@manelcastillogimenez194
@manelcastillogimenez194 3 жыл бұрын
@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-love
@computer-love 3 жыл бұрын
@@manelcastillogimenez194 just pull a ben eater and do it in raw assembly
@runneypo
@runneypo 3 жыл бұрын
@@computer-love bug free until you add a number to the wrong register
@jblackquill8813
@jblackquill8813 3 жыл бұрын
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
@RGMechEx
@RGMechEx 3 жыл бұрын
I'm glad you found them useful! I've always made sure to have accurate captions available for this reason.
@youtubeneedstochange4414
@youtubeneedstochange4414 3 жыл бұрын
Wait, they did what?! Why?? What's the point??? Holy shit, KZbin has totally lost it...
@DavidZMediaisAwesome
@DavidZMediaisAwesome 3 жыл бұрын
@Sushiirull Allegedly. Nobody really had this problem from what i’ve heard
@ikidu1102
@ikidu1102 3 жыл бұрын
@@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.
@adamnielson42
@adamnielson42 2 жыл бұрын
@@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.
@ds27315
@ds27315 3 жыл бұрын
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!
@ZimmervisionCZ
@ZimmervisionCZ 3 жыл бұрын
I love the idea of letting your N64 run for two years in order to perform this glitch on authentic hardware in real time.
@OhSayWhatIsTruth
@OhSayWhatIsTruth 3 жыл бұрын
@@ZimmervisionCZ Someone needs to attempt this.
@jongyon7192p
@jongyon7192p 3 жыл бұрын
Your everyday KZbin comment from SM64 *LEGEND,* ds273.
@Trimint123
@Trimint123 3 жыл бұрын
Somebody called pannenkoek2012 to do this!
@PC_Simo
@PC_Simo 3 жыл бұрын
@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. 😎
@mikebarr2436
@mikebarr2436 3 жыл бұрын
"But that's fine, right?" [long pause]
@twistedsoul
@twistedsoul 3 жыл бұрын
....... 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...
@isaacedelman3859
@isaacedelman3859 3 жыл бұрын
I got an ad during the long pause, maybe that’s what it was for?
@ABaumstumpf
@ABaumstumpf 2 жыл бұрын
"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.
@lpfan4491
@lpfan4491 2 жыл бұрын
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.
@TS6815
@TS6815 2 ай бұрын
My mind just pictures John Krasinsky mugging to camera during the pause
@Monody512
@Monody512 3 жыл бұрын
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.
@AhnafAbdullah
@AhnafAbdullah 2 жыл бұрын
It's pretty amazing yes, I wish more programs nowadays were like that.
@adamantanarchist
@adamantanarchist Жыл бұрын
And now I use it in all my profile, but I can't imagine implementing it so long ago.
@n3rdv10l3nc3
@n3rdv10l3nc3 Ай бұрын
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.
@lior_haddad
@lior_haddad 3 жыл бұрын
Ah yes, gen 1 Pokemon and SM64, what a great episode this is...
@ohnoitschris
@ohnoitschris 3 жыл бұрын
*siiiiiip * Yep, 1996 sure was a great year for games
@OhSayWhatIsTruth
@OhSayWhatIsTruth 3 жыл бұрын
@@ohnoitschris A pretty big year for Nintendo in terms of software thanks to those two games alone.
@donalynlavarias7385
@donalynlavarias7385 3 жыл бұрын
How dis has so many likes???
@tuxedobird
@tuxedobird 3 жыл бұрын
@@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.
@markhaus
@markhaus 3 жыл бұрын
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
@najwan3672
@najwan3672 3 жыл бұрын
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.
@D0Samp
@D0Samp 3 жыл бұрын
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
@serraramayfield9230
@serraramayfield9230 3 жыл бұрын
Petition to rename "cloning", "superposition"? It's a more accurate name since the object is not being duplicated, just rendered twice.
@PC_Simo
@PC_Simo 3 жыл бұрын
@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_Simo
@PC_Simo 3 жыл бұрын
@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”.
@Kapin05
@Kapin05 3 жыл бұрын
@@serraramayfield9230 Ah yes, trying to replace Cloning with Superpositions. That complies with the No Cloning Theorem!
@GameDevYal
@GameDevYal 3 жыл бұрын
Nitpick: the item list in the first example contains 21 items, since you start it at ID 0 and end it at ID 20.
@WormNut
@WormNut 3 жыл бұрын
GameDevYal Yep - at 4:04 for anyone else looking for it.
@Nick-40o
@Nick-40o 3 жыл бұрын
I hate you.
@dragonflyK110
@dragonflyK110 3 жыл бұрын
Ah, off-by-one errors, no matter how experienced you get as a coder you can never fully escape them.
@Cloiss_
@Cloiss_ 3 жыл бұрын
@OskarN Are you sure you didn't see zero? Or did you see the zeroth one?
@PC_Simo
@PC_Simo 2 жыл бұрын
The 21st ”item” is likely the terminator, a.k.a. the ”Cancel”-button.
@zeropointer125
@zeropointer125 3 жыл бұрын
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.
@sacrijuts7265
@sacrijuts7265 3 жыл бұрын
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
@zeropointer125
@zeropointer125 3 жыл бұрын
@@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
@EvelynFTTE
@EvelynFTTE 3 жыл бұрын
They probably don't have code to be thrown, as they weren't designed to be.
@zeropointer125
@zeropointer125 3 жыл бұрын
@@EvelynFTTE that much I already assumed.
@EvelynFTTE
@EvelynFTTE 3 жыл бұрын
@@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.
@pixelator5312
@pixelator5312 3 жыл бұрын
(shows wet-dry world background) "there's an infamous-" me: (grabs popcorn)
@proxy1035
@proxy1035 3 жыл бұрын
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.
@steeltalon937
@steeltalon937 3 жыл бұрын
Isn't that literally what the whole concept of beta testers are nowadays?
@livvy94
@livvy94 3 жыл бұрын
That sounds awesome
@henke37
@henke37 3 жыл бұрын
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.
@proxy1035
@proxy1035 3 жыл бұрын
@@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-jw7ii
@Tom-jw7ii 3 жыл бұрын
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.
@MatthijsvanDuin
@MatthijsvanDuin 3 жыл бұрын
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.)
@serraramayfield9230
@serraramayfield9230 3 жыл бұрын
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.
@2WaterGuns
@2WaterGuns 2 жыл бұрын
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.
@alyplanty0837
@alyplanty0837 3 жыл бұрын
Man, why are most KZbinrs better at teaching that my actual technology teachers?
@AmeshaSpentaArmaiti
@AmeshaSpentaArmaiti 3 жыл бұрын
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?
@Lovuschka
@Lovuschka 3 жыл бұрын
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.
@hh4hooch
@hh4hooch 3 жыл бұрын
@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.
@Metaphysician2
@Metaphysician2 3 жыл бұрын
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_Dog
@Suspicious_Dog 3 жыл бұрын
@Lorash There's an old saying that goes "Those who can, do. Those who can't, teach."
@biscuitslash5443
@biscuitslash5443 3 жыл бұрын
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!
@globalistgamer6418
@globalistgamer6418 Жыл бұрын
"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
@DarkonFullPower
@DarkonFullPower 3 жыл бұрын
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.
@Peffse
@Peffse 3 жыл бұрын
You spooked me with that not-black background. I thought I had screen burn.
@pvc988
@pvc988 3 жыл бұрын
I thought that video compression got wonky.
@pasu2k
@pasu2k 3 жыл бұрын
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!)
@CubemasterXD
@CubemasterXD 3 жыл бұрын
honestly, best channel on youtube... I wish old games were taught at university, they are so interesting
@CubemasterXD
@CubemasterXD 3 жыл бұрын
@@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
@General12th
@General12th 3 жыл бұрын
@@CubemasterXD bUt ThAt'S cOmMuNiSm ThOuGh!!1!
@tecanec9729
@tecanec9729 Жыл бұрын
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.
@blocks4857
@blocks4857 Жыл бұрын
@@General12th blame subsidies idiot
@General12th
@General12th Жыл бұрын
@@blocks4857 I blame reckless, unabashed greed.
@marksmithwas12
@marksmithwas12 3 жыл бұрын
(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
@twistedsoul
@twistedsoul 3 жыл бұрын
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.
@vaendryl
@vaendryl 3 жыл бұрын
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.
@yairkatz6223
@yairkatz6223 3 жыл бұрын
only listed 7 consoles and one of them was the TurboGrafx-16. You sir have earned my respect
@KoopaMedia64
@KoopaMedia64 2 жыл бұрын
He lost my respect when he removed the Virtual Boy. Yeah, totally not a coincidence.
@gabrielv.4358
@gabrielv.4358 Жыл бұрын
I had none, so no big deal, lol.
@jckf
@jckf 3 жыл бұрын
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.
@Ouvii
@Ouvii 3 жыл бұрын
I was going to ask this question. Thanks for the explanation!
@dusklunistheumbreon
@dusklunistheumbreon 3 жыл бұрын
Yeah. They're so similar that Pannenkoek's cloning vid actually *really* helped me understand SRM.
@guttsu
@guttsu 3 жыл бұрын
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.
@IXSigmaXI
@IXSigmaXI 2 жыл бұрын
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.
@kleinesfilmroellchen
@kleinesfilmroellchen 3 жыл бұрын
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.
@AniGaAG
@AniGaAG 2 жыл бұрын
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.
@schoggi555
@schoggi555 3 жыл бұрын
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!
@hanthonyc
@hanthonyc 3 жыл бұрын
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.
@danhorus
@danhorus 3 жыл бұрын
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 :)
@connor_bell
@connor_bell 3 жыл бұрын
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!!!
@Nikapocalypse
@Nikapocalypse 3 жыл бұрын
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.
@niconico486
@niconico486 3 жыл бұрын
I've been looking for a video like this since forever now, thank you so much!
@derdehv
@derdehv 3 жыл бұрын
While watching the Mario 64 portion of the V video the file selection music started playing in my head.. thanks for the great explanation!
@warmCabin
@warmCabin 3 жыл бұрын
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!_"
@antshield
@antshield 3 жыл бұрын
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.
@sierranicholes6712
@sierranicholes6712 Жыл бұрын
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.
@EpiX0R
@EpiX0R 3 жыл бұрын
Love it, instructional and ealy to follow! Well done! You did it again!
@electra_
@electra_ 3 жыл бұрын
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
@erik19borgnia
@erik19borgnia 3 жыл бұрын
Really nice explanation of the List Underflow glitch! Thanks!
@jao858
@jao858 3 жыл бұрын
This was a super interesting & thoughtfully presented video. Thank you!
@Gameboygenius
@Gameboygenius 3 жыл бұрын
13:04 suddenly, abstract Pikachu!
@yellowcrescent
@yellowcrescent 3 жыл бұрын
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
@pineberryfox
@pineberryfox 3 жыл бұрын
yeh, i would have called this something like, synchronization errors or something. came in with the same expectations as you did it seems
@parnikkapore
@parnikkapore Жыл бұрын
sync error would sound like something related to multithreaded execution and race conditions I think, "state inconsistency", maybe?
@sirflimflam
@sirflimflam 3 жыл бұрын
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.
@schmoferino
@schmoferino Жыл бұрын
I ADORE hearing how games perform certain functions, it's so interesting to hear and understand.
@mjc0961
@mjc0961 3 жыл бұрын
I really like how you use the game's font for each example. Very nice.
@CurtisUpshall
@CurtisUpshall 3 жыл бұрын
Awesome explanations and great animations! You just taught me how the 0:00 speedrun for Pokemon is achieved
@andrebeller
@andrebeller 3 жыл бұрын
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.
@gamefoun
@gamefoun Жыл бұрын
This video was fascinating, great job.
@gabrote42
@gabrote42 3 жыл бұрын
This is a fabulous channel. I loved to find out why that happens. Cheers
@ShadMuffin
@ShadMuffin 3 жыл бұрын
Thought I stumbled into a new pannen 0 a press challenge video from thumbnail.
@DanAtuch_Archives
@DanAtuch_Archives 2 жыл бұрын
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.
@Twisted_Code
@Twisted_Code Жыл бұрын
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_Code
@Twisted_Code Жыл бұрын
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
@hjghjgjhhjkhklk2683
@hjghjgjhhjkhklk2683 3 жыл бұрын
excellent cohesive video as always!! love ur channel
@forbiddenera
@forbiddenera 2 жыл бұрын
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.
@endymallorn
@endymallorn 3 жыл бұрын
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.
@donat5617
@donat5617 3 жыл бұрын
In the example at the beginning you sold the Virtual Boy. What a nice touch!
@NagisaStreams
@NagisaStreams Жыл бұрын
Just what I needed at 2am!
@TWOSEM_
@TWOSEM_ 5 ай бұрын
I love how 1920x1080 in Full Screen makes the each game simulation's pixel not softened
@superninja6967
@superninja6967 3 жыл бұрын
7:35 "so it's fine right?" The video: Cuts to ad
@NoriMori1992
@NoriMori1992 3 жыл бұрын
Lol yeah that happened to me too 🤣
@skadogg22
@skadogg22 3 жыл бұрын
Fascinating! thank you!
@Ven_de_Thiel
@Ven_de_Thiel 3 жыл бұрын
Always really interesting. Thanks!
@hicknopunk
@hicknopunk 3 жыл бұрын
I can't get enough of this!
@MerryMidlight
@MerryMidlight 3 жыл бұрын
This feels really useful as a modern programmer as well. Thanks!
@johneygd
@johneygd 3 жыл бұрын
The last part was the most interesting part as it was so much more clearer what you actually mean by this,
@StellariumSound
@StellariumSound 3 жыл бұрын
The amount of coordination between the audio and visual components of these videos must be insane.
@lisafairymeadow2034
@lisafairymeadow2034 2 жыл бұрын
2:00 Yarandev be like "I'm just gonna ignore that."
@polybay
@polybay 3 жыл бұрын
yet another banger of a vid my guy 👌👌
@citrusella-nomorecraptions
@citrusella-nomorecraptions Жыл бұрын
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
@ThePhantomSafetyPin
@ThePhantomSafetyPin 2 жыл бұрын
"But that's okay because these conditions should never happen in the first place, right?" Unfortunately, MISSINGNO. wants to battle...
@miles3173
@miles3173 2 жыл бұрын
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.
@Darkness2179
@Darkness2179 3 жыл бұрын
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.
@ClassicTVMan1981X
@ClassicTVMan1981X Жыл бұрын
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.
@RedStoneMatt
@RedStoneMatt 3 жыл бұрын
Awesome video with awesome video editing as always Next time can you explain how does Arbitrary Code Execution works in retro games ?
@fromthegamethrone
@fromthegamethrone 3 жыл бұрын
Simply amazing
@Arto91
@Arto91 3 жыл бұрын
This channel makes the most entertaining videos I don't understand
@Zer0mavrickTV
@Zer0mavrickTV Жыл бұрын
This still blows my mind. I never knew you were a KZbinr. I thought you were just a genius SMW speedrunner LMAO
@firepaca2626
@firepaca2626 Жыл бұрын
Damn you can really feel time slow down in this video it's just so, informative
@sagacious03
@sagacious03 3 жыл бұрын
Exemplary video! Thanks for uploading!
@SylveonTrapito
@SylveonTrapito 3 жыл бұрын
I love learning programming this way
@roland.w
@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!
@deepmind5318
@deepmind5318 3 жыл бұрын
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.
@randomnessproductions4212
@randomnessproductions4212 2 жыл бұрын
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.
@WalnutBun
@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.
@Thicc_Boyo
@Thicc_Boyo 3 жыл бұрын
14:34 Reminds me of making linked lists in my data structures class. Fun times.
@pleasedontwatchthese9593
@pleasedontwatchthese9593 3 жыл бұрын
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.
@VBshredder
@VBshredder 2 жыл бұрын
You got a like for including the TG16 in that list of consoles in example 1 👍
@jceggbert5
@jceggbert5 Жыл бұрын
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.
@danielevans7439
@danielevans7439 Жыл бұрын
“So, what message speed do you play at?” “Master Ball”
@cocoidle
@cocoidle 3 жыл бұрын
Could you share a link to an image of the Red/Blue inventory? It's one of the best visualizations of the underflow inventory I've seen Great vid :)
@JackBond1234
@JackBond1234 Жыл бұрын
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.
@gabrielv.4358
@gabrielv.4358 Жыл бұрын
I LOVE to watch these glitches happening
@chimebirdplayer3327
@chimebirdplayer3327 3 жыл бұрын
I knew you’d get into Super Mario 64 eventually. I too have watched Mr. Scott Buchanan’s (alias “pannenkoek2012”) videos on SM64 and the game’s glitches that can be exploited (or not exploited); but I could never figure out what was going on in memory that causes these glitches. You were able to explain the mechanics behind the “cloning” glitch very clearly; and I’d like to see more from you. I’m interested to know what’s going on in memory when the “Hat in Hand” glitch occurs; “Pannenkoek2012” demonstrated this glitch, but didn’t explain the mechanics behind it. On a sidetone, I wonder if that data redundancy error was on the part fo Nintendo or SGI.
@ericsbuds
@ericsbuds 3 жыл бұрын
excellent! i lov e these videos!
@eduardomunhoz1581
@eduardomunhoz1581 3 жыл бұрын
dind't understand anything but it sounded very smart, I'm subscribing
@Ganondurk
@Ganondurk 3 жыл бұрын
You should have had the jolly roger bay theme playing while explaining the SM64 glitch.
@PrivateSi
@PrivateSi 3 жыл бұрын
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...
@ianfisch7289
@ianfisch7289 Жыл бұрын
Awesome video. I was hoping you’d make Mario keep holding things and then teleporting, keeping them in memory forever. Can you overload it?
MissingNo.'s Glitchy Appearance Explained
21:20
Retro Game Mechanics Explained
Рет қаралды 1 МЛН
More Super Mario Bros. Mechanics Explained
25:26
Retro Game Mechanics Explained
Рет қаралды 119 М.
Суд над Бишимбаевым. 2 мая | ОНЛАЙН
7:14:30
AKIpress news
Рет қаралды 685 М.
АВДА КЕДАВРАААААА😂
00:11
Romanov BY
Рет қаралды 12 МЛН
McDonald’s MCNUGGET PURSE?! #shorts
00:11
Lauren Godwin
Рет қаралды 32 МЛН
Stupid man 👨😂
00:20
Nadir Show
Рет қаралды 19 МЛН
Racing the Beam Explained - Atari 2600 CPU vs. CRT Television
38:26
Retro Game Mechanics Explained
Рет қаралды 264 М.
Generation I Pokémon Cries Explained
19:15
Retro Game Mechanics Explained
Рет қаралды 677 М.
The Game Genie Explained
8:46
Retro Game Mechanics Explained
Рет қаралды 315 М.
Atari's Quadrascan Explained
20:57
Retro Game Mechanics Explained
Рет қаралды 182 М.
Fixing Glitch Pokémon Sprites
14:17
Retro Game Mechanics Explained
Рет қаралды 322 М.
Using Lakitu's Cloud to Defeat Bowser Quickly
1:12:55
Retro Game Mechanics Explained
Рет қаралды 272 М.
RNG
12:37
UncommentatedPannen
Рет қаралды 282 М.
More Level End Glitches in Super Mario World
28:15
Retro Game Mechanics Explained
Рет қаралды 260 М.
Super Mario Bros. 3 - Extended 1up Sound
15:13
Retro Game Mechanics Explained
Рет қаралды 777 М.
NES Graphics Explained
17:23
NesHacker
Рет қаралды 221 М.
Frog Prince Rush With Sonic And Knuckles
0:27
Intalord
Рет қаралды 6 МЛН
First Lily’s Mastery in The World 🌎
0:35
Toodyxz
Рет қаралды 7 МЛН
Мальчик гений и ужасная мать #фильм #сериал
1:00