1 /*
2    GenSurf plugin for GtkRadiant
3    Copyright (C) 2001 David Hyde, Loki software and qeradiant.com
4 
5    This library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9 
10    This library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14 
15    You should have received a copy of the GNU Lesser General Public
16    License along with this library; if not, write to the Free Software
17    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  */
19 
20 #include <stdlib.h>
21 #include <math.h>
22 #include <stdio.h>
23 #include "gensurf.h"
24 
25 // Heretic 2 - specific routines
26 
27 typedef struct palette_s
28 {
29 	guint8 r,g,b;
30 } palette_t;
31 
32 #define MIP_VERSION     2
33 #define PAL_SIZE        256
34 #define MIPLEVELS       16
35 
36 typedef struct miptex_s
37 {
38 	int version;
39 	char name[32];
40 	unsigned width[MIPLEVELS], height[MIPLEVELS];
41 	unsigned offsets[MIPLEVELS];        // four mip maps stored
42 	char animname[32];                  // next frame in animation chain
43 	palette_t palette[PAL_SIZE];
44 	int flags;
45 	int contents;
46 	int value;
47 } miptex_t;
48 
49 //=============================================================
GetDefSurfaceProps(char * Tex)50 int GetDefSurfaceProps( char *Tex ){
51 	return 0; // leo: only used for Heretic 2, fix later
52 	/*
53 	   char		path[NAME_MAX];
54 	   char        *p;
55 	   int         flags;
56 	   miptex_t	*mt;
57 	   FILE	    *f;
58 	   int         length;
59 	   int         pos;
60 
61 	   if(Game != HERETIC2) return 0;
62 	   if(!strlen(Tex)) return 0;
63 
64 	   mt = NULL;
65 	   flags = 0;
66 	   if(UsePak[Game])
67 	   {
68 	      FILE         *fpak;
69 	      pak_header_t pakheader;
70 	      pak_item_t   pakitem;
71 	      int          i;
72 	      int          num;
73 	      int          numitems;
74 
75 	      if (NULL != (fpak = fopen(pakfile[Game], "rb")))
76 	      {
77 	          sprintf(path,"textures/%s.m8",Tex);
78 	          g_strdown(path);
79 	          num=fread(&pakheader,1,sizeof(pak_header_t),fpak);
80 	          if((size_t)num < sizeof(pak_header_t))
81 	          {
82 	              fclose(fpak);
83 	              return 0;
84 	          }
85 	          if(strncmp(pakheader.id,"PACK",4))
86 	          {
87 	              fclose(fpak);
88 	              return 0;
89 	          }
90 	          numitems = pakheader.dsize/sizeof(pak_item_t);
91 	          fseek(fpak,pakheader.dstart,SEEK_SET);
92 	          for(i=0; i<numitems; i++)
93 	          {
94 	              fread(&pakitem,1,sizeof(pak_item_t),fpak);
95 	              if(strstr(pakitem.name,path))
96 	              {
97 	                  fseek(fpak,pakitem.start,SEEK_SET);
98 	                  if((mt = (miptex_t*)malloc(sizeof(miptex_t)))==NULL)
99 	                  {
100 	                      fclose(fpak);
101 	                      return 0;
102 	                  }
103 	                  else
104 	                  {
105 	                      fread(mt, 1, sizeof(miptex_t), fpak);
106 	                      flags = mt->flags;
107 	                      free(mt);
108 	                  }
109 	              }
110 	          }
111 	          fclose(fpak);
112 	      }
113 	   }
114 	   else
115 	   {
116 	      // Assume .map will be output to gamedir/maps, then back up
117 	      // to the gamedir and append /textures. Ugly but it should work
118 	      strcpy(path,gszMapFile);
119 	      g_strdown(path);
120 	      p = strstr(path,"maps");
121 	      if(!p) return 0;
122 	      p[0] = '\0';
123 	      strcat(path,"textures/");
124 	      strcat(path,Tex);
125 	      strcat(path,".m8");
126 	      f = fopen (path, "rb");
127 	      if (!f)
128 	          flags = 0;
129 	      else
130 	      {
131 	          pos = ftell (f);
132 	          fseek (f, 0, SEEK_END);
133 	          length = ftell (f);
134 	          fseek (f, pos, SEEK_SET);
135 	          if((mt = (miptex_t*)malloc(length+1))==NULL)
136 	              flags = 0;
137 	          else
138 	          {
139 	              ((char *)mt)[length] = 0;
140 	              fread(mt, 1, length, f);
141 	              fclose (f);
142 	              flags = mt->flags;
143 	              free(mt);
144 	          }
145 	      }
146 	   }
147 	   return flags;
148 	 */
149 }
150