Just finished work on the latest version of the WLD convertor. I actually tested it this time
It gives you almost a godly feeling to be able to take poknowledge and make it into a .ter file
As before, you can get the neccesary files (wld.c, wld.h, s3d.c, s3d.h, and ter.h) from
http://home.archshadow.com/~daeken/openeq/.
You can also download a package of OpenEQ with this included in it from
http://home.archshadow.com/~daeken/openeq.tar.bz2
Code:
#include <stdio.h>
#include "s3d.h"
#include "wld.h"
#include "ter.h"
int main(int argc, char **argv) {
wld_object wld;
ZoneMesh zm;
s3d_object s3d;
FILE *in, *out;
int i;
char tex_name[16];
char *s3d_name;
uchar *wld_buf;
ter_header thdr;
ter_vertex vert;
ter_triangle tri;
if(argc < 3) {
printf("Usage: ./%s [input.s3d] [output.ter]\n", argv[0]);
return;
}
s3d_name = (char *) malloc(strlen(argv[1]) + 5);
sprintf(s3d_name, "%s.s3d", argv[1]);
S3D_Init(&s3d, fopen(s3d_name, "r"));
sprintf(s3d_name, "%s.wld", argv[1]);
S3D_GetFile(&s3d, s3d_name, &wld_buf);
free(s3d_name);
out = fopen(argv[2], "w");
WLD_Init(&wld, wld_buf, &s3d, 0);
WLD_GetZoneMesh(&wld, &zm);
memcpy(thdr.magic, "EQGT", 4);
thdr.version = 2;
thdr.mat_count = zm.tex->count;
thdr.vert_count = zm.vertexCount;
thdr.tri_count = zm.polygonCount;
thdr.list_len = 0;
for(i = 0; i < thdr.mat_count; ++i) {
sprintf(tex_name, "tex_%i", i);
thdr.list_len += strlen(tex_name) + 1;
thdr.list_len += strlen(zm.tex->filenames[i]) + 1;
}
fwrite(&thdr, 1, sizeof(ter_header), out);
for(i = 0; i < thdr.mat_count; ++i) {
sprintf(tex_name, "tex_%i", i);
fwrite(tex_name, 1, strlen(tex_name) + 1, out);
fwrite(zm.tex->filenames[i], 1, strlen(zm.tex->filenames[i]) + 1, out);
}
for(i = 0; i < thdr.vert_count; ++i) {
vert.x = zm.verti[i]->x;
vert.y = zm.verti[i]->y;
vert.z = zm.verti[i]->z;
vert.u = zm.verti[i]->u;
vert.v = zm.verti[i]->v;
fwrite(&vert, 1, sizeof(ter_vertex), out);
}
for(i = 0; i < thdr.tri_count; ++i) {
tri.v1 = zm.poly[i]->v1;
tri.v2 = zm.poly[i]->v2;
tri.v3 = zm.poly[i]->v3;
tri.group = zm.poly[i]->tex;
tri.unk = 1;
fwrite(&tri, 1, sizeof(ter_triangle), out);
}
fwrite("foo", 1, 3, out);
}
Happy Hacking,
Lord Daeken M. BlackBlade
(Cody Brocious)