2013-02-16 16:14:39 -08:00

196 lines
3.6 KiB
C

#ifndef __EQCLIENT_WLD_H_
#define __EQCLIENT_WLD_H_
#include "s3d.h"
#include "types.h"
#define FRAGMENT(name) status = name(&frag_obj, obj, (wld + pos + sizeof(struct_wld_basic_frag)), frag->size, frag->nameRef)
#define FRAGMENT_FUNC(name) int name(void **obj, wld_object *wld, uchar *buf, int len, int frag_name)
typedef struct struct_wld_header {
long magic;
long version;
long fragmentCount;
long header3;
long header4;
long stringHashSize;
long header6;
} struct_wld_header;
typedef struct struct_wld_basic_frag {
long size;
long id;
long nameRef;
} struct_wld_basic_frag;
typedef struct struct_Data36 {
long flags;
long fragment1;
long fragment2;
long fragment3;
long fragment4;
float centerX;
float centerY;
float centerZ;
long params2[3]; // 48
float maxDist;
float minX;
float minY;
float minZ;
float maxX;
float maxY;
float maxZ; // 24
short int vertexCount;
short int texCoordsCount;
short int normalsCount;
short int colorCount;
short int polygonsCount;
short int size6;
short int polygonTexCount;
short int vertexTexCount;
short int size9;
short int scale; // 20
} struct_Data36;
struct Data10 {
long flags, size1, fragment;
};
typedef struct WLDVertex {
double x, y, z;
float u, v;
short skin;
} WLDVertex;
typedef struct Vert {
signed short int x, y, z;
} Vert;
typedef struct TexCoordsNew {
signed long tx, tz;
} TexCoordsNew;
typedef struct TexCoordsOld {
signed short int tx, tz;
} TexCoordsOld;
typedef struct VertexNormal {
signed char nx, ny, nz;
} VertexNormal;
typedef struct VertexColor {
char color[4];
} VertexColor;
typedef struct WLDPolygon {
short int flags, v1, v2, v3;
} WLDPolygon;
typedef struct Poly {
long int flags, v1, v2, v3, tex;
} Poly;
typedef struct WLDTexture {
int count;
int *flags;
int params;
char **filenames;
uint32 *textures;
} WLDTexture;
typedef struct Mesh {
long name;
long polygonCount;
long vertexCount;
WLDVertex *verti;
Poly *poly;
WLDTexture *tex;
} Mesh;
typedef struct ZoneMesh {
long name;
long polygonCount;
long vertexCount;
WLDVertex **verti;
Poly **poly;
WLDTexture *tex;
} ZoneMesh;
typedef struct struct_frag {
long type;
long name;
void *frag;
}struct_frag;
typedef struct struct_Data21 {
float normal[3], splitdistance;
long region, node[2];
} struct_Data21;
typedef struct struct_Data22 {
long flags, fragment1, size1, size2, params1, size3, size4, params2, size5, size6;
} struct_Data22;
typedef struct struct_Data29 {
long region_count;
long *region_array;
long strlen;
char *str;
int region_type; // We fill this in with -1 for unknown, 1 for water, 2 for lava
} struct_Data29;
/*typedef struct BSP_Region {
} BSP_Region;*/
typedef struct BSP_Node {
long node_number;
float normal[3], splitdistance;
long region;
int special;
long left, right;
} BSP_Node;
typedef struct struct_Data15 {
uint32 ref, flags, fragment1;
float trans[3], rot[3];
float scale[3];
uint32 fragment2, flags2;
} struct_Data15;
typedef struct WLDPlaceable {
float trans[3], rot[3], scale[3];
Mesh *mesh;
} WLDPlaceable;
typedef struct Placeable_LL {
WLDPlaceable *obj;
struct Placeable_LL *next;
} Placeable_LL;
typedef struct wld_object {
int fragCount;
char loadBSP;
uchar *wld;
uchar *sHash;
uint8 _new;
s3d_object *s3d;
Placeable_LL *placeable, *placeable_cur;
struct wld_object *objs;
struct_frag **frags;
} wld_object;
#ifdef __cplusplus
extern "C" {
#endif
int WLD_Init(wld_object *obj, uchar *wld, s3d_object *s3d, char loadBSP);
int WLD_GetZoneMesh(wld_object *obj, ZoneMesh *mesh);
#ifdef __cplusplus
}
#endif
#endif