mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 13:41:31 +00:00
196 lines
3.6 KiB
C
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
|