I have been a busy bee.
2 or more years ago I decided to make a program for hacking RAM since GameHack wasn’t working on Windows® XP.
Until recently it has been a fairly simple project, but it has changed from a newbie—intermediate tool to a newbie—high-end tool.
Searches and things are still simple enough for GameShark® newbies to understand, but templates are much more complicated and take time to learn how to use to their fullest.
I recommend that you (all) get this before it expires (set to one week) from the bin.
Memory Hacking Software
So, here is what I have done.
This is the Template Editor.
As you can see, I created a very very basic template to describe Cloud’s animation set.
In RAM, only a few of his animations are loaded at a time. I found this out (not to my surprise) while making the template.
Not only that, but between animations, sometimes there are 8 bytes of space, sometimes there are 16 bytes of space, and sometimes there is no space.
Most likely this has to do with the number of animations that AREN’T loaded.
Total, this set occupies 24,080 bytes of RAM, as shown by the Template Editor.
The frames that are loaded into RAM have 20, 20, 12, 10, 6, 6, 2, and 4 total frames. I hardcoded these values into the template (as well as the number of bones Cloud has) but it is possible to set them to a value in RAM (instead of always being 20 until I change it, it will find the value in RAM and use that number to resize itself instead). If I knew where the number of bones in Cloud’s body and the number of frames per animation were stored, I could link the template to those values in RAM instead, but I don’t, so I hardcoded them into the template.
The Hex Viewer shows all of this information to me in a very easy-to-read format which can be changed to suite your needs.
Because I can map the templates over RAM in real-time and see every value as I add them and modify them it is extremely easy to map objects in RAM. This whole animation set took 10 minutes.
Because I defined the parameters of a valid XYZ coordinate to be a float from -360 to 360, the Hex Viewer automatically showed me where values in RAM were not meeting those parameters (shown by red) and I could see instantly that my templates were or where not aligned properly.
What is shown in the picture is the end of Cloud’s animation set. The green line indicates the start of a new chunk. Since Cloud’s animation ends shortly before a new chunk, most likely his is the last animation of the 3 characters in my battle party. I have not verified this.
You will notice something strange about this picture.
Some of Cloud’s bones have -180.0f for rotations.
It seems it is possible for the bones to be rotated backwards, but why?
And how would they be stored in the file if they have a negative rotation?
Or is this some funky trick the Final Fantasy® VII engine does upon loading of the animations? -180 is the same as 180, so what is the point?
You should be able to see already how useful the templates are.
Soon I will add the functionality of exporting. Each data type will export as whatever you define and in any of multiple formats.
You will be able to create the final output format in the same way you use sprintf().
Currently it is possible to export that entire 24,080-byte chunk just by selecting it in the Hex Viewer and right-clicking, but when exporting a template you will have much more control over each individual data item.
This tool should help us finish off Final Fantasy® VII, and I am still working on it to make it better.
I really suggest using it. As I mentioned, putting together that animation template and following all of Cloud’s animations took only 10 minutes and helped me gain understanding of the final format when loaded into RAM.
And you can use templates to describe any format.
In a template (let’s say A), you can assign pointers to other templates (B), and then attach that template (A) to a pointer in RAM.
When doing this, the template will automatically follow dynamic objects in RAM as they move around. Animations are dynamic and are reallocated every time a new battle starts.
If I take the time to find the pointer to Cloud’s animation, I could attach this template to the pointer and not have to worry about finding his animation ever again.
One last word on templates.
I will also make the ability to wrap templates into libraries and send to other people. Currently, it is very rare to get a template working on another computer, but when I have completed that step, it will be very easy for us to share our templates and help each other dig into this game.
Here is the actual software (again)!
Memory Hacking Software
Here is a tutorial on templates.
Template Tutorial
Here is the RAM dump (all in floats) of the actual area of Cloud’s animations.
Cloud’s Animations
L. Spiro