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