/* 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 ; y < yh ; y++ ) { for ( x = xl ; x < xh ; x++ ) { *destl++ = *sourcel++; // RGBA } sourcel += linedelta; } qtex32 = CreateMip32( bufferl, w, h, &size, false ); qtex32->flags |= 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 ; y < yh ; y++ ) { for ( x = xl ; x < xh ; x++ ) { *dest++ = *source++; } source += linedelta; } qtex = CreateMip( buffer, w, h, lbmpalette, &size, false ); qtex->flags = 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 ); }