Data Redundancy Errors Explained

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

Retro Game Mechanics Explained

Retro Game Mechanics Explained

Күн бұрын

Пікірлер: 490
@ds27315
@ds27315 4 жыл бұрын
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 4 жыл бұрын
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-paws
@dogg-paws 4 жыл бұрын
@@ZimmervisionCZ Someone needs to attempt this.
@jongyon7192p
@jongyon7192p 4 жыл бұрын
Your everyday KZbin comment from SM64 *LEGEND,* ds273.
@Trimint123
@Trimint123 4 жыл бұрын
Somebody called pannenkoek2012 to do this!
@PC_Simo
@PC_Simo 4 жыл бұрын
@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. 😎
@jarrod752
@jarrod752 4 жыл бұрын
These conditions should never happen in the first place right?... Said every programmer at some point ever.
@KyoukiJuuno
@KyoukiJuuno 4 жыл бұрын
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 4 жыл бұрын
@@KyoukiJuuno Yeah I pretty much just blame the user's data at this point.
@NoahtheEpicGuy
@NoahtheEpicGuy 4 жыл бұрын
Cheers bro, I'll drink to that
@pyromen321
@pyromen321 4 жыл бұрын
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 4 жыл бұрын
"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.
@jblackquill8813
@jblackquill8813 4 жыл бұрын
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 4 жыл бұрын
I'm glad you found them useful! I've always made sure to have accurate captions available for this reason.
@kingofcrap4414
@kingofcrap4414 4 жыл бұрын
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 3 жыл бұрын
@@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.
@frostyelkk
@frostyelkk 4 жыл бұрын
The simple way to have perfect redundancy against errors; Don't have data.
@gum8191
@gum8191 4 жыл бұрын
The GNOME philosophy
@fabzter
@fabzter 4 жыл бұрын
Perfect redundancy
@manelcastillogimenez194
@manelcastillogimenez194 4 жыл бұрын
@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 4 жыл бұрын
@@manelcastillogimenez194 just pull a ben eater and do it in raw assembly
@runneypo
@runneypo 4 жыл бұрын
@@computer-love bug free until you add a number to the wrong register
@najwan3672
@najwan3672 4 жыл бұрын
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 4 жыл бұрын
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 4 жыл бұрын
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 4 жыл бұрын
@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 4 жыл бұрын
@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!
@Monody512
@Monody512 4 жыл бұрын
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 3 жыл бұрын
It's pretty amazing yes, I wish more programs nowadays were like that.
@adamantanarchist
@adamantanarchist 2 жыл бұрын
And now I use it in all my profile, but I can't imagine implementing it so long ago.
@n3rdv10l3nc3
@n3rdv10l3nc3 8 ай бұрын
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.
@JetFalcon710
@JetFalcon710 6 ай бұрын
​@@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 :]
@JetFalcon710
@JetFalcon710 6 ай бұрын
@@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
@mikebarr2436
@mikebarr2436 4 жыл бұрын
"But that's fine, right?" [long pause]
@twistedsoul
@twistedsoul 4 жыл бұрын
....... 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 4 жыл бұрын
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 9 ай бұрын
My mind just pictures John Krasinsky mugging to camera during the pause
@zeropointer125
@zeropointer125 4 жыл бұрын
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 4 жыл бұрын
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 4 жыл бұрын
@@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 4 жыл бұрын
They probably don't have code to be thrown, as they weren't designed to be.
@zeropointer125
@zeropointer125 4 жыл бұрын
@@EvelynFTTE that much I already assumed.
@EvelynFTTE
@EvelynFTTE 4 жыл бұрын
@@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.
@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.
@cerulity32k
@cerulity32k 3 ай бұрын
i know i love it its so cool
@lior_haddad
@lior_haddad 4 жыл бұрын
Ah yes, gen 1 Pokemon and SM64, what a great episode this is...
@ohnoitschris
@ohnoitschris 4 жыл бұрын
*siiiiiip * Yep, 1996 sure was a great year for games
@dogg-paws
@dogg-paws 4 жыл бұрын
@@ohnoitschris A pretty big year for Nintendo in terms of software thanks to those two games alone.
@donalynlavarias7385
@donalynlavarias7385 4 жыл бұрын
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
@MatthijsvanDuin
@MatthijsvanDuin 4 жыл бұрын
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 4 жыл бұрын
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.
@GameDevYal
@GameDevYal 4 жыл бұрын
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 4 жыл бұрын
GameDevYal Yep - at 4:04 for anyone else looking for it.
@Nick-40o
@Nick-40o 4 жыл бұрын
I hate you.
@dragonflyK110
@dragonflyK110 4 жыл бұрын
Ah, off-by-one errors, no matter how experienced you get as a coder you can never fully escape them.
@Cloiss_
@Cloiss_ 4 жыл бұрын
@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.
@biscuitslash5443
@biscuitslash5443 4 жыл бұрын
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 2 жыл бұрын
"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
@pasu2k
@pasu2k 4 жыл бұрын
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!)
@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.
@proxy1035
@proxy1035 4 жыл бұрын
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 4 жыл бұрын
Isn't that literally what the whole concept of beta testers are nowadays?
@livvy94
@livvy94 4 жыл бұрын
That sounds awesome
@henke37
@henke37 4 жыл бұрын
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 4 жыл бұрын
@@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 4 жыл бұрын
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.
@marksmithwas12
@marksmithwas12 4 жыл бұрын
(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
@vaendryl
@vaendryl 4 жыл бұрын
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.
@pixelator5312
@pixelator5312 4 жыл бұрын
(shows wet-dry world background) "there's an infamous-" me: (grabs popcorn)
@Peffse
@Peffse 4 жыл бұрын
You spooked me with that not-black background. I thought I had screen burn.
@pvc988
@pvc988 4 жыл бұрын
I thought that video compression got wonky.
@alyplanty0837
@alyplanty0837 4 жыл бұрын
Man, why are most KZbinrs better at teaching that my actual technology teachers?
@AmeshaSpentaArmaiti
@AmeshaSpentaArmaiti 4 жыл бұрын
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 4 жыл бұрын
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 4 жыл бұрын
@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 4 жыл бұрын
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 4 жыл бұрын
@Lorash There's an old saying that goes "Those who can, do. Those who can't, teach."
@CubemasterXD
@CubemasterXD 4 жыл бұрын
honestly, best channel on youtube... I wish old games were taught at university, they are so interesting
@CubemasterXD
@CubemasterXD 4 жыл бұрын
@@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 4 жыл бұрын
@@CubemasterXD bUt ThAt'S cOmMuNiSm ThOuGh!!1!
@tecanec9729
@tecanec9729 2 жыл бұрын
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 2 жыл бұрын
@@General12th blame subsidies idiot
@General12th
@General12th 2 жыл бұрын
@@blocks4857 I blame reckless, unabashed greed.
@yairkatz6223
@yairkatz6223 4 жыл бұрын
only listed 7 consoles and one of them was the TurboGrafx-16. You sir have earned my respect
@KoopaMedia64
@KoopaMedia64 3 жыл бұрын
He lost my respect when he removed the Virtual Boy. Yeah, totally not a coincidence.
@gabrielv.4358
@gabrielv.4358 2 жыл бұрын
I had none, so no big deal, lol.
@twistedsoul
@twistedsoul 4 жыл бұрын
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.
@JetFalcon710
@JetFalcon710 6 ай бұрын
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
@jckf
@jckf 4 жыл бұрын
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 4 жыл бұрын
I was going to ask this question. Thanks for the explanation!
@dusklunistheumbreon
@dusklunistheumbreon 4 жыл бұрын
Yeah. They're so similar that Pannenkoek's cloning vid actually *really* helped me understand SRM.
@Twisted_Code
@Twisted_Code 2 жыл бұрын
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 2 жыл бұрын
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
@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.
@Nikapocalypse
@Nikapocalypse 4 жыл бұрын
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.
@guttsu
@guttsu 4 жыл бұрын
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 3 жыл бұрын
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.
@danhorus
@danhorus 4 жыл бұрын
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 :)
@andrebeller
@andrebeller 4 жыл бұрын
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.
@yellowcrescent
@yellowcrescent 4 жыл бұрын
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
@parnikkapore
@parnikkapore 2 жыл бұрын
sync error would sound like something related to multithreaded execution and race conditions I think, "state inconsistency", maybe?
@kleinesfilmroellchen
@kleinesfilmroellchen 4 жыл бұрын
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.
@derdehv
@derdehv 4 жыл бұрын
While watching the Mario 64 portion of the V video the file selection music started playing in my head.. thanks for the great explanation!
@sirflimflam
@sirflimflam 4 жыл бұрын
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_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.
@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!
@schmoferino
@schmoferino 2 жыл бұрын
I ADORE hearing how games perform certain functions, it's so interesting to hear and understand.
@defensivekobra3873
@defensivekobra3873 4 жыл бұрын
You just adequately explained those two main weird things you see glitch showcasers and speedrunners do all the time in these games, thanks
@endymallorn
@endymallorn 4 жыл бұрын
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_
@thecolacat_ Жыл бұрын
I love how 1920x1080 in Full Screen makes the each game simulation's pixel not softened
@forbiddenera
@forbiddenera 3 жыл бұрын
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.
@CurtisUpshall
@CurtisUpshall 4 жыл бұрын
Awesome explanations and great animations! You just taught me how the 0:00 speedrun for Pokemon is achieved
@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.
@deepmind5318
@deepmind5318 4 жыл бұрын
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.
@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.
@StellariumSound
@StellariumSound 4 жыл бұрын
The amount of coordination between the audio and visual components of these videos must be insane.
@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.
@sierranicholes6712
@sierranicholes6712 2 жыл бұрын
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.
@donat5617
@donat5617 3 жыл бұрын
In the example at the beginning you sold the Virtual Boy. What a nice touch!
@Zer0mavrickTV
@Zer0mavrickTV Жыл бұрын
This still blows my mind. I never knew you were a KZbinr. I thought you were just a genius SMW speedrunner LMAO
@pleasedontwatchthese9593
@pleasedontwatchthese9593 4 жыл бұрын
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.
@ClassicTVMan1981X
@ClassicTVMan1981X 2 жыл бұрын
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_
@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
@mjc0961
@mjc0961 4 жыл бұрын
I really like how you use the game's font for each example. Very nice.
@superninja6967
@superninja6967 4 жыл бұрын
7:35 "so it's fine right?" The video: Cuts to ad
@NoriMori1992
@NoriMori1992 4 жыл бұрын
Lol yeah that happened to me too 🤣
@jceggbert5
@jceggbert5 2 жыл бұрын
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-nomorecraptions
@citrusella-nomorecraptions 2 жыл бұрын
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...
@MIchaelArlowe
@MIchaelArlowe 2 жыл бұрын
Ah, the dangers of doubly linked lists.
@warmCabin
@warmCabin 4 жыл бұрын
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!_"
@cerulity32k
@cerulity32k 3 ай бұрын
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.
@deathcatthor
@deathcatthor 2 ай бұрын
I love this guy. I like how the autotranslate captions let me watch in french Aswell
@Gameboygenius
@Gameboygenius 4 жыл бұрын
13:04 suddenly, abstract Pikachu!
@erik19borgnia
@erik19borgnia 4 жыл бұрын
Really nice explanation of the List Underflow glitch! Thanks!
@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.
@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!
@connor_bell
@connor_bell 4 жыл бұрын
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!!!
@niconico486
@niconico486 4 жыл бұрын
I've been looking for a video like this since forever now, thank you so much!
@lisafairymeadow2034
@lisafairymeadow2034 3 жыл бұрын
2:00 Yarandev be like "I'm just gonna ignore that."
@gabrote42
@gabrote42 4 жыл бұрын
This is a fabulous channel. I loved to find out why that happens. Cheers
@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...
@randomnessproductions4212
@randomnessproductions4212 3 жыл бұрын
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.
@Ganondurk
@Ganondurk 4 жыл бұрын
You should have had the jolly roger bay theme playing while explaining the SM64 glitch.
@johneygd
@johneygd 4 жыл бұрын
The last part was the most interesting part as it was so much more clearer what you actually mean by this,
@antshield
@antshield 4 жыл бұрын
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.
@Arto91
@Arto91 4 жыл бұрын
This channel makes the most entertaining videos I don't understand
@an_annoying_cat
@an_annoying_cat 4 жыл бұрын
I saw the thumbnail and was like wait this isnt Pannenkoek
@MerryMidlight
@MerryMidlight 4 жыл бұрын
This feels really useful as a modern programmer as well. Thanks!
@jao858
@jao858 4 жыл бұрын
This was a super interesting & thoughtfully presented video. Thank you!
@b.clarenc9517
@b.clarenc9517 4 жыл бұрын
So this is why Missingno interacts with the 6th item slot. I had always wondered why it was specifically and consistently that item.
@firepaca2626
@firepaca2626 Жыл бұрын
Damn you can really feel time slow down in this video it's just so, informative
@WillowEpp
@WillowEpp 4 жыл бұрын
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.
@RGMechEx
@RGMechEx 4 жыл бұрын
Unfortunately not, but maybe I will clarify the distinction in a later video ;)
@JackBond1234
@JackBond1234 2 жыл бұрын
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.
@bluestartalron8502
@bluestartalron8502 4 жыл бұрын
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.
@8bitalex
@8bitalex 7 ай бұрын
The two-way hold link gave me yoshi item-swap flashbacks Edit: yep, the unloading and holding any item is definitely similar
@EpiX0R
@EpiX0R 4 жыл бұрын
Love it, instructional and ealy to follow! Well done! You did it again!
@SylveonTrapito
@SylveonTrapito 4 жыл бұрын
I love learning programming this way
@ash0787
@ash0787 4 жыл бұрын
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.
@danny3xeer
@danny3xeer 4 жыл бұрын
I understood this video more than I did anything in school
@starleaf-luna
@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).
@VBshredder
@VBshredder 3 жыл бұрын
You got a like for including the TG16 in that list of consoles in example 1 👍
@danielevans7439
@danielevans7439 2 жыл бұрын
“So, what message speed do you play at?” “Master Ball”
@PokeMaster22222
@PokeMaster22222 4 жыл бұрын
1:48 It's Count-Along Time with Retro Game Mechanics! Let's count this list together, kids!
@ag0ny
@ag0ny 4 жыл бұрын
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.
@therandomraddish7281
@therandomraddish7281 4 жыл бұрын
Wow I've always lived data redundancy
@gamefoun
@gamefoun 2 жыл бұрын
This video was fascinating, great job.
@notalostnumber8660
@notalostnumber8660 4 жыл бұрын
KZbinr: *is going to talk about SM64 The pancake: hello
@viridian6812
@viridian6812 4 жыл бұрын
*The Dutch pancake
@30IYouTube
@30IYouTube 3 жыл бұрын
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.
@gabrielv.4358
@gabrielv.4358 2 жыл бұрын
I LOVE to watch these glitches happening
Atari's Quadrascan Explained
20:57
Retro Game Mechanics Explained
Рет қаралды 191 М.
More Super Mario Bros. Mechanics Explained
25:26
Retro Game Mechanics Explained
Рет қаралды 139 М.
小路飞还不知道他把路飞给擦没有了 #路飞#海贼王
00:32
路飞与唐舞桐
Рет қаралды 85 МЛН
Noodles Eating Challenge, So Magical! So Much Fun#Funnyfamily #Partygames #Funny
00:33
Миллионер | 3 - серия
36:09
Million Show
Рет қаралды 1,9 МЛН
風船をキャッチしろ!🎈 Balloon catch Challenges
00:57
はじめしゃちょー(hajime)
Рет қаралды 87 МЛН
Fixing Glitch Pokémon Sprites
14:17
Retro Game Mechanics Explained
Рет қаралды 338 М.
Why Sunshine’s Volcano is the Worst Level Nintendo Ever Made.
19:39
Racing the Beam Explained - Atari 2600 CPU vs. CRT Television
38:26
Retro Game Mechanics Explained
Рет қаралды 285 М.
How to Crash SM64 Using a Pendulum (Commentated)
1:11:14
pannenkoek2012
Рет қаралды 1 МЛН
Super Mario World - Random Number Generation
14:05
Retro Game Mechanics Explained
Рет қаралды 375 М.
Super Mario Bros. 3 - Extended 1up Sound
15:13
Retro Game Mechanics Explained
Рет қаралды 816 М.
Super Mario Bros. Glitch Levels Explained
29:52
Retro Game Mechanics Explained
Рет қаралды 269 М.
MissingNo.'s Glitchy Appearance Explained
21:20
Retro Game Mechanics Explained
Рет қаралды 1 МЛН
Why Super Mario 64 is Terrifying
15:30
Press Start To Continue
Рет қаралды 1,9 МЛН
Bugs & Glitches of High-Level NES Tetris
53:21
Retro Game Mechanics Explained
Рет қаралды 220 М.
小路飞还不知道他把路飞给擦没有了 #路飞#海贼王
00:32
路飞与唐舞桐
Рет қаралды 85 МЛН