Bragatyr wrote:Absolutely, it's really neat to see the inventiveness and dedication that speedrunners have in deconstructing beloved games. I just finished watching a run of Phantasy Star II which clocked in at less than 55 minutes, which is pretty amazing to me. Like many RPG speed runs it relies on overflowing or underflowing the inventory in order to get crazy results.
For old video games, that's not uncommon. Exception handling wasn't really a thing then, and most data is just stored into arrays. So let's say you have a pointer (an object which holds the memory address of another object) that points to the address of a specific item. If you can find a way to arbitrarily change that pointer (which as you can imagine, you should NEVER allow to happen in your program if at all possible), you can switch that item to well, whatever you want. It sounds ridiculous to the end user, but under the hood if you can manipulate that one value, you can do a number of things to it.
The crazy things start happening when pointers point to objects they were never intended to point to. Yes, you can tell a computer program to load music data in what is normally supposed to be graphical data via reallocating pointers, but I don't recommend you do that. It won't be pretty. You can even tell the program to literally shoot its own foot off if you're so inclined.
There's a reason why pointers in modern computer science are considered extremely dangerous and are frowned upon.
There's also the fact that basically 99% of old games were done in assembly language and assembly language is a pain to deal with. How much of a pain is it? Imagine doing your English paper. Now, imagine doing that paper but instead of having words and phrases that basically everyone agrees on what they mean - you instead of have to redefine not only the entire English language in its entirety (not limited to defining syntax and other related functions), but you'll also need to explicitly define each letter that makes up each word you define and then define further definitions like the pronunciation of each letter, word and syllable.
Oh and don't forget that all your definitions that you made? They're only good for that one english paper. If you have to make another english paper on a different subject, be prepared to have to redefine everything all over again.
Have fun!THEN you can start making your inner logic work, but then and only then. That is assembly language. In assembly language, the computer is a stupid idiot and you literally have to tell it what to do in 100% of all scenarios and it will not do anything you don't tell it to do, so if you don't understand computer architecture you're likely to get some horrible error that you don't know how to fix because how computers work at an architectural level is stupidly complicated and frustrating to deal with.
Or like a sane person, you could use a high-level language where most things are generally defined for you and the meat of the project is focused on the logic and not redefining literally everything in sight. I can forgive old video games because the hardware necessary to do video game programming in a high level language was so stupidly expensive at the time there's no way it would have been commercially viable - so the only alternative is assembly where the one main advantage is speed. Speed and nothing else.
(Sorry for the long rant, just hoped that explained some things)