Important information: this site is currently scheduled to go offline indefinitely by end of the year.

FINAL FANTASY TYPE-0 HD PC

The Original Forum. Game archives, full of resources. How to open them? Get help here.
Romangelo
ultra-n00b
Posts: 1
Joined: Wed Mar 09, 2011 10:30 am

Re: FINAL FANTASY TYPE-0 HD PC

Post by Romangelo »

Can anyone tell me how to extract PNG files (for user interface images) from those files? I think they're in .bin format.

need some images for my website works.
NovaChrystalia
n00b
Posts: 10
Joined: Wed Dec 16, 2015 2:26 am
Has thanked: 6 times
Been thanked: 1 time

Re: FINAL FANTASY TYPE-0 HD PC

Post by NovaChrystalia »

I'm new to this, but I want to ask is there anyway I could change the text of the game, or could someone please tell me the right direction I need to follow? I wanted to do a fan translation in my native language. Thanks!
NovaChrystalia
n00b
Posts: 10
Joined: Wed Dec 16, 2015 2:26 am
Has thanked: 6 times
Been thanked: 1 time

Re: FINAL FANTASY TYPE-0 HD PC

Post by NovaChrystalia »

I'm willing to pay for anyone that can help me with this. Not a whole lot much but if I can afford I'll probably do.
Currently I use the above script to extract the game files but I have no idea how I can view at least the png files, which is icons/menu/interface images.
Hyder61112
ultra-n00b
Posts: 4
Joined: Sun Jul 03, 2016 9:37 pm
Has thanked: 1 time

Re: FINAL FANTASY TYPE-0 HD PC

Post by Hyder61112 »

NovaChrystalia wrote:I'm willing to pay for anyone that can help me with this. Not a whole lot much but if I can afford I'll probably do.
Currently I use the above script to extract the game files but I have no idea how I can view at least the png files, which is icons/menu/interface images.
Try To Use "console texture explorer (psp/ps2)" its hard to use. but may help.
NovaChrystalia wrote:I'm new to this, but I want to ask is there anyway I could change the text of the game, or could someone please tell me the right direction I need to follow? I wanted to do a fan translation in my native language. Thanks!
hex editor can absolutely do that.
Romangelo wrote:Can anyone tell me how to extract PNG files (for user interface images) from those files? I think they're in .bin format.

need some images for my website works.
Try To Use "console texture explorer (psp/ps2)" its hard to use. but may help
Last edited by Gh0stBlade on Fri Aug 26, 2016 1:32 pm, edited 2 times in total.
Reason: Triple post merge.
User avatar
Casedey
beginner
Posts: 34
Joined: Sat Aug 20, 2011 6:27 am
Has thanked: 43 times
Been thanked: 12 times

Re: FINAL FANTASY TYPE-0 HD PC

Post by Casedey »

Is there a script for the models?
Hyder61112
ultra-n00b
Posts: 4
Joined: Sun Jul 03, 2016 9:37 pm
Has thanked: 1 time

Re: FINAL FANTASY TYPE-0 HD PC

Post by Hyder61112 »

Casedey wrote:Is there a script for the models?
Explain Your Goal & i'll try to help. email me on [email protected]
youarebritish
n00b
Posts: 13
Joined: Thu Oct 29, 2015 9:23 pm
Been thanked: 7 times

Re: FINAL FANTASY TYPE-0 HD PC

Post by youarebritish »

Sorry to bump this, but has anyone managed to get the model extraction script working? I keep getting the error "*ERROR Line 150: Template passed end of file at variable 'unknown01'.
" I've tried it even on p_sword_hi, which was shown extracted in the post with it, but no luck. :/
User avatar
IcicleWater
ultra-n00b
Posts: 2
Joined: Mon Apr 03, 2017 5:27 pm

Re: FINAL FANTASY TYPE-0 HD PC

Post by IcicleWater »

Excuse me, I have already extracted the pac files, but where are the models? I think that maybe the models are in bin files, but how to import it into 3dsmax? I'm new here... :)
User avatar
IcicleWater
ultra-n00b
Posts: 2
Joined: Mon Apr 03, 2017 5:27 pm

Re: FINAL FANTASY TYPE-0 HD PC

Post by IcicleWater »

EcheloCross wrote:ShivShubh, quite a few entrys in the .fsd file have 0 sizes. Not sure if they are further down in the package under the same name with a valid size, but if they have a 0 size in the fsd, its possible only their name and the blank fsd entry are still there, just not the file data.

Ker-schploink!
Image

Here is the layout I see so far:

Code: Select all

//--------------------------------------
// File: Final Fantasy Type-0 HD Model Binary Template
// Author: Echelo
// Revision: 0.06 info only
//--------------------------------------

local int i;
local int j;
LittleEndian();

struct MODEL_FILE
{
    struct MODEL_HEADER
    {
        uint unknown01 <bgcolor=0x0000FF>;
        uint unknown02 <bgcolor=0x0000FF>;
        uint vertexInfoPointer1 <bgcolor=0x00FF00>;
        uint unknown04 <bgcolor=0x0000FF>;
        ushort count02 <bgcolor=0xFFCC00>;
        ushort count01 <bgcolor=0xFFCC00>;
        ushort materialCount <bgcolor=0xFFCC00>;
        ushort textureCount <bgcolor=0xFFCC00>;
        ushort count06 <bgcolor=0xFFCC00>;
        ushort count05 <bgcolor=0xFFCC00>;
        ushort count07 <bgcolor=0xFFCC00>;
        ushort count08 <bgcolor=0xFFCC00>;
        uint64 address01 <bgcolor=0xFF8800>;
        uint64 materialInfoAddress <bgcolor=0xFF8800>;
        uint64 textureInfoAddress <bgcolor=0xFF8800>;
        uint64 address04 <bgcolor=0xFF8800>;
        uint64 address05 <bgcolor=0xFF8800>;
        uint64 address06 <bgcolor=0xFF8800>;
        uint64 address07 <bgcolor=0xFF8800>;
        uint64 vertexInfoPointer2 <bgcolor=0x00FF00>;
        uint64 address09 <bgcolor=0xFF8800>;
        uint64 address10 <bgcolor=0xFF8800>;
        uint64 address11 <bgcolor=0xFF8800>;
        uint64 address12 <bgcolor=0xFF8800>;
        uint64 address13 <bgcolor=0xFF8800>;
        uint64 address14 <bgcolor=0xFF8800>;
        uint64 address15 <bgcolor=0xFF8800>;
        uint64 address16 <bgcolor=0xFF8800>;
        uint unknown05 <bgcolor=0x0000FF>;
        ushort modelCount <bgcolor=0x00FF00>;
        ushort unknown06 <bgcolor=0x0099FF>;
        uint unknown07 <bgcolor=0x0000FF>;
        ushort unknown08 <bgcolor=0x0000FF>;
        ushort unknown09 <bgcolor=0x0000FF>;
    } modelHeader;

    if (modelHeader.count01 != 0)
    {
        
        FSeek(modelHeader.address01);
        struct TABLE_01
        {
            for (i = 0; i < modelHeader.count01; i++)
            {
                struct TABLE_01_ENTRY
                {
                    uint unknown01;
                    uint unknown02;
                    uint unknown03;
                    uint unknown04;
                } table01Entry;
            }
        } table01 <bgcolor=0x0099FF>;
    }

    if (modelHeader.materialCount != 0)
    {
        FSeek(modelHeader.materialInfoAddress);
        struct MATERIAL_INFO_TABLE
        {
            for (i = 0; i < modelHeader.materialCount; i++)
            {
                struct MATERIAL_INFO_ENTRY
                {
                    ushort diffuseMapIndex;
                    ushort normalMapIndex;
                    ushort specularMapIndex;
                    ushort unknown04;
                    ushort unknown05;
                    ushort unknown06;
                    ushort unknown07;
                    ushort unknown08;
                    ushort unknown09;
                    ushort unknown10;
                    ushort unknown11;
                    ushort unknown12;
                    ushort unknown13;
                    ushort unknown14;
                    ushort unknown15;
                    ushort unknown16;
                    ushort unknown17;
                    ushort specularLevelMapIndex; //not sure what kind of map this is ??
                    ushort unknown19;
                    ushort unknown20;
                    ushort unknown21;
                } materialInfoEntry;
            }
        } materialInfoTable <bgcolor=0x00FF00>;
    }

    if (modelHeader.textureCount != 0)
    {
        FSeek(modelHeader.textureInfoAddress);
        struct TEXTURE_INFO_TABLE
        {
            for (i = 0; i < modelHeader.textureCount; i++)
            {
                struct TEXTURE_INFO_ENTRY
                {
                    ushort textureWidth;
                    ushort textureHeight;
                    uint textureSize;
                    uint textureAddress;
                    uint unknown04;
                } textureInfoEntry;
            }
        } textureInfoTable <bgcolor=0x00FF00>;
    }

    if (modelHeader.count05 != 0)
    {
        FSeek(modelHeader.address05);
        struct TABLE_05
        {
            for (i = 0; i < modelHeader.count05; i++)
            {
                struct TABLE_05_ENTRY
                {
                    float unknown01;
                    float unknown02;
                    float unknown03; //?? not sure if float as only seen null here
                    byte unknown04;
                    byte unknown05;
                    byte unknown06;
                    byte unknown07;
                } table05Entry;
            }
        } table05 <bgcolor=0x0099FF, comment="fvf table?">;
    }

    if (modelHeader.address06 != 0)
    {
        FSeek(modelHeader.address06);
        struct TABLE_06
        {
            uint unknown01;
            float unknown02;
            float unknown03;
            float unknown04;
            ushort unknown05;
            ushort unknown06;
            uint unknown07;
            uint unknown08;
            uint unknown09;
            uint unknown10;
            uint unknown11;
            float boundingBoxCornerA_xPosition;
            float boundingBoxCornerA_yPosition;
            float boundingBoxCornerA_zPosition;
            float boundingBoxCornerB_xPosition;
            float boundingBoxCornerB_yPosition;
            float boundingBoxCornerB_zPosition;
            uint unknown12;
            uint unknown13;
            uint unknown14;
            uint unknown15;
        } table06 <bgcolor=0x0099FF>;
    }

    if (modelHeader.address07 != 0)
    {
        FSeek(modelHeader.address07);
        struct TABLE_07
        {
            uint unknown01;
            uint unknown02;
            uint unknown03;
            uint unknown04;
            uint unknown05;
            uint unknown06;
            uint unknown07;
            ushort unknown08;
        } table07 <bgcolor=0x0000FF>;
    }

    if (modelHeader.address13 != 0)
    {
        FSeek(modelHeader.address13);
        ushort unknownA;
        ushort table13_count;
        struct TABLE_13
        {
            for (i = 0; i < table13_count; i++)
            {
                struct TABLE_13_ENTRY
                {
                    ushort index;
                } table13Entry;
            }
        } table13 <bgcolor=0x00FFFF>;
    }

    if (modelHeader.vertexInfoPointer1 != 0)
    {
        FSeek(modelHeader.vertexInfoPointer1);
        if (modelHeader.modelCount == 0)
        {
            uint vertexInfoAddress;
            uint vertexInfoCount;
            ushort vertexInfoStride;
            ushort unknown01;
            uint unknown02;
            uint unknown03;
            uint unknown04;
            uint unknown05;
            uint unknown06;
            uint unknown07;
            uint unknown08;
            uint unknown09;
            uint unknown10;
            uint meshPartCount;
        
            /*for (i = 0; i < meshPartCount; i++)
            {
                struct FACE_GROUP_INFO
                {
                    uint faceIndexCountA <bgcolor=0xFFCC00>;
                    uint faceIndexCountB <bgcolor=0xFFCC00>;
                    byte unknownF01 <bgcolor=0x0000FF>;
                    byte unknownF02 <bgcolor=0x0000FF>;
                    byte materialIndex <bgcolor=0xFF00AA>;
                    byte unknownF03 <bgcolor=0x0000FF>;
        
                    struct FACE_GROUP
                    {
                        for (j = 0; j < (faceIndexCountA / 3); j++)
                        {
                            struct FACE_ENTRY
                            {
                                uint triangleIndex0;
                                uint triangleIndex1;
                                uint triangleIndex2;
                            } faceEntry;
                        }
                    } faceGroup;
                    
                } faceGroupInfo <bgcolor=0x879E2B>;
            }
        
            FSeek(vertexInfoAddress);
            struct VERTEX_INFO_ENTRYS
            {
                for (i = 0; i < vertexInfoCount; i++)
                {
                    struct VERTEX_INFO_ENTRY
                    {
                        if (vertexInfoStride == 0x44)
                        {
                            float xPosition;
                            float yPosition;
                            float zPosition;
                            byte unknown01;
                            byte unknown02;
                            byte unknown03;
                            byte unknown04;
                            byte unknown05;
                            byte unknown06;
                            byte unknown07;
                            byte unknown08;
                            uint unknown09;
                            uint unknown10;
                            uint unknown11;
                            uint unknown12;
                            uint unknown13;
                            uint unknown14;
                            byte unknown15;
                            byte unknown16;
                            byte unknown17;
                            byte unknown18;
                            float tu;
                            float tv;
                            float tu1;
                            float tv1;
                            float tu2;
                            float tv2;
                        }
                    } vertexInfoEntry;
                }
            } vertexInfoEntrys <bgcolor=0xFF3300>;*/
        }
        else
        {
            struct MODEL_INFO_ADDRESSES
            {
                for (i = 0; i < modelHeader.modelCount; i++)
                {
                    struct MODEL_ADDRESS
                    {
                        uint64 address;
                    } modelAddress;
                }
            } modelInfoAddresses <bgcolor=0x33FF00>;

            struct MODEL_INFO_ENTRYS
            {
                for (i = 0; i < modelHeader.modelCount; i++)
                {
                    FSeek(modelInfoAddresses.modelAddress[i].address);
                    struct MODEL_INFO_ENTRY
                    {
                        uint vertexInfoAddress;
                        uint vertexInfoCount;
                        ushort vertexInfoStride;
                        ushort unknown01;
                        uint unknown02;
                        uint unknown03;
                        uint unknown04;
                        uint unknown05;
                        uint unknown06;
                        uint unknown07;
                        uint unknown08;
                        uint unknown09;
                        uint unknown10;
                        uint meshPartCount;
                    } modelInfoEntry;
                }
            } modelInfoEntrys <bgcolor=0xCC8800>;
        }
    }
} modelFile;
[/size]
Excuse me, how did you extract the model of queen?I have already extracted the pac files,but how to import the bin files into 3dsmax?
TRDaz
mega-veteran
mega-veteran
Posts: 215
Joined: Sat Sep 24, 2011 7:06 pm
Has thanked: 78 times
Been thanked: 32 times

Re: FINAL FANTASY TYPE-0 HD PC

Post by TRDaz »

So I wanted to attempt at writing a script for the models, but saw that the .bin files could be an archive rather than a model file. I tried the .bin Noesis script for FF13 in case the format was the same but it doesn't work. Would anyone know how to extract the .bin files? The decryptor doesn't make Noesis work with them either.

Here is a sample file if someone wants to take a look:
https://drive.google.com/file/d/11T-EAT ... sp=sharing
NovaChrystalia
n00b
Posts: 10
Joined: Wed Dec 16, 2015 2:26 am
Has thanked: 6 times
Been thanked: 1 time

Re: FINAL FANTASY TYPE-0 HD PC

Post by NovaChrystalia »

This is a reply from EcheloCross to me when I asked him how could he open the model in a 3d application, if someone needs it:
if you convert that binary template to any language most of the work is done. The models are grouped into separate meshes inside the model files, the textures reside near the end of the file and their info is in the toc. They're dx10 textures so I had to convert them with texconv after extracting them. Then I wrote all the vertex, uv, and face info to a .obj and referenced the textures in a .mtl. There are also material definitions in the file telling which texture to use for each group of faces.
TRDaz
mega-veteran
mega-veteran
Posts: 215
Joined: Sat Sep 24, 2011 7:06 pm
Has thanked: 78 times
Been thanked: 32 times

Re: FINAL FANTASY TYPE-0 HD PC

Post by TRDaz »

Unfortunately that doesn't help on the encryption. Can't get anything until the files are decrypted.
Acewell
VIP member
VIP member
Posts: 1330
Joined: Wed Nov 05, 2008 12:16 pm
Has thanked: 2710 times
Been thanked: 884 times

Re: FINAL FANTASY TYPE-0 HD PC

Post by Acewell »

TRDaz wrote:Here is a sample file if someone wants to take a look:
https://drive.google.com/file/d/11T-EAT ... sp=sharing
looks compressed, this bms script will decompress it :D

Code: Select all

# script for QuickBMS http://aluigi.altervista.org/quickbms.htm

comtype unzip_dynamic
get NAME basename
get EXT extension
string NAME + _decomp.
string NAME + EXT
get ZSIZE asize
clog NAME 0x0 ZSIZE ZSIZE
i see some indices and vertex blocks and dx10 textures so it looks correct to me :]
Puterboy1
mega-veteran
mega-veteran
Posts: 204
Joined: Fri Mar 02, 2018 3:05 am
Been thanked: 7 times

Re: FINAL FANTASY TYPE-0 HD PC

Post by Puterboy1 »

Using Ravioli Tools, I was able to find a few of the English voice files in the .pac's, but when I used quickbms and the .BMS file to extract them, I got the Japanese voice files (entirely). I tried overwriting and renaming but got no success. I need both languages for the sake of comparison and other reasons. Is there something I am missing in order to get the English versions of the voice files?

BTW, the files are .scd, which are convertible in foobar2000, but even that is nothing compared to what I want.
NovaChrystalia
n00b
Posts: 10
Joined: Wed Dec 16, 2015 2:26 am
Has thanked: 6 times
Been thanked: 1 time

Re: FINAL FANTASY TYPE-0 HD PC

Post by NovaChrystalia »

TRDaz wrote:Unfortunately that doesn't help on the encryption. Can't get anything until the files are decrypted.
Did you try AceWell's script?
I wanted to play around with the models too but still haven't find a way to open them in 3dsmax or any 3d application... I hope you still want to write the script for extracting these models!
Post Reply