#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 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 #define GTA3_1 0x00000310 #define GTA3_2 0x0800FFFF #define VCPS2 0x0C02FFFF typedef unsigned char vertexcolor[4]; typedef float uvcoordinate[2]; typedef short face[4]; typedef float vector3f[3]; typedef struct _atomic _atomic; struct _atomic { int frmindex; int geoindex; int unknown0; int unknown1; }; typedef struct _split _split; struct _split { int nindex; int nvertex; int matindex; int *indices; }; typedef struct _texture _texture; struct _texture { short filterflags; short unknown; char *tex; char *alpha; }; typedef struct _material _material; struct _material { int unknown0; unsigned char color[4]; int unknown1; int hastex; int texread; _texture tex; float unknown2; float unknown3; float unknown4; int hasref; _texture reflection; }; typedef struct _geometry _geometry; struct _geometry { short flags; unsigned char nuv; unsigned char isps2; unsigned char newuvsets; int facec; int vertexc; int framec; float ambient; float diffuse; float specular; vertexcolor *vc; uvcoordinate *uv; face *face; vector3f *vertex; vector3f *normal; /* Bounding shpere */ float bs[4]; int bspos; int bsnor; int nmaterial; _material *mat; int facetype; int nsplit; int nindex; _split *split; }; typedef struct _frame _frame; struct _frame { float rotmatrix[3][3]; float posv[3]; /* position vector */ int parent; int unknown; char *name; }; typedef struct _clump _clump; struct _clump { int natomic; _atomic *atm; int nframe; _frame *frm; int ngeometry; _geometry *geo; }; typedef struct dff DFF; struct dff { _clump *clp; int nclump; }; DFF *dffread(FILE *, int, int); DFF *newdff(void); void readclump(FILE *, _clump *); void parsesection(_clump *, rwheader *, int, FILE *); void readsection(_clump *, rwheader *, FILE *); void readstruct(_clump *, rwheader *, int, FILE *); void dumpclump(_clump *); void writeclump(_clump *, FILE *); #endif