Matthi205 said:
So what you mean is that the complete contents of the game's allocated RAM could be dumped to a file and then considered a "save file".
For Unreal games, that would be bad news, since Unreal uses A LOT of RAM (generally around 2 Gigabytes independent of map or game; I don't know why that is, it just is).
2 Gig save files are the least of your problems there.
1) Operating systems don't like you trying to manipulate memory that way, and programming languages aren't designed around that kind of practice. Even in C, you let the OS allocated memory for you and you use what it gives you to use. Trying to access addresses which haven't been allocated you is a quick way to hard-crash the game. You might be able to pull off something like that on a small scale using assembly, but Windows isn't going to let you do it with 2 gigs of memory while getting it to work with a game engine.
2) In order for a game to run on an operating system, it needs to have OS resources allocated to it. For example: If your game is doing anything over a network, it needs a socket allocated to it. If you were to re-load a saved game by simply copying a block of memory from the disk to ram, you would now have a program which thinks that it has socket #44431 allocated to it, but an OS which has done no such thing and will object to the assertion (ie, crash the program). Put simply: The program's state has to agree with the OS's state, and you're not going to get that if you load an old game state directly from ram rather than re-building one.
3) There's more to the game state than what's in RAM. There's the CPU registers, what's currently in the process of being read from the hard drive, VRAM, the sound card, etc. All of that would need to be restored to a compatible state as well.
4) Your game save files would suddenly become machine-dependent. When a game builds its game state, it's doing so partially based on system information provided by the OS. What happens when a game that was running on four cores now has to run on a system with two? What happens when your game was using version 1.1.3.0.1 of a system library, and since you've upgraded to 1.1.3.0.2? Or the game was being run from C:\Programs\Game, and now it's being run from D:\Programs\Games\Game?
5) Even the most minor patch to the game would render your game saves completely unusable. Now not only does the object hierarchy need to remain the same, but the actual code does as well, or otherwise you would have code in memory now trying to jump to the wrong place in the new code or a temporary variable being pushed onto the stack by the old code and not being popped back off by the new code.
For an emulator, none of those are a problem, since the emulator can let you save the exact state of the hardware, OS, and the state of the game and restore it all as well. And since all of those are internal to the emulator, all you need is for the emulator itself to not change in any way that breaks it.