Final Fantasy X/X-2 HD on Steam this thursday

  • Thread starter Thread starter makipl
  • Start date Start date
Status
Not open for further replies.
If you want to extract files from the VBF you can decompile the launcher and get the VirtuosBigFileReader class which can extract the files BUT it uses a hash table so you need to know the file names to extract data. I have a simple tool that will attempt to extract files based on a dictionary, will release in the next day or so
 
We could use that Lord Ramza. :3


Okay. I have the files:

FFX&X-2_LAUNCHER.exe is:
 Visual C# (That's cool)

FFX&X-2_Will.exe, FFX.exe, FFX-2.exe:
  Std Compile, C++ compiler - MS Visual Studio 2012 [DebuG] [ Win Vista ]

The MAGIC files in /magicFiles/FFX and FFX2 are in fact:
  Microsoft Visual C++ ver. ~6.0~7.10 - Linker 11 - Visual 2012

Even MANIFEST survived:
Code: [Select]
Code:
FILEVERSION    1,0,0,0PRODUCTVERSION 1,0,0,0FILEFLAGSMASK  0x3FFILEFLAGS      0x0FILEOS         VOS_NT_WINDOWS32FILETYPE       VFT_DLLFILESUBTYPE    0x0{  BLOCK "StringFileInfo"  {    BLOCK "000004b0"    {      VALUE "CompanyName",       "SQUARE ENIX CO., LTD."      VALUE "FileDescription",   "FFX magic_0003"      VALUE "FileVersion",       "1.0.0.0"      VALUE "LegalCopyright",    "© 2001-2004,2013-2016 SQUARE ENIX CO., LTD."      VALUE "OriginalFilename",  "magic_0003.dll"      VALUE "ProductName",       "magic_0003"      VALUE "ProductVersion",    "1.0.0.0"    }  }  BLOCK "VarFileInfo"  {    VALUE "Translation", 0x0, 1200  }}
Export of magic_0003.dll (FFX):
Code: [Select]
Code:
          Functions counter : 0002 decimal - 0002 hex0001 - magic_0003.dll  0001  GetEffectOverlayTable   .    .    .    .       00006C900002 - magic_0003.dll  0002  InitMagicPRX   .    .    .    .    .    .       00006CB0
+has written debugger info

Can't say more now. Need to put this to both ILSpy and IDA.

EDIT2: VBF files has "SRYK" header.


FFX&X-2_LAUNCHER.exe/String:PathConfig
Code: [Select]
Code:
[PathConfig, <?xml version="1.0" encoding="utf-8" ?><Paths>  <IniFile>GameSetting.ini</IniFile>  <FFX>FFX.exe</FFX>  <FFXParam></FFXParam>  <FFX2>FFX-2.exe</FFX2>  <FFX2Param></FFX2Param>  <SideStory>FFX.exe</SideStory>  <SideStoryParam>_ECalm</SideStoryParam>  <LastMission>FFX-2.exe</LastMission>  <LastMissionParam>FFX2_LASTMISSION</LastMissionParam>  <Credit>FFX&X-2_Will.exe</Credit>  <CreditParam></CreditParam></Paths>]
EDIT:
As Lord Ramza mentioned, there is whole code for VBF called "VBFtool".
Voids are:
VBFTool/VirtuosBigFileReader/
   *byte[] GetFileContents(string path)
   *void LoadBigFileFile(string path)

Example:
Code: [Select]
Code:
Program.LoadVBFData("MetaMenu/PS3Data/MenuMetaMenu/metamenu.ogg
Paths are MD5 hashed!
Though fear not. All files has to be written somewhere or at least their locations.
Now I'll take a look at those magic files.


Update:
PDB path:
Code: [Select]
Code:
R:\hg_code\ffx_magic_w32\source\ps3\ffx\magic\magic_0003\Release\magic_0003.pdb
The PS3 version of this file has .sprx extension.

Okay. I put the EXEs onto IDA, and .... we're home.
Full paths to files and whole game code is in some custom phyre format. I'm not sure yet, I have no info about phyre, but there are A LOT of debug strings for Phyre:Scripting language and extreme amount of debug strings, I mean EXTREME (Imagine FFVIII debug info and multiply it by 10).

Example:
Code: [Select]
Code:
.rdata:00B39DA8 00000054 C /FFX_Data/GameData/PS3Data/map/luca/luca01/fp/tex/GCM/13888_19_0_0_128_64.dds.phyre.rdata:00B3A658 0000004E C /FFX_Data/GameData/PS3Data/yonishi_data/dat_et/bat_eff/et_tex/tex/TexList.txt.rdata:00B3E35C 00000018 C Need update TextureName.rdata:00B3E398 0000000F C RenderAfterVFX.rdata:00B3EE90 00000017 C USE_CHARACTER_LIGHTING.rdata:00B3F41C 00000019 C CharacterSwitching: %.2f.rdata:00B3F438 00000005 C azit                    .rdata:00B3F440 00000005 C bika                    .rdata:00B3F448 00000005 C bjyt                    .rdata:00B3F450 00000005 C bltz                    .rdata:00B3F458 00000005 C bsil                    (...).rdata:00B3F594 00000023 C MapSwitching: %.2f fps\nMap Name:%s.rdata:00B3F5B8 0000000E C Debug Output:                        .rdata:00B3F5C8 0000000F C Material Name:                       .rdata:00B3F5D8 0000000A C Group ID:                            .rdata:00B3F5E4 0000000E C Animation ID:                        .rdata:00B3F5F4 0000000F C Current Frame:                       .rdata:00B3F604 0000000A C AutoPlay:                            .rdata:00B3F618 00000007 C %s%s%d                               .rdata:00B3F624 00000026 C Character Texture Animation: %.2f fps.rdata:00B3F64C 0000000D C Motion Mode:                         .rdata:00B3F65C 00000006 C Loop:                                .rdata:00B3F664 00000006 C Next:                                .rdata:00B3F66C 00000011 C Animation Count:                     .rdata:00B3F680 0000001E C Character Animation: %.2f fps        .rdata:00B3F6A0 00000010 C Character Name:                      .rdata:00B3F6B0 0000000A C Map Name:                            .rdata:00B3F6BC 00000019 C Character Polygon Count:             .rdata:00B3F6D8 0000000F C Battle Enable:                       .rdata:00B3F6E8 00000014 C ClothSystem Enable:                  .rdata:00B3F6FC 0000000B C UI Enable:                           .rdata:00B3F708 00000010 C MiniMap Enable:                      .rdata:00B3F718 00000010 C Show 4:3 Frame:                      .rdata:00B3F728 0000001F C Thunder Plain Treasure Enable:       .rdata:00B3F748 0000000E C Game Section:                        .rdata:00B3F758 00000016 C Saveload fake slot :                 .rdata:00B3F770 00000014 C Disable CRC check:                   .rdata:00B3F784 00000016 C Achievements Reset :                 and loads of more!

Debug outputter subroutine:
   .text:006B4CC0 (Unfortunately IDA claims it's unused. Also this sub-routine has no frame info)

The game has no OutputDebugString import... :/

Okay. Looks like we would have to create our own text display. Example listening:
sub_BF4270:
Taking uint_32 Size of *Src is:
Code: [Select]
Code:
../../../FFX_Data/GameData/PS3Data/chr/wep/w041/w041.ahwin32
The entry is dynamic. Therefore memory hotpatching at startup is impossible without pointer use.

Okay. I got this:
FF8.exe:
.text:00C255F0

Is:
.text:00C255F0 sub_C255F0      proc near               ; DATA XREF: .rdata:012FE164o
.text:00C255F0
.text:00C255F0 arg_0           = dword ptr  8
.text:00C255F0 arg_4           = dword ptr  0Ch
.text:00C255F0
.text:00C255F0                 push    ebp
.text:00C255F1                 mov     ebp, esp
.text:00C255F3                 push    [ebp+arg_4]
.text:00C255F6                 push    offset aS_19    ; "%s"
.text:00C255FB                 call    ds:printf   <--- Here we have printf std output  8) 8)
.text:00C25601                 add     esp, 8
.text:00C25604                 cmp     [ebp+arg_0], 4
.text:00C25608                 jnz     short loc_C2561A
.text:00C2560A                 call    ds:IsDebuggerPresent <--- :D 8-) 8-)
.text:00C25610                 test    eax, eax
.text:00C25612                 jz      short loc_C2561A
.text:00C25614                 call    ds:DebugBreak   <---  8-) 8-)
.text:00C2561A
.text:00C2561A loc_C2561A:                             ; CODE XREF: sub_C255F0+18j
.text:00C2561A                                         ; sub_C255F0+22j
.text:00C2561A                 pop     ebp
.text:00C2561B                 retn    8
.text:00C2561B sub_C255F0      endp

Okay. I already called AllocConsole, but still the game's printf doesn't show me what it has inside... :/

stdout has to be redirected to console. I found a solution:
freopen("CONOUT$", "w", stdout)
Might try, still a lot of code injection.
 
Last edited:
Already spotted one bug. after the first sinspawn fight when you are swimming around it says B: go down.

I actually needed to press A to swim down  no configuration was changed.

do like the "orignal soundtrack" option, though it seems the volume is lower relative to everything else compared to the original game.
 
Pretty pleased overall with the port. All I'd like to do is swap the lower poly battle and field models with the higher poly cutscene models-- but I'm sure it's too soon to say if that's even within the realm of possibility.
 
hey

why did square enix have to put final fantasy X and x2 all in 1 steam package for

it takes forever to install that way
 
Because it's FFX/X2 HD Remaster. :)

Square simply does not sell remasters stand alone. they always bundle it.

Personally i'm pissed at Kingdom Hearts 2.8 remix, since i already bought 2.5 on ps3...
 
Last edited:
how come square enix could of not released the games in a standalone package

like final fantasy x in 1 price and final fantasy x 2 in another price

that would of made the install alot quicker for everyone
 
Zara9: They make more money this way. They know a lot of people only want FFX and not FFX-2, but by packaging them together they force people to pay for both of them.
 
Personally i'm pissed at Kingdom Hearts 2.8 remix, since i already bought 2.5 on ps3...
KH2.5 and 2.8 don't feature any of the same games. 2.8 has Dream Drop Distance (the 3DS game), a small Birth by Sleep related game, and something Kingdom Hearts X related.
 
Oh. that seems a little more reasonable.  Crazy confusing numbering system....


still it's quite the money grab since i'd just be paying for the birth by sleep part.  And 3d without the touchscreen really isn't anything close o the same game.
 
Oh. that seems a little more reasonable.  Crazy confusing numbering system....


still it's quite the money grab since i'd just be paying for the birth by sleep part.  And 3d without the touchscreen really isn't anything close o the same game.
Yeah and the Birth by sleep section is actually an extended chapter untold in the door to darkness with Aqua from what i seen in the video. And the PS4 has a touchpad.   :-)

tumblr_nxvrugRHME1snri7qo1_500.gif


But it's time for me to stop changing the topic of this thread now. Just wanted to inform you the new's is all!
 
Last edited:
I know there was an old gameshark code that put Seymour in your party permanently. He's already coded with a sphere grid spot and an overdrive and all that, so would such a code be possible on PC through cheatengine or something like that?

EDIT: Anyone know where the game stores the save data? I'd like to try fiddling with it in a hex editor.
 
Last edited:
See at C:/Users/<your username>/Documents/SquareEnix/Final Fantasy X&X2/Final Fantasy X folder

About your question - yes, it's possible. :)
Just have some time with CheatEngine.
Also, there's LUA command like "AddParty" or something, so you can actually do this via Phyre scripting, but it needs VBF repacking and location of the LUA script that is missing at the moment.
 
Last edited:
Made a quick n dirty command line tool to extract files from the VBF using a text file containing possible file names.

Download it here (source code also available)

Have included a filelist.txt with a bunch of filenames grepped from the log file, it is nowhere near complete so please feel free to add to it as you find any new filenames =)
 
I had a file called OUTPUT.txt in the FFX folder, just seemed to be a log file of everything happening. That's where I got the filenames from. Still got a ways to go yet though ;)
 
Really... I was searching for this for hours. I knew there is printf and even was going to redirect stdout to console because I though it's outputting to unaccesible handle... ehh.
Thanks Topher! No need to lose time anymore! :P
 
Wasn´t there a phyreengine sdk floating around in the internet somewhere ?

The meshes are in the collada format (.dae) and texture are .dds, but they all have .phyre at the end of it. Has anyone found how the header looks like ?

The new menu files(ESC menu),  the chocobo that appears on the corner, the pause screen and the SQEX logo are in the .swf format, so they should be easy to mod right ?

Audio files are using the .fev format, i tried opening them with fmod studio but no luck
 
Last edited:
Made a quick n dirty command line tool to extract files from the VBF using a text file containing possible file names.

Download it here (source code also available)

Have included a filelist.txt with a bunch of filenames grepped from the log file, it is nowhere near complete so please feel free to add to it as you find any new filenames =)
Wow, very cool!
Again, I have no idea what I'm doing, but I found out you can get something out of the dds.phyre files by using a tool called TextureFinder found here: http://forum.xentax.com/viewtopic.php?f=33&t=9358
I put together a collection of very small findings here: https://imgur.com/a/b9HAy
Oh, and it looks like there's a list of all videos inside FFX_Data\GameData\PS3Data\Video\JP\FFX_VideoList.txt and they're all in .webm format to boot!

Anyways,
I also ripped the button textures from the PS2 original, if anyone wanted to do anything with them. Here: https://mega.nz/#!IsVHUZiA!CUwTAI-KROYrcB56PW_1L1Kn8wycvKO7vzOEjuWLqds
 
Last edited:
Wow, very cool!
Again, I have no idea what I'm doing, but I found out you can get something out of the dds.phyre files by using a tool called TextureFinder found here: http://forum.xentax.com/viewtopic.php?f=33&t=9358
I put together a collection of very small findings here: https://imgur.com/a/b9HAy
Oh, and it looks like there's a list of all videos inside FFX_Data\GameData\PS3Data\Video\JP\FFX_VideoList.txt and they're all in .webm format to boot!

Anyways,
I also ripped the button textures from the PS2 original, if anyone wanted to do anything with them. Here: https://mega.nz/#!IsVHUZiA!CUwTAI-KROYrcB56PW_1L1Kn8wycvKO7vzOEjuWLqds
I noticed the video file list and I was able to successfully extract some of the videos, but I haven't updated the file list. If you add any files to the file list, pastebin it and link me to it and i'll add them as I update the tool.
 
Status
Not open for further replies.
Back
Top