/* Copyright (C) 1999-2006 Id Software, Inc. and contributors. For a list of contributors, see the accompanying CONTRIBUTORS file. This file is part of GtkRadiant. GtkRadiant is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GtkRadiant is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "qdata.h" byte *byteimage, *lbmpalette; int byteimagewidth, byteimageheight; qboolean TrueColorImage; unsigned *longimage; int longimagewidth, longimageheight; char pic_prefix[1024]; extern char *g_outputDir; /* =============== Cmd_Pic =============== */ void Cmd_Pic (void) { int xl,yl,xh,yh,w,h; byte *dest, *source; int flags, value, contents; char lumpname[128]; char animname[128]; byte buffer[256*256]; unsigned bufferl[256*256]; char filename[1024]; unsigned *destl, *sourcel; int linedelta, x, y; int size; miptex_t *qtex; miptex32_t *qtex32; float scale_x, scale_y; GetScriptToken (false); strcpy (lumpname, token); GetScriptToken (false); xl = atoi (token); GetScriptToken (false); yl = atoi (token); GetScriptToken (false); w = atoi (token); GetScriptToken (false); h = atoi (token); total_x += w; total_y += h; total_textures++; if ( (w & 7) || (h & 7) ) Error ("line %i: miptex sizes must be multiples of 8", scriptline); flags = 0; contents = 0; value = 0; animname[0] = 0; scale_x = scale_y = 0.5; if (TrueColorImage) { sprintf (filename, "%spics/%s/%s.m32", g_outputDir, pic_prefix, lumpname); if (g_release) return; // textures are only released by $maps xh = xl+w; yh = yl+h; if (xl >= longimagewidth || xh > longimagewidth || yl >= longimageheight || yh > longimageheight) { Error ("line %i: bad clip dimmensions (%d,%d) (%d,%d) > image (%d,%d)", scriptline, xl,yl,w,h,longimagewidth,longimageheight); } sourcel = longimage + (yl*longimagewidth) + xl; destl = bufferl; linedelta = (longimagewidth - w); for (y=yl ; yflags |= LittleLong(flags); qtex32->contents = contents; qtex32->value = value; qtex32->scale_x = scale_x; qtex32->scale_y = scale_y; sprintf (qtex32->name, "%s/%s", pic_prefix, lumpname); if (animname[0]) sprintf (qtex32->animname, "%s/%s", pic_prefix, animname); // // write it out // printf ("writing %s\n", filename); SaveFile (filename, (byte *)qtex32, size); free (qtex32); } else { sprintf (filename, "%spics/%s/%s.m8", g_outputDir, pic_prefix, lumpname); if (g_release) return; // textures are only released by $maps xh = xl+w; yh = yl+h; if (xl >= byteimagewidth || xh > byteimagewidth || yl >= byteimageheight || yh > byteimageheight) { Error ("line %i: bad clip dimmensions (%d,%d) (%d,%d) > image (%d,%d)", scriptline, xl,yl,w,h,byteimagewidth,byteimageheight); } source = byteimage + yl*byteimagewidth + xl; dest = buffer; linedelta = byteimagewidth - w; for (y=yl ; yflags = flags; qtex->contents = contents; qtex->value = value; sprintf (qtex->name, "%s/%s", pic_prefix, lumpname); if (animname[0]) sprintf (qtex->animname, "%s/%s", pic_prefix, animname); // // write it out // printf ("writing %s\n", filename); SaveFile (filename, (byte *)qtex, size); free (qtex); } } /* =============== Cmd_picdir =============== */ void Cmd_Picdir (void) { char filename[1024]; GetScriptToken (false); strcpy (pic_prefix, token); // create the directory if needed sprintf (filename, "%sPics", g_outputDir); Q_mkdir (filename); sprintf (filename, "%sPics/%s", g_outputDir, pic_prefix); Q_mkdir (filename); }