| daeken_bb | 
			09-19-2004 02:34 PM | 
		 
		 
		 
		
			WLD->TER Converter v0.1   
		
		
		Just whipped this up in 15 minutes or so.  It takes a zone s3d file and outputs a .TER for it :) 
This requires the files s3d.c/.h, wld.c/.h, and ter.h from the OpenEQ source to build, which are available at  http://home.archshadow.com/~daeken/openeq/.
 
	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); 
  } 
} 
 Happy Hacking, 
Lord Daeken M. BlackBlade 
(Cody Brocious)  
	 |