remove RSA's md4.c, replace by DP's
[xonotic/netradiant.git] / tools / quake2 / qdata_heretic2 / pics.c
1 /*
2 Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
4
5 This file is part of GtkRadiant.
6
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 */
21
22
23 #include "qdata.h"
24
25 byte                    *byteimage, *lbmpalette;
26 int                             byteimagewidth, byteimageheight;
27
28 qboolean                TrueColorImage;
29 unsigned                *longimage;
30 int                             longimagewidth, longimageheight;
31
32 char                    pic_prefix[1024];
33 extern  char            *g_outputDir;
34
35 /*
36 ===============
37 Cmd_Pic
38 ===============
39 */
40
41 void Cmd_Pic (void)
42 {
43         int             xl,yl,xh,yh,w,h;
44         byte            *dest, *source;
45         int                             flags, value, contents;
46         char                    lumpname[128];
47         char                    animname[128];
48         byte                    buffer[256*256];
49         unsigned                bufferl[256*256];
50         char                    filename[1024];
51         unsigned        *destl, *sourcel;
52         int             linedelta, x, y;
53         int                             size;
54         miptex_t                *qtex;
55         miptex32_t              *qtex32;
56         float                   scale_x, scale_y;
57
58         GetScriptToken (false);
59         strcpy (lumpname, token);
60         
61         GetScriptToken (false);
62         xl = atoi (token);
63         GetScriptToken (false);
64         yl = atoi (token);
65         GetScriptToken (false);
66         w = atoi (token);
67         GetScriptToken (false);
68         h = atoi (token);
69
70         total_x += w;
71         total_y += h;
72         total_textures++;
73
74         if ( (w & 7) || (h & 7) )
75                 Error ("line %i: miptex sizes must be multiples of 8", scriptline);
76
77         flags = 0;
78         contents = 0;
79         value = 0;
80
81         animname[0] = 0;
82
83         scale_x = scale_y = 0.5;
84
85         if (TrueColorImage)
86         {
87                 sprintf (filename, "%spics/%s/%s.m32", g_outputDir, pic_prefix, lumpname);
88                 if (g_release)
89                         return; // textures are only released by $maps
90
91                 xh = xl+w;
92                 yh = yl+h;
93
94                 if (xl >= longimagewidth || xh > longimagewidth ||
95                         yl >= longimageheight || yh > longimageheight)
96                 {
97                         Error ("line %i: bad clip dimmensions (%d,%d) (%d,%d) > image (%d,%d)", scriptline, xl,yl,w,h,longimagewidth,longimageheight);
98                 }
99
100                 sourcel = longimage + (yl*longimagewidth) + xl;
101                 destl = bufferl;
102                 linedelta = (longimagewidth - w);
103
104                 for (y=yl ; y<yh ; y++)
105                 {
106                         for (x=xl ; x<xh ; x++)
107                         {
108                                 *destl++ = *sourcel++;  // RGBA
109                         }
110                         sourcel += linedelta;
111                 }
112
113                 qtex32 = CreateMip32(bufferl, w, h, &size, false);
114
115                 qtex32->flags |= LittleLong(flags);
116                 qtex32->contents = contents;
117                 qtex32->value = value;
118                 qtex32->scale_x = scale_x;
119                 qtex32->scale_y = scale_y;
120                 sprintf (qtex32->name, "%s/%s", pic_prefix, lumpname);
121                 if (animname[0])
122                         sprintf (qtex32->animname, "%s/%s", pic_prefix, animname);
123                 
124         //
125         // write it out
126         //
127                 printf ("writing %s\n", filename);
128                 SaveFile (filename, (byte *)qtex32, size);
129
130                 free (qtex32);
131         }
132         else
133         {
134                 sprintf (filename, "%spics/%s/%s.m8", g_outputDir, pic_prefix, lumpname);
135                 if (g_release)
136                         return; // textures are only released by $maps
137
138                 xh = xl+w;
139                 yh = yl+h;
140
141                 if (xl >= byteimagewidth || xh > byteimagewidth ||
142                         yl >= byteimageheight || yh > byteimageheight)
143                 {
144                         Error ("line %i: bad clip dimmensions (%d,%d) (%d,%d) > image (%d,%d)", scriptline, xl,yl,w,h,byteimagewidth,byteimageheight);
145                 }
146
147                 source = byteimage + yl*byteimagewidth + xl;
148                 dest = buffer;
149                 linedelta = byteimagewidth - w;
150
151                 for (y=yl ; y<yh ; y++)
152                 {
153                         for (x=xl ; x<xh ; x++)
154                         {
155                                 *dest++ = *source++;
156                         }
157                         source += linedelta;
158                 }
159
160                 qtex = CreateMip(buffer, w, h, lbmpalette, &size, false);
161
162                 qtex->flags = flags;
163                 qtex->contents = contents;
164                 qtex->value = value;
165                 sprintf (qtex->name, "%s/%s", pic_prefix, lumpname);
166                 if (animname[0])
167                         sprintf (qtex->animname, "%s/%s", pic_prefix, animname);
168                 
169         //
170         // write it out
171         //
172                 printf ("writing %s\n", filename);
173                 SaveFile (filename, (byte *)qtex, size);
174
175                 free (qtex);
176         }
177 }
178
179
180 /*
181 ===============
182 Cmd_picdir
183 ===============
184 */
185 void Cmd_Picdir (void)
186 {
187         char    filename[1024];
188
189         GetScriptToken (false);
190         strcpy (pic_prefix, token);
191         // create the directory if needed
192         sprintf (filename, "%sPics", g_outputDir);
193         Q_mkdir (filename); 
194         sprintf (filename, "%sPics/%s", g_outputDir, pic_prefix);
195         Q_mkdir (filename); 
196 }
197
198