View Single Post
  #1  
Old 09-19-2004, 02:34 PM
daeken_bb
Discordant
 
Join Date: Mar 2003
Location: Chambersburg, PA
Posts: 469
Default 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)
__________________
Keep me unemployed and working on OpenEQ, PM me about donating

Check out my deviantART page at http://daeken.deviantart.com/
Reply With Quote