Jump to content

[PS3] DBZ B3HD Model Part .awg


Go to solution Solved by NocturnalRhys,

Recommended Posts

  • Engineers
Posted (edited)

Send more samples. But it looks simple.

Good sign, it doesn't use tri strips

image.png.13c8c38fcce2d501536555c086b17f0f.png

image.png.cde75cc74cd8ab8ef180e072e921dbd8.png

I also figured out name of the game > Dragon Ball Z HD. Can you also provide textures? I don't think that uv's are like that...

Edited by h3x3r
  • Engineers
Posted

So the first sample was just part of the file right? Anyway after aplying texturte I am now sure that uv's are fine. They need to be just fliped vertically or texture.

Posted
14 minutes ago, h3x3r said:

So the first sample was just part of the file right? Anyway after aplying texturte I am now sure that uv's are fine. They need to be just fliped vertically or texture.

the hands i showed from the .awg came from the goku.awo file as well, below i showed a .rar called face.rar which is goku's .awg face, could you provide me with information on how the .awg parts are structured? i know a way to create an awg and add model parts in dbz b3 for ps2, but i still don't know how the .awg model parts work in the ps3 version, if you tell me it would be a great help! so i can try to create an obj to awg converter and insert it into an .awo model

  • Engineers
Posted (edited)

So you want to know the struct of the #AWG or the whole #AWO?

So here's struct for #AWG, there are still some unparsed data... A lot of unknowns too 😉

//------------------------------------------------
//--- 010 Editor v14.0 Binary Template
//
//      File: 
//   Authors: 
//   Version: 
//   Purpose: 
//  Category: 
// File Mask: 
//  ID Bytes: 
//   History: 
//------------------------------------------------
OutputPaneClear();
BigEndian();
local string FileName=GetFileName(),FilePath=FileNameGetPath(FileName,true),BaseName=FileNameGetBase(FileName,false);
local uint32 i,j,k,l;

struct
{
    char Sign[4];
    uint32 DataOffset;
    uint32 Unknown_0;
    uint32 Unknown_1;
    uint32 Unknown_2;
    uint32 Unknown_0_Offset;
    uint32 Unknown_3;
    uint32 ShapeNameOffset;
    uint32 Unknown_1_Offset;
    uint32 Unknown_4;
    uint32 VertexBufferOffset;
    uint32 VertexBufferSize;
    uint32 IndexBufferOffset;
    uint32 IndexBufferSize;
    uint32 Unknown_2_Offset;
    uint32 Unknown_5;
}Header;


struct 
{
    FSeek(Header.ShapeNameOffset);
    struct 
    {
        string ShapeName;
    }Name;
    
    
    struct 
    {
        FSeek(Header.Unknown_1_Offset);
        struct
        {
            float Unknown_0[8];
            uint32 Unknown_1;
            uint32 Unknown_2;
            uint32 Unknown_3;
            uint32 Unknown_4;
            uint32 Unknown_5;
            uint32 Unknown_6;
            uint32 Unknown_7;
            uint32 Unknown_8;
            uint32 Unknown_9;
            uint32 Unknown_10;
            
        }Info;
        
        FSeek(Header.Unknown_0_Offset);
        float Unknown_0[12];
        ubyte Unknown_1;
        ubyte Unknown_2;
        ubyte Unknown_3;
        ubyte Unknown_4;
        uint32 TypeInfoOffset[7];
        
        struct 
        {
            uint32 Type;
            uint32 Offset;
        }TypeInfo[Unknown_3];
        
        for (i=0; i < Unknown_3; i++)
        {
            if (TypeInfo[i].Type == 0)
            {
                FSeek(TypeInfo[i].Offset);
                float Unknown[16];
            }
            else
            {
                FSeek(TypeInfo[i].Offset);
                uint32 Unknown_5[4];
                float Unknown_6[6];
                uint32 Unknown_7;
                uint32 Stride;
                uint32 Unknown_8;
                uint32 Unknown_9;
                uint32 Unknown_10;
                uint32 VertexCount;
                uint32 Unknown_11;
                uint32 IndexCount; // *3
                ubyte Unknown_12;
                string MaterialName; // Not sure
                ubyte Unknown_13;
                uint16 Unknown_14;
            }
        }
    }MainInfo;
    
    struct 
    {
        FSeek(Header.VertexBufferOffset);
        struct 
        {
            float PosX,PosY,PosZ;
            float Unknown_0;
            uint32 Unknown_1;
            float VNPosX,VNPosY,VNPosZ;
            uint32 FFFFFFFF;
            float UVPosX,UVPosY;
            //Printf("v %f %f %f\nvt %f %f\nvn %f %f %f\n",PosX,PosY,PosZ,UVPosX,UVPosY,VNPosX,VNPosY,VNPosZ);
        }Vertices[MainInfo.VertexCount]<optimize=false>;

        //Printf("\ng %s_Shape\n",Name.ShapeName);
        FSeek(Header.IndexBufferOffset);
        struct 
        {
            uint16 F1,F2,F3;
            //Printf("f %u/%u/%u %u/%u/%u %u/%u/%u\n",F1+1,F1+1,F1+1,F2+1,F2+1,F2+1,F3+1,F3+1,F3+1);
        }Indices[MainInfo.IndexCount]<optimize=false>;
        //OutputPaneSave(FilePath + Name.ShapeName + ".obj");
    }Buffers;
}Shape;

 

Edited by h3x3r
  • Solution
Posted
16 hours ago, h3x3r said:

So you want to know the struct of the #AWG or the whole #AWO?

So here's struct for #AWG, there are still some unparsed data... A lot of unknowns too 😉

//------------------------------------------------
//--- 010 Editor v14.0 Binary Template
//
//      File: 
//   Authors: 
//   Version: 
//   Purpose: 
//  Category: 
// File Mask: 
//  ID Bytes: 
//   History: 
//------------------------------------------------
OutputPaneClear();
BigEndian();
local string FileName=GetFileName(),FilePath=FileNameGetPath(FileName,true),BaseName=FileNameGetBase(FileName,false);
local uint32 i,j,k,l;

struct
{
    char Sign[4];
    uint32 DataOffset;
    uint32 Unknown_0;
    uint32 Unknown_1;
    uint32 Unknown_2;
    uint32 Unknown_0_Offset;
    uint32 Unknown_3;
    uint32 ShapeNameOffset;
    uint32 Unknown_1_Offset;
    uint32 Unknown_4;
    uint32 VertexBufferOffset;
    uint32 VertexBufferSize;
    uint32 IndexBufferOffset;
    uint32 IndexBufferSize;
    uint32 Unknown_2_Offset;
    uint32 Unknown_5;
}Header;


struct 
{
    FSeek(Header.ShapeNameOffset);
    struct 
    {
        string ShapeName;
    }Name;
    
    
    struct 
    {
        FSeek(Header.Unknown_1_Offset);
        struct
        {
            float Unknown_0[8];
            uint32 Unknown_1;
            uint32 Unknown_2;
            uint32 Unknown_3;
            uint32 Unknown_4;
            uint32 Unknown_5;
            uint32 Unknown_6;
            uint32 Unknown_7;
            uint32 Unknown_8;
            uint32 Unknown_9;
            uint32 Unknown_10;
            
        }Info;
        
        FSeek(Header.Unknown_0_Offset);
        float Unknown_0[12];
        ubyte Unknown_1;
        ubyte Unknown_2;
        ubyte Unknown_3;
        ubyte Unknown_4;
        uint32 TypeInfoOffset[7];
        
        struct 
        {
            uint32 Type;
            uint32 Offset;
        }TypeInfo[Unknown_3];
        
        for (i=0; i < Unknown_3; i++)
        {
            if (TypeInfo[i].Type == 0)
            {
                FSeek(TypeInfo[i].Offset);
                float Unknown[16];
            }
            else
            {
                FSeek(TypeInfo[i].Offset);
                uint32 Unknown_5[4];
                float Unknown_6[6];
                uint32 Unknown_7;
                uint32 Stride;
                uint32 Unknown_8;
                uint32 Unknown_9;
                uint32 Unknown_10;
                uint32 VertexCount;
                uint32 Unknown_11;
                uint32 IndexCount; // *3
                ubyte Unknown_12;
                string MaterialName; // Not sure
                ubyte Unknown_13;
                uint16 Unknown_14;
            }
        }
    }MainInfo;
    
    struct 
    {
        FSeek(Header.VertexBufferOffset);
        struct 
        {
            float PosX,PosY,PosZ;
            float Unknown_0;
            uint32 Unknown_1;
            float VNPosX,VNPosY,VNPosZ;
            uint32 FFFFFFFF;
            float UVPosX,UVPosY;
            //Printf("v %f %f %f\nvt %f %f\nvn %f %f %f\n",PosX,PosY,PosZ,UVPosX,UVPosY,VNPosX,VNPosY,VNPosZ);
        }Vertices[MainInfo.VertexCount]<optimize=false>;

        //Printf("\ng %s_Shape\n",Name.ShapeName);
        FSeek(Header.IndexBufferOffset);
        struct 
        {
            uint16 F1,F2,F3;
            //Printf("f %u/%u/%u %u/%u/%u %u/%u/%u\n",F1+1,F1+1,F1+1,F2+1,F2+1,F2+1,F3+1,F3+1,F3+1);
        }Indices[MainInfo.IndexCount]<optimize=false>;
        //OutputPaneSave(FilePath + Name.ShapeName + ".obj");
    }Buffers;
}Shape;

 

Thanks! Thank you so much, really. With this I'll be able to make an OBJ to AWG converter. When I have it, I'll share it, although I don't know if many people like the B3HD version, but I'll post it anyway! Thanks in advance for the help, and I'll continue learning more as a researcher.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...