#include "../rw.h" #ifndef DFF_H #define DFF_H #define CLUMP 0x10 #define FRAMELIST 0xE #define GEOMETRYLIST 0x1A #define GEOMETRY 0xF #define MATERIALLIST 0x8 #define MATERIAL 0x7 #define TEXTURE 0x6 #define ATOMIC 0x14 #define STRUCT 0x1 #define STRING 0x2 #define EXTENSION 0x3 #define FRAME 0x253F2FE #define HANIM 0x11E #define BINMESH 0x50E #define NATIVEDATA 0x510 #define SKIN 0x116 #define PARTICLES 0x118 #define MORPH 0x105 #define SKYMIPMAP 0x110 #define MATERIALEFFECTS 0x120 #define RIGHTTORENDER 0x1F #define SPECULARMAT 0x253F2F6 #define REFLECTIONMAT 0x253F2FC #define MESHEXTENSION 0x253F2FD #define COLLISIONMODEL 0x253F2FA #define NIGHTVERTEXCOLOR 0x253F2F9 #define ADCPLG 0x134 #define PS2 1 #define PC 0 #define X 0 #define Y 1 #define Z 2 #define U 0 #define V 1 #define R 0 #define G 1 #define B 2 #define A 3 #define HASUV 0x04 #define HASVCOLORS 0x08 #define HASNORMALS 0x10 #define MODULEMAT 0x40 #define HASMULUV 0x80 int platform; typedef struct atomic { int frameindex; int geometryindex; int unknown0; int unknown1; } atomic; typedef struct split { int indexcount; int vertexcount; int matindex; int *indices; /* VC PS2 */ unsigned char **vc; float **uv[2]; float **vertices; float **normals; int *winding; /* SA PS2 */ int saindexcount; float **savertices; float **sauv[2]; float **sanormals; unsigned char **savc; int *saflags; int savertexcount; } split; typedef struct texture { short filterflags; short unknown; char *tex; char *alpha; } texture; typedef struct material { int unknown0; unsigned char color[4]; int unknown1; int hastexture; int texread; texture tex; float unknown2; float unknown3; float unknown4; int hasreflection; texture reflection; } material; typedef struct geometry { short flags; unsigned char uvsets; unsigned char isps2; unsigned char newuvsets; int facec; int vertexc; int framec; float ambient; float diffuse; float specular; /* Bounding shpere */ float bs[4]; int bspos; int bsnor; unsigned char **vc; float **uv[2]; unsigned short **faces; float **vertices; float **normals; int matcount; int mc; material *mat; int facetype; int splitcount; int indexcount; split *splt; /* not in dff file, only used by dff viewer */ int normaltype; } geometry; typedef struct frame { float rotmatrix[4][4]; float absmat[4][4]; float positionv[3]; int parent; int unknown; char *name; int display; } frame; typedef struct clump { int objcount; int oc; atomic *atm; int frmcount; int fc; frame *frm; int geocount; int gc; geometry *geo; } clump; struct Dff { clump *clp; int clumpcount; }; float *CalculateNormal(float *v0, float *v1, float *v2); //void DestroyDff(Dff *dff); //void ReadClump(clump *clp, int start, FILE *dff); void WriteObj(clump *clp, FILE *obj); //void WriteDff(clump *clp, FILE *newdff); void ReadBinMesh(geometry *geo, FILE *dff); void ReadNativeDataVCPS2(geometry *geo, FILE *dff); void ReadNativeDataSAPS2(geometry *geo, FILE *dff); int IsSameVert(float *vert0, float *vert1); #endif