Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Topher

Pages: [1]
Hey guys,

I am working on a memory editor for FFX/X-2 to change things such as items, accessories, stats, and so on. It originally started out of a desire for a tool to easily edit creature abilities in Final Fantasy X-2, but I have decided to expand the scope of the app to include a number of other features, editors and cheats.

Version 0.2.2 is the current release, and it supports:

Final Fantasy X
  • Party stat and ability modification
  • Basic equipment customization
  • Debug options (control monsters, max damage, invincible, perma-sensor, etc.)
  • Shared AP booster (all characters gain AP after battle)
Final Fantasy X-2
  • Change current Gil
  • Character EXP and stat modification
  • Character dressphere completion modification (Only Gunner to Songstress implemented)
  • Creature stat modification and ability modification
  • Creature creator trapping editor
  • Item editor and item cheat
  • Accessory editor and accessory cheat
  • Dressphere editor (change count)
  • Garment Grid editor (learn/unlearn)
  • Toggle debug options such as controlling monsters, invincible party, etc.

If you're interested in trying it out, download it here.

If you like the app and can help translate the creature or command names, your help would be greatly appreciated!

Spoiler: show

Q-Gears / The Screenshot Topic
« on: 2006-06-10 09:23:22 »
As useless as it may be, I'm sure some people will be interested in how the engine is progressing, without wanting to compile the SVN source themselves. So, assuming it's fine with halkun and the other project developers, I'll update the screenshots here as the project progresses.

If you don't think screenshots are appropriate then feel free to delete this topic.

Taken from SVN on June 10th, 2006 at 7.10pm (GMT+10):

Looks like it's coming along nicely guys, keep up the good work.  :-)

Scripting and Reverse Engineering / New Scene.bin Editor
« on: 2005-08-08 13:33:43 »
Alright, over the past few days I've been writing a scene.bin editor in Visual C++ (in my quest to learn C++).

Functionality-wise it should be on par with SceneEdit (I tried to make sure of that before release :P), albeit I think it is much easier to use. (No offense to Mav, I just found Scene Edit kind of annoying for mass editing)

You will need a decompressed scene.bin, from scene1 (not scene001) to scene256. The program doesn't currently handle exceptions when a file is read-only or doesn't exist and will most likely crash or display garbage.

It is my first VC++ project, so if there are any bugs (aside from the aforementioned), please let me know ASAP so I can try to fix them! I weeded out a few nasty ones when I switched to the release build from the debug build.

Download here! (Version 0.5)

- You can now change whether enemies can be Manipulated, and what attacks (maximum of 3).
- Changed attack name changing so only the currently selected enemy's attacks appear (probably caused some bugs).
- Probably some more but I forgot about them.

- Added basic formation editing (pretty buggy)
- Fixed text editing bug (hopefully)
- Removed copy/paste restriction but added warning (use at caution)

- Moved some crap around
- Added level changing
- Added copy/paste function
- Added attack name changing
- Probable 1600% increase in bugs/errors.

Plans for the future:
- Number One Priority: Fix reported bugs
- Add status immunity modification (need to find that part of the file first)
- Complete formation editing
- Discover more of scene.bin

Anyways, hope you enjoy it as much as I enjoyed learning from it's development.

I'm learning C++, and as a learning project I'm trying to write an application that will read the information from an FF7 save file ("savexx.ff7") and display it on screen.

I've created the following structures:

Code: [Select]
struct FF7HEAD { // The header part of the FF7 save
    unsigned char dummy [11];
} ;

struct FF7DESC { // The save description part
    USHORT checksum;
    BYTE level;
    BYTE charOne, charTwo, charThree;
    STRING name[16];
    short charCHP;
    short charMHP;
    short charCMP;
    short charMMP;
    long gil;
    long time;
    STRING location[32];
} ;

struct FF7SLOT { // The individual save slot
    FF7DESC description;
} ;

struct FF7 { // The save file as a whole.
    FF7HEAD header;
    FF7SLOT slotOne;
} ff7file;

In my main() function, I load the save file into the memory location of ff7file (see above for it)

Code: [Select]
int main() {
    FILE *ff7save;
    char ff7name[] = "save00.ff7";
    ff7save = fopen(ff7name, "rb");
    fread(&ff7file, sizeof(ff7file), 1, ff7save);
    cout << "Header:\n";
    for(int i=0; i<11; i++) {
            cout << (int)ff7file.header.dummy[i] << " ";
    [snip -- just output code here]

the above code doesn't load the correct values into the right spot (i think they're offset a bit but i'm too tired to check right now).

when you jumble the code around and load the FF7HEAD and FF7 object (minus the header) seperately it does work... except when you get to loading gil, where it loads the 4 bytes two bytes after the current file position.

I'm pretty much a newb at c++ (have experience with PHP and java) and this is giving me a real headache... you guys are great at this kind of stuff... can you help me please?

Do note there are a bunch of shortcuts in there (the header simply contains 'dummy[]' instead of actual variables, etc), since I suck so much at C++.

(footnote: the above code was sloppily 'renewed' back to the original loading method so if anything doesn't work i screwed it up -- or i'm just a newb)

Oh, and the output that version creates is...

Code: [Select]
113 115 39 6 0 1 0 0 0 5 99


Character Level: 0

Character 1: Barret
Character 2: None
Character 3: Unknown

HP: 14080/11777
MP: 14592/16384

Gil Held: 135168 4

Playtime: 240070144 seconds

And I'm using Dev-C++ if you wanted to know.

Mod Edit: Do not double-post

Can anyone tell me what region (and what method) I have to calculate the checksum with? I've had a look at the source for Griever, but with my suckiness, couldn't figure it out (and it looks like it's in assembly, anyway). Any help would be greatly appreciated.

According to the Final Fantasy X-2 Ultimania Guidebook (and Nojima himself), Final Fantasy X and Final Fantasy X-2 are prequels to Final Fantasy VII.

Here's an online excerpt from the book: (EDIT It's in Japanese)

There's a new FF7 program available that reads the background files with the entire script! You can get it from

Unfortunately it only works for PSX, but I think Qhimm has a program to view the backgrounds for PC, although I haven't looked.

EDIT: Forgot to say, it's called '7mimic'

General Discussion / About the FFX-2 Poster
« on: 2002-12-11 06:36:59 »
If you look on the right-hand wall, it says "YUNA LIVE" in that blitzball-type writing. Maybe Yuna has her own chat show? :P

Right, so I've managed to locate the checksum, however I can't seem to rebuild it -- ever. Someone said that it's CRC16 and I need some special thingy. I'm going over the source for Jenova at the moment, but if anyone could help it would be greatly appreciated. Thanks!

-- EDIT --

I've found what I think is the code for the checksum rebuilder. Unfortunately I can't seem to read it too well. If someone could try to translate this into BASIC format, or tell me if that's the wrong part that'd be great.

Code: [Select]
int CFF7File::Checksum( char* b )
int i = 0, t, d;
long r = 0xFFFF, len = 4336;
long pbit = 0x8000;

while( len-- ) {
t = b[i++];
r ^= t << 8;
for(d=0;d<8;d++) {
if( r & pbit )
r = ( r << 1 ) ^ 0x1021;
r <<= 1;
r &= ( 1 << 16 ) - 1;
return ~r;

I'm writing my own Saved Game Editor for Final Fantasy VII and VIII and I need some information on where and how the different information is stored. I can't read C++ properly yet, so I just need someone to tell me. I actually had the name deciphering algorythm (if you can call it that) for FFVIII figured out but I lost it in a HDD crash. By the time I decided to resume the project, I had forgotten how.

Thanks in advance.

Pages: [1]