mirror of
https://github.com/id-Software/GtkRadiant.git
synced 2026-03-20 08:59:32 +01:00
The GtkRadiant sources as originally released under the GPL license.
This commit is contained in:
162
tools/quake2/qdata/anorms.h
Normal file
162
tools/quake2/qdata/anorms.h
Normal file
@@ -0,0 +1,162 @@
|
||||
{ -0.525731f, 0.000000f, 0.850651f },
|
||||
{ -0.442863f, 0.238856f, 0.864188f },
|
||||
{ -0.295242f, 0.000000f, 0.955423f },
|
||||
{ -0.309017f, 0.500000f, 0.809017f },
|
||||
{ -0.162460f, 0.262866f, 0.951056f },
|
||||
{ 0.000000f, 0.000000f, 1.000000f },
|
||||
{ 0.000000f, 0.850651f, 0.525731f },
|
||||
{ -0.147621f, 0.716567f, 0.681718f },
|
||||
{ 0.147621f, 0.716567f, 0.681718f },
|
||||
{ 0.000000f, 0.525731f, 0.850651f },
|
||||
{ 0.309017f, 0.500000f, 0.809017f },
|
||||
{ 0.525731f, 0.000000f, 0.850651f },
|
||||
{ 0.295242f, 0.000000f, 0.955423f },
|
||||
{ 0.442863f, 0.238856f, 0.864188f },
|
||||
{ 0.162460f, 0.262866f, 0.951056f },
|
||||
{ -0.681718f, 0.147621f, 0.716567f },
|
||||
{ -0.809017f, 0.309017f, 0.500000f },
|
||||
{ -0.587785f, 0.425325f, 0.688191f },
|
||||
{ -0.850651f, 0.525731f, 0.000000f },
|
||||
{ -0.864188f, 0.442863f, 0.238856f },
|
||||
{ -0.716567f, 0.681718f, 0.147621f },
|
||||
{ -0.688191f, 0.587785f, 0.425325f },
|
||||
{ -0.500000f, 0.809017f, 0.309017f },
|
||||
{ -0.238856f, 0.864188f, 0.442863f },
|
||||
{ -0.425325f, 0.688191f, 0.587785f },
|
||||
{ -0.716567f, 0.681718f, -0.147621f },
|
||||
{ -0.500000f, 0.809017f, -0.309017f },
|
||||
{ -0.525731f, 0.850651f, 0.000000f },
|
||||
{ 0.000000f, 0.850651f, -0.525731f },
|
||||
{ -0.238856f, 0.864188f, -0.442863f },
|
||||
{ 0.000000f, 0.955423f, -0.295242f },
|
||||
{ -0.262866f, 0.951056f, -0.162460f },
|
||||
{ 0.000000f, 1.000000f, 0.000000f },
|
||||
{ 0.000000f, 0.955423f, 0.295242f },
|
||||
{ -0.262866f, 0.951056f, 0.162460f },
|
||||
{ 0.238856f, 0.864188f, 0.442863f },
|
||||
{ 0.262866f, 0.951056f, 0.162460f },
|
||||
{ 0.500000f, 0.809017f, 0.309017f },
|
||||
{ 0.238856f, 0.864188f, -0.442863f },
|
||||
{ 0.262866f, 0.951056f, -0.162460f },
|
||||
{ 0.500000f, 0.809017f, -0.309017f },
|
||||
{ 0.850651f, 0.525731f, 0.000000f },
|
||||
{ 0.716567f, 0.681718f, 0.147621f },
|
||||
{ 0.716567f, 0.681718f, -0.147621f },
|
||||
{ 0.525731f, 0.850651f, 0.000000f },
|
||||
{ 0.425325f, 0.688191f, 0.587785f },
|
||||
{ 0.864188f, 0.442863f, 0.238856f },
|
||||
{ 0.688191f, 0.587785f, 0.425325f },
|
||||
{ 0.809017f, 0.309017f, 0.500000f },
|
||||
{ 0.681718f, 0.147621f, 0.716567f },
|
||||
{ 0.587785f, 0.425325f, 0.688191f },
|
||||
{ 0.955423f, 0.295242f, 0.000000f },
|
||||
{ 1.000000f, 0.000000f, 0.000000f },
|
||||
{ 0.951056f, 0.162460f, 0.262866f },
|
||||
{ 0.850651f, -0.525731f, 0.000000f },
|
||||
{ 0.955423f, -0.295242f, 0.000000f },
|
||||
{ 0.864188f, -0.442863f, 0.238856f },
|
||||
{ 0.951056f, -0.162460f, 0.262866f },
|
||||
{ 0.809017f, -0.309017f, 0.500000f },
|
||||
{ 0.681718f, -0.147621f, 0.716567f },
|
||||
{ 0.850651f, 0.000000f, 0.525731f },
|
||||
{ 0.864188f, 0.442863f, -0.238856f },
|
||||
{ 0.809017f, 0.309017f, -0.500000f },
|
||||
{ 0.951056f, 0.162460f, -0.262866f },
|
||||
{ 0.525731f, 0.000000f, -0.850651f },
|
||||
{ 0.681718f, 0.147621f, -0.716567f },
|
||||
{ 0.681718f, -0.147621f, -0.716567f },
|
||||
{ 0.850651f, 0.000000f, -0.525731f },
|
||||
{ 0.809017f, -0.309017f, -0.500000f },
|
||||
{ 0.864188f, -0.442863f, -0.238856f },
|
||||
{ 0.951056f, -0.162460f, -0.262866f },
|
||||
{ 0.147621f, 0.716567f, -0.681718f },
|
||||
{ 0.309017f, 0.500000f, -0.809017f },
|
||||
{ 0.425325f, 0.688191f, -0.587785f },
|
||||
{ 0.442863f, 0.238856f, -0.864188f },
|
||||
{ 0.587785f, 0.425325f, -0.688191f },
|
||||
{ 0.688191f, 0.587785f, -0.425325f },
|
||||
{ -0.147621f, 0.716567f, -0.681718f },
|
||||
{ -0.309017f, 0.500000f, -0.809017f },
|
||||
{ 0.000000f, 0.525731f, -0.850651f },
|
||||
{ -0.525731f, 0.000000f, -0.850651f },
|
||||
{ -0.442863f, 0.238856f, -0.864188f },
|
||||
{ -0.295242f, 0.000000f, -0.955423f },
|
||||
{ -0.162460f, 0.262866f, -0.951056f },
|
||||
{ 0.000000f, 0.000000f, -1.000000f },
|
||||
{ 0.295242f, 0.000000f, -0.955423f },
|
||||
{ 0.162460f, 0.262866f, -0.951056f },
|
||||
{ -0.442863f, -0.238856f, -0.864188f },
|
||||
{ -0.309017f, -0.500000f, -0.809017f },
|
||||
{ -0.162460f, -0.262866f, -0.951056f },
|
||||
{ 0.000000f, -0.850651f, -0.525731f },
|
||||
{ -0.147621f, -0.716567f, -0.681718f },
|
||||
{ 0.147621f, -0.716567f, -0.681718f },
|
||||
{ 0.000000f, -0.525731f, -0.850651f },
|
||||
{ 0.309017f, -0.500000f, -0.809017f },
|
||||
{ 0.442863f, -0.238856f, -0.864188f },
|
||||
{ 0.162460f, -0.262866f, -0.951056f },
|
||||
{ 0.238856f, -0.864188f, -0.442863f },
|
||||
{ 0.500000f, -0.809017f, -0.309017f },
|
||||
{ 0.425325f, -0.688191f, -0.587785f },
|
||||
{ 0.716567f, -0.681718f, -0.147621f },
|
||||
{ 0.688191f, -0.587785f, -0.425325f },
|
||||
{ 0.587785f, -0.425325f, -0.688191f },
|
||||
{ 0.000000f, -0.955423f, -0.295242f },
|
||||
{ 0.000000f, -1.000000f, 0.000000f },
|
||||
{ 0.262866f, -0.951056f, -0.162460f },
|
||||
{ 0.000000f, -0.850651f, 0.525731f },
|
||||
{ 0.000000f, -0.955423f, 0.295242f },
|
||||
{ 0.238856f, -0.864188f, 0.442863f },
|
||||
{ 0.262866f, -0.951056f, 0.162460f },
|
||||
{ 0.500000f, -0.809017f, 0.309017f },
|
||||
{ 0.716567f, -0.681718f, 0.147621f },
|
||||
{ 0.525731f, -0.850651f, 0.000000f },
|
||||
{ -0.238856f, -0.864188f, -0.442863f },
|
||||
{ -0.500000f, -0.809017f, -0.309017f },
|
||||
{ -0.262866f, -0.951056f, -0.162460f },
|
||||
{ -0.850651f, -0.525731f, 0.000000f },
|
||||
{ -0.716567f, -0.681718f, -0.147621f },
|
||||
{ -0.716567f, -0.681718f, 0.147621f },
|
||||
{ -0.525731f, -0.850651f, 0.000000f },
|
||||
{ -0.500000f, -0.809017f, 0.309017f },
|
||||
{ -0.238856f, -0.864188f, 0.442863f },
|
||||
{ -0.262866f, -0.951056f, 0.162460f },
|
||||
{ -0.864188f, -0.442863f, 0.238856f },
|
||||
{ -0.809017f, -0.309017f, 0.500000f },
|
||||
{ -0.688191f, -0.587785f, 0.425325f },
|
||||
{ -0.681718f, -0.147621f, 0.716567f },
|
||||
{ -0.442863f, -0.238856f, 0.864188f },
|
||||
{ -0.587785f, -0.425325f, 0.688191f },
|
||||
{ -0.309017f, -0.500000f, 0.809017f },
|
||||
{ -0.147621f, -0.716567f, 0.681718f },
|
||||
{ -0.425325f, -0.688191f, 0.587785f },
|
||||
{ -0.162460f, -0.262866f, 0.951056f },
|
||||
{ 0.442863f, -0.238856f, 0.864188f },
|
||||
{ 0.162460f, -0.262866f, 0.951056f },
|
||||
{ 0.309017f, -0.500000f, 0.809017f },
|
||||
{ 0.147621f, -0.716567f, 0.681718f },
|
||||
{ 0.000000f, -0.525731f, 0.850651f },
|
||||
{ 0.425325f, -0.688191f, 0.587785f },
|
||||
{ 0.587785f, -0.425325f, 0.688191f },
|
||||
{ 0.688191f, -0.587785f, 0.425325f },
|
||||
{ -0.955423f, 0.295242f, 0.000000f },
|
||||
{ -0.951056f, 0.162460f, 0.262866f },
|
||||
{ -1.000000f, 0.000000f, 0.000000f },
|
||||
{ -0.850651f, 0.000000f, 0.525731f },
|
||||
{ -0.955423f, -0.295242f, 0.000000f },
|
||||
{ -0.951056f, -0.162460f, 0.262866f },
|
||||
{ -0.864188f, 0.442863f, -0.238856f },
|
||||
{ -0.951056f, 0.162460f, -0.262866f },
|
||||
{ -0.809017f, 0.309017f, -0.500000f },
|
||||
{ -0.864188f, -0.442863f, -0.238856f },
|
||||
{ -0.951056f, -0.162460f, -0.262866f },
|
||||
{ -0.809017f, -0.309017f, -0.500000f },
|
||||
{ -0.681718f, 0.147621f, -0.716567f },
|
||||
{ -0.681718f, -0.147621f, -0.716567f },
|
||||
{ -0.850651f, 0.000000f, -0.525731f },
|
||||
{ -0.688191f, 0.587785f, -0.425325f },
|
||||
{ -0.587785f, 0.425325f, -0.688191f },
|
||||
{ -0.425325f, 0.688191f, -0.587785f },
|
||||
{ -0.425325f, -0.688191f, -0.587785f },
|
||||
{ -0.587785f, -0.425325f, -0.688191f },
|
||||
{ -0.688191f, -0.587785f, -0.425325f },
|
||||
763
tools/quake2/qdata/images.c
Normal file
763
tools/quake2/qdata/images.c
Normal file
@@ -0,0 +1,763 @@
|
||||
/*
|
||||
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"
|
||||
#include "inout.h"
|
||||
|
||||
char mip_prefix[1024]; // directory to dump the textures in
|
||||
|
||||
qboolean colormap_issued;
|
||||
byte colormap_palette[768];
|
||||
|
||||
/*
|
||||
==============
|
||||
RemapZero
|
||||
|
||||
Replaces all 0 bytes in an image with the closest palette entry.
|
||||
This is because NT won't let us change index 0, so any palette
|
||||
animation leaves those pixels untouched.
|
||||
==============
|
||||
*/
|
||||
void RemapZero (byte *pixels, byte *palette, int width, int height)
|
||||
{
|
||||
int i, c;
|
||||
int alt_zero;
|
||||
int value, best;
|
||||
|
||||
alt_zero = 0;
|
||||
best = 9999999;
|
||||
for (i=1 ; i<255 ; i++)
|
||||
{
|
||||
value = palette[i*3+0]+palette[i*3+1]+palette[i*3+2];
|
||||
if (value < best)
|
||||
{
|
||||
best = value;
|
||||
alt_zero = i;
|
||||
}
|
||||
}
|
||||
|
||||
c = width*height;
|
||||
for (i=0 ; i<c ; i++)
|
||||
if (pixels[i] == 0)
|
||||
pixels[i] = alt_zero;
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
Cmd_Grab
|
||||
|
||||
$grab filename x y width height
|
||||
==============
|
||||
*/
|
||||
void Cmd_Grab (void)
|
||||
{
|
||||
int xl,yl,w,h,y;
|
||||
byte *cropped;
|
||||
char savename[1024];
|
||||
char dest[1024];
|
||||
|
||||
GetToken (false);
|
||||
|
||||
if (token[0] == '/' || token[0] == '\\')
|
||||
sprintf (savename, "%s%s.pcx", gamedir, token+1);
|
||||
else
|
||||
sprintf (savename, "%spics/%s.pcx", gamedir, token);
|
||||
|
||||
if (g_release)
|
||||
{
|
||||
if (token[0] == '/' || token[0] == '\\')
|
||||
sprintf (dest, "%s.pcx", token+1);
|
||||
else
|
||||
sprintf (dest, "pics/%s.pcx", token);
|
||||
|
||||
ReleaseFile (dest);
|
||||
return;
|
||||
}
|
||||
|
||||
GetToken (false);
|
||||
xl = atoi (token);
|
||||
GetToken (false);
|
||||
yl = atoi (token);
|
||||
GetToken (false);
|
||||
w = atoi (token);
|
||||
GetToken (false);
|
||||
h = atoi (token);
|
||||
|
||||
if (xl<0 || yl<0 || w<0 || h<0 || xl+w>byteimagewidth || yl+h>byteimageheight)
|
||||
Error ("GrabPic: Bad size: %i, %i, %i, %i",xl,yl,w,h);
|
||||
|
||||
// crop it to the proper size
|
||||
cropped = malloc (w*h);
|
||||
for (y=0 ; y<h ; y++)
|
||||
{
|
||||
memcpy (cropped+y*w, byteimage+(y+yl)*byteimagewidth+xl, w);
|
||||
}
|
||||
|
||||
// save off the new image
|
||||
printf ("saving %s\n", savename);
|
||||
CreatePath (savename);
|
||||
WritePCXfile (savename, cropped, w, h, lbmpalette);
|
||||
|
||||
free (cropped);
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
Cmd_Raw
|
||||
|
||||
$grab filename x y width height
|
||||
==============
|
||||
*/
|
||||
void Cmd_Raw (void)
|
||||
{
|
||||
int xl,yl,w,h,y;
|
||||
byte *cropped;
|
||||
char savename[1024];
|
||||
char dest[1024];
|
||||
|
||||
GetToken (false);
|
||||
|
||||
sprintf (savename, "%s%s.lmp", gamedir, token);
|
||||
|
||||
if (g_release)
|
||||
{
|
||||
sprintf (dest, "%s.lmp", token);
|
||||
ReleaseFile (dest);
|
||||
return;
|
||||
}
|
||||
|
||||
GetToken (false);
|
||||
xl = atoi (token);
|
||||
GetToken (false);
|
||||
yl = atoi (token);
|
||||
GetToken (false);
|
||||
w = atoi (token);
|
||||
GetToken (false);
|
||||
h = atoi (token);
|
||||
|
||||
if (xl<0 || yl<0 || w<0 || h<0 || xl+w>byteimagewidth || yl+h>byteimageheight)
|
||||
Error ("GrabPic: Bad size: %i, %i, %i, %i",xl,yl,w,h);
|
||||
|
||||
// crop it to the proper size
|
||||
cropped = malloc (w*h);
|
||||
for (y=0 ; y<h ; y++)
|
||||
{
|
||||
memcpy (cropped+y*w, byteimage+(y+yl)*byteimagewidth+xl, w);
|
||||
}
|
||||
|
||||
// save off the new image
|
||||
printf ("saving %s\n", savename);
|
||||
CreatePath (savename);
|
||||
|
||||
SaveFile (savename, cropped, w*h);
|
||||
|
||||
free (cropped);
|
||||
}
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
COLORMAP GRABBING
|
||||
|
||||
=============================================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
===============
|
||||
BestColor
|
||||
===============
|
||||
*/
|
||||
byte BestColor (int r, int g, int b, int start, int stop)
|
||||
{
|
||||
int i;
|
||||
int dr, dg, db;
|
||||
int bestdistortion, distortion;
|
||||
int bestcolor;
|
||||
byte *pal;
|
||||
|
||||
//
|
||||
// let any color go to 0 as a last resort
|
||||
//
|
||||
bestdistortion = 256*256*4;
|
||||
bestcolor = 0;
|
||||
|
||||
pal = colormap_palette + start*3;
|
||||
for (i=start ; i<= stop ; i++)
|
||||
{
|
||||
dr = r - (int)pal[0];
|
||||
dg = g - (int)pal[1];
|
||||
db = b - (int)pal[2];
|
||||
pal += 3;
|
||||
distortion = dr*dr + dg*dg + db*db;
|
||||
if (distortion < bestdistortion)
|
||||
{
|
||||
if (!distortion)
|
||||
return i; // perfect match
|
||||
|
||||
bestdistortion = distortion;
|
||||
bestcolor = i;
|
||||
}
|
||||
}
|
||||
|
||||
return bestcolor;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
Cmd_Colormap
|
||||
|
||||
$colormap filename
|
||||
|
||||
the brightes colormap is first in the table (FIXME: reverse this now?)
|
||||
|
||||
64 rows of 256 : lightmaps
|
||||
256 rows of 256 : translucency table
|
||||
==============
|
||||
*/
|
||||
void Cmd_Colormap (void)
|
||||
{
|
||||
int levels, brights;
|
||||
int l, c;
|
||||
float frac, red, green, blue;
|
||||
float range;
|
||||
byte *cropped, *lump_p;
|
||||
char savename[1024];
|
||||
char dest[1024];
|
||||
|
||||
colormap_issued = true;
|
||||
if (!g_release)
|
||||
memcpy (colormap_palette, lbmpalette, 768);
|
||||
|
||||
if (!TokenAvailable ())
|
||||
{ // just setting colormap_issued
|
||||
return;
|
||||
}
|
||||
|
||||
GetToken (false);
|
||||
sprintf (savename, "%spics/%s.pcx", gamedir, token);
|
||||
|
||||
if (g_release)
|
||||
{
|
||||
sprintf (dest, "pics/%s.pcx", token);
|
||||
ReleaseFile (dest);
|
||||
return;
|
||||
}
|
||||
|
||||
range = 2;
|
||||
levels = 64;
|
||||
brights = 1; // ignore 255 (transparent)
|
||||
|
||||
cropped = malloc((levels+256)*256);
|
||||
lump_p = cropped;
|
||||
|
||||
// shaded levels
|
||||
for (l=0;l<levels;l++)
|
||||
{
|
||||
frac = range - range*(float)l/(levels-1);
|
||||
for (c=0 ; c<256-brights ; c++)
|
||||
{
|
||||
red = lbmpalette[c*3];
|
||||
green = lbmpalette[c*3+1];
|
||||
blue = lbmpalette[c*3+2];
|
||||
|
||||
red = (int)(red*frac+0.5);
|
||||
green = (int)(green*frac+0.5);
|
||||
blue = (int)(blue*frac+0.5);
|
||||
|
||||
//
|
||||
// note: 254 instead of 255 because 255 is the transparent color, and we
|
||||
// don't want anything remapping to that
|
||||
// don't use color 0, because NT can't remap that (or 255)
|
||||
//
|
||||
*lump_p++ = BestColor(red,green,blue, 1, 254);
|
||||
}
|
||||
|
||||
// fullbrights allways stay the same
|
||||
for ( ; c<256 ; c++)
|
||||
*lump_p++ = c;
|
||||
}
|
||||
|
||||
// 66% transparancy table
|
||||
for (l=0;l<255;l++)
|
||||
{
|
||||
for (c=0 ; c<255 ; c++)
|
||||
{
|
||||
red = lbmpalette[c*3]*0.33 + lbmpalette[l*3]*0.66;
|
||||
green = lbmpalette[c*3+1]*0.33 + lbmpalette[l*3+1]*0.66;
|
||||
blue = lbmpalette[c*3+2]*0.33 + lbmpalette[l*3+2]*0.66;
|
||||
|
||||
*lump_p++ = BestColor(red,green,blue, 1, 254);
|
||||
}
|
||||
*lump_p++ = 255;
|
||||
}
|
||||
for (c=0 ; c<256 ; c++)
|
||||
*lump_p++ = 255;
|
||||
|
||||
// save off the new image
|
||||
printf ("saving %s\n", savename);
|
||||
CreatePath (savename);
|
||||
WritePCXfile (savename, cropped, 256, levels+256, lbmpalette);
|
||||
|
||||
free (cropped);
|
||||
}
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
MIPTEX GRABBING
|
||||
|
||||
=============================================================================
|
||||
*/
|
||||
|
||||
byte pixdata[256];
|
||||
|
||||
int d_red, d_green, d_blue;
|
||||
|
||||
byte palmap[32][32][32];
|
||||
qboolean palmap_built;
|
||||
|
||||
/*
|
||||
=============
|
||||
FindColor
|
||||
=============
|
||||
*/
|
||||
int FindColor (int r, int g, int b)
|
||||
{
|
||||
int bestcolor;
|
||||
|
||||
if (r > 255)
|
||||
r = 255;
|
||||
if (r < 0)
|
||||
r = 0;
|
||||
if (g > 255)
|
||||
g = 255;
|
||||
if (g < 0)
|
||||
g = 0;
|
||||
if (b > 255)
|
||||
b = 255;
|
||||
if (b < 0)
|
||||
b = 0;
|
||||
#ifndef TABLECOLORS
|
||||
bestcolor = BestColor (r, g, b, 0, 254);
|
||||
#else
|
||||
bestcolor = palmap[r>>3][g>>3][b>>3];
|
||||
#endif
|
||||
|
||||
return bestcolor;
|
||||
}
|
||||
|
||||
|
||||
void BuildPalmap (void)
|
||||
{
|
||||
#ifdef TABLECOLORS
|
||||
int r, g, b;
|
||||
int bestcolor;
|
||||
|
||||
if (palmap_built)
|
||||
return;
|
||||
palmap_built = true;
|
||||
|
||||
for (r=4 ; r<256 ; r+=8)
|
||||
{
|
||||
for (g=4 ; g<256 ; g+=8)
|
||||
{
|
||||
for (b=4 ; b<256 ; b+=8)
|
||||
{
|
||||
bestcolor = BestColor (r, g, b, 1, 254);
|
||||
palmap[r>>3][g>>3][b>>3] = bestcolor;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!colormap_issued)
|
||||
Error ("You must issue a $colormap command first");
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
AveragePixels
|
||||
=============
|
||||
*/
|
||||
byte AveragePixels (int count)
|
||||
{
|
||||
int r,g,b;
|
||||
int i;
|
||||
int vis;
|
||||
int pix;
|
||||
int bestcolor;
|
||||
byte *pal;
|
||||
int fullbright;
|
||||
|
||||
vis = 0;
|
||||
r = g = b = 0;
|
||||
fullbright = 0;
|
||||
for (i=0 ; i<count ; i++)
|
||||
{
|
||||
pix = pixdata[i];
|
||||
|
||||
r += lbmpalette[pix*3];
|
||||
g += lbmpalette[pix*3+1];
|
||||
b += lbmpalette[pix*3+2];
|
||||
vis++;
|
||||
}
|
||||
|
||||
r /= vis;
|
||||
g /= vis;
|
||||
b /= vis;
|
||||
|
||||
// error diffusion
|
||||
r += d_red;
|
||||
g += d_green;
|
||||
b += d_blue;
|
||||
|
||||
//
|
||||
// find the best color
|
||||
//
|
||||
bestcolor = FindColor (r, g, b);
|
||||
|
||||
// error diffusion
|
||||
pal = colormap_palette + bestcolor*3;
|
||||
d_red = r - (int)pal[0];
|
||||
d_green = g - (int)pal[1];
|
||||
d_blue = b - (int)pal[2];
|
||||
|
||||
return bestcolor;
|
||||
}
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
pt_contents,
|
||||
pt_flags,
|
||||
pt_animvalue,
|
||||
pt_flagvalue
|
||||
} parmtype_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *name;
|
||||
int flags;
|
||||
parmtype_t type;
|
||||
} mipparm_t;
|
||||
|
||||
mipparm_t mipparms[] =
|
||||
{
|
||||
// utility content attributes
|
||||
{"water", CONTENTS_WATER, pt_contents},
|
||||
{"slime", CONTENTS_SLIME, pt_contents}, // mildly damaging
|
||||
{"lava", CONTENTS_LAVA, pt_contents}, // very damaging
|
||||
{"window", CONTENTS_WINDOW, pt_contents}, // solid, but doesn't eat internal textures
|
||||
{"mist", CONTENTS_MIST, pt_contents}, // non-solid window
|
||||
{"origin", CONTENTS_ORIGIN, pt_contents}, // center of rotating brushes
|
||||
{"playerclip", CONTENTS_PLAYERCLIP, pt_contents},
|
||||
{"monsterclip", CONTENTS_MONSTERCLIP, pt_contents},
|
||||
|
||||
// utility surface attributes
|
||||
{"hint", SURF_HINT, pt_flags},
|
||||
{"skip", SURF_SKIP, pt_flags},
|
||||
{"light", SURF_LIGHT, pt_flagvalue}, // value is the light quantity
|
||||
|
||||
// texture chaining
|
||||
{"anim", 0, pt_animvalue}, // value is the next animation
|
||||
|
||||
// server attributes
|
||||
{"slick", SURF_SLICK, pt_flags},
|
||||
|
||||
// drawing attributes
|
||||
{"sky", SURF_SKY, pt_flags},
|
||||
{"warping", SURF_WARP, pt_flags}, // only valid with 64x64 textures
|
||||
{"trans33", SURF_TRANS33, pt_flags}, // translucent should allso set fullbright
|
||||
{"trans66", SURF_TRANS66, pt_flags},
|
||||
{"flowing", SURF_FLOWING, pt_flags}, // flow direction towards angle 0
|
||||
{"nodraw", SURF_NODRAW, pt_flags}, // for clip textures and trigger textures
|
||||
|
||||
{NULL, 0, pt_contents}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
Cmd_Mip
|
||||
|
||||
$mip filename x y width height <OPTIONS>
|
||||
must be multiples of sixteen
|
||||
SURF_WINDOW
|
||||
==============
|
||||
*/
|
||||
void Cmd_Mip (void)
|
||||
{
|
||||
int x,y,xl,yl,xh,yh,w,h;
|
||||
byte *screen_p, *source;
|
||||
int linedelta;
|
||||
miptex_t *qtex;
|
||||
int miplevel, mipstep;
|
||||
int xx, yy, pix;
|
||||
int count;
|
||||
int flags, value, contents;
|
||||
mipparm_t *mp;
|
||||
char lumpname[64];
|
||||
byte *lump_p;
|
||||
char filename[1024];
|
||||
char animname[64];
|
||||
|
||||
GetToken (false);
|
||||
strcpy (lumpname, token);
|
||||
|
||||
GetToken (false);
|
||||
xl = atoi (token);
|
||||
GetToken (false);
|
||||
yl = atoi (token);
|
||||
GetToken (false);
|
||||
w = atoi (token);
|
||||
GetToken (false);
|
||||
h = atoi (token);
|
||||
|
||||
if ( (w & 15) || (h & 15) )
|
||||
Error ("line %i: miptex sizes must be multiples of 16", scriptline);
|
||||
|
||||
flags = 0;
|
||||
contents = 0;
|
||||
value = 0;
|
||||
|
||||
animname[0] = 0;
|
||||
|
||||
// get optional flags and values
|
||||
while (TokenAvailable ())
|
||||
{
|
||||
GetToken (false);
|
||||
|
||||
for (mp=mipparms ; mp->name ; mp++)
|
||||
{
|
||||
if (!strcmp(mp->name, token))
|
||||
{
|
||||
switch (mp->type)
|
||||
{
|
||||
case pt_animvalue:
|
||||
GetToken (false); // specify the next animation frame
|
||||
strcpy (animname, token);
|
||||
break;
|
||||
case pt_flags:
|
||||
flags |= mp->flags;
|
||||
break;
|
||||
case pt_contents:
|
||||
contents |= mp->flags;
|
||||
break;
|
||||
case pt_flagvalue:
|
||||
flags |= mp->flags;
|
||||
GetToken (false); // specify the light value
|
||||
value = atoi(token);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!mp->name)
|
||||
Error ("line %i: unknown parm %s", scriptline, token);
|
||||
}
|
||||
|
||||
sprintf (filename, "%stextures/%s/%s.wal", gamedir, mip_prefix, lumpname);
|
||||
if (g_release)
|
||||
return; // textures are only released by $maps
|
||||
|
||||
xh = xl+w;
|
||||
yh = yl+h;
|
||||
|
||||
qtex = malloc (sizeof(miptex_t) + w*h*2);
|
||||
memset (qtex, 0, sizeof(miptex_t));
|
||||
|
||||
qtex->width = LittleLong(w);
|
||||
qtex->height = LittleLong(h);
|
||||
qtex->flags = LittleLong(flags);
|
||||
qtex->contents = LittleLong(contents);
|
||||
qtex->value = LittleLong(value);
|
||||
sprintf (qtex->name, "%s/%s", mip_prefix, lumpname);
|
||||
if (animname[0])
|
||||
sprintf (qtex->animname, "%s/%s", mip_prefix, animname);
|
||||
|
||||
lump_p = (byte *)(&qtex->value+1);
|
||||
|
||||
screen_p = byteimage + yl*byteimagewidth + xl;
|
||||
linedelta = byteimagewidth - w;
|
||||
|
||||
source = lump_p;
|
||||
qtex->offsets[0] = LittleLong(lump_p - (byte *)qtex);
|
||||
|
||||
for (y=yl ; y<yh ; y++)
|
||||
{
|
||||
for (x=xl ; x<xh ; x++)
|
||||
{
|
||||
pix = *screen_p++;
|
||||
if (pix == 255)
|
||||
pix = 1; // should never happen
|
||||
*lump_p++ = pix;
|
||||
}
|
||||
screen_p += linedelta;
|
||||
}
|
||||
|
||||
//
|
||||
// subsample for greater mip levels
|
||||
//
|
||||
d_red = d_green = d_blue = 0; // no distortion yet
|
||||
|
||||
for (miplevel = 1 ; miplevel<4 ; miplevel++)
|
||||
{
|
||||
qtex->offsets[miplevel] = LittleLong(lump_p - (byte *)qtex);
|
||||
|
||||
mipstep = 1<<miplevel;
|
||||
for (y=0 ; y<h ; y+=mipstep)
|
||||
{
|
||||
|
||||
for (x = 0 ; x<w ; x+= mipstep)
|
||||
{
|
||||
count = 0;
|
||||
for (yy=0 ; yy<mipstep ; yy++)
|
||||
for (xx=0 ; xx<mipstep ; xx++)
|
||||
{
|
||||
pixdata[count] = source[ (y+yy)*w + x + xx ];
|
||||
count++;
|
||||
}
|
||||
*lump_p++ = AveragePixels (count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// dword align the size
|
||||
//
|
||||
while ((int)lump_p&3)
|
||||
*lump_p++ = 0;
|
||||
|
||||
//
|
||||
// write it out
|
||||
//
|
||||
printf ("writing %s\n", filename);
|
||||
SaveFile (filename, (byte *)qtex, lump_p - (byte *)qtex);
|
||||
|
||||
free (qtex);
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Mippal
|
||||
===============
|
||||
*/
|
||||
void Cmd_Mippal (void)
|
||||
{
|
||||
colormap_issued = true;
|
||||
if (g_release)
|
||||
return;
|
||||
|
||||
memcpy (colormap_palette, lbmpalette, 768);
|
||||
|
||||
BuildPalmap();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Mipdir
|
||||
===============
|
||||
*/
|
||||
void Cmd_Mipdir (void)
|
||||
{
|
||||
char filename[1024];
|
||||
|
||||
GetToken (false);
|
||||
strcpy (mip_prefix, token);
|
||||
// create the directory if needed
|
||||
sprintf (filename, "%stextures", gamedir, mip_prefix);
|
||||
Q_mkdir (filename);
|
||||
sprintf (filename, "%stextures/%s", gamedir, mip_prefix);
|
||||
Q_mkdir (filename);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
ENVIRONMENT MAP GRABBING
|
||||
|
||||
Creates six pcx files from tga files without any palette edge seams
|
||||
also copies the tga files for GL rendering.
|
||||
=============================================================================
|
||||
*/
|
||||
|
||||
// 3dstudio environment map suffixes
|
||||
char *suf[6] = {"rt", "ft", "lf", "bk", "up", "dn"};
|
||||
|
||||
/*
|
||||
=================
|
||||
Cmd_Environment
|
||||
=================
|
||||
*/
|
||||
void Cmd_Environment (void)
|
||||
{
|
||||
char name[1024];
|
||||
int i, x, y;
|
||||
byte image[256*256];
|
||||
byte *tga;
|
||||
|
||||
GetToken (false);
|
||||
|
||||
if (g_release)
|
||||
{
|
||||
for (i=0 ; i<6 ; i++)
|
||||
{
|
||||
sprintf (name, "env/%s%s.pcx", token, suf[i]);
|
||||
ReleaseFile (name);
|
||||
sprintf (name, "env/%s%s.tga", token, suf[i]);
|
||||
ReleaseFile (name);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// get the palette
|
||||
BuildPalmap ();
|
||||
|
||||
sprintf (name, "%senv/", gamedir);
|
||||
CreatePath (name);
|
||||
|
||||
// convert the images
|
||||
for (i=0 ; i<6 ; i++)
|
||||
{
|
||||
sprintf (name, "%senv/%s%s.tga", gamedir, token, suf[i]);
|
||||
printf ("loading %s...\n", name);
|
||||
LoadTGA (name, &tga, NULL, NULL);
|
||||
|
||||
for (y=0 ; y<256 ; y++)
|
||||
{
|
||||
for (x=0 ; x<256 ; x++)
|
||||
{
|
||||
image[y*256+x] = FindColor (tga[(y*256+x)*4+0],tga[(y*256+x)*4+1],tga[(y*256+x)*4+2]);
|
||||
}
|
||||
}
|
||||
free (tga);
|
||||
sprintf (name, "%senv/%s%s.pcx", gamedir, token, suf[i]);
|
||||
if (FileTime (name) != -1)
|
||||
printf ("%s already exists, not overwriting.\n", name);
|
||||
else
|
||||
WritePCXfile (name, image, 256, 256, colormap_palette);
|
||||
}
|
||||
}
|
||||
|
||||
81
tools/quake2/qdata/makefile
Normal file
81
tools/quake2/qdata/makefile
Normal file
@@ -0,0 +1,81 @@
|
||||
|
||||
CFLAGS = -c
|
||||
LDFLAGS =
|
||||
ODIR = baddir
|
||||
|
||||
EXEBASE = qdata
|
||||
EXE = $(ODIR)/qdata
|
||||
all: $(EXE)
|
||||
|
||||
_next:
|
||||
make "CFLAGS = -c -g -I../common" "ODIR = next"
|
||||
|
||||
_irix:
|
||||
make "CFLAGS = -c -Ofast=ip32_10k -I../common -Xcpluscomm" "LDFLAGS = -Ofast=ip32_10k" "ODIR = irix"
|
||||
|
||||
_irixdebug:
|
||||
make "CFLAGS = -c -O2 -g -I../common -Xcpluscomm" "LDFLAGS = -g" "ODIR = irix"
|
||||
|
||||
_irixinst:
|
||||
make "CFLAGS = -c -Ofast=ip32_10k -I../common -Xcpluscomm" "LDFLAGS = -Ofast=ip32_10k" "ODIR = irix"
|
||||
cp irix/$(EXEBASE) /limbo/quake/bin_irix
|
||||
|
||||
_irixclean:
|
||||
rm -f irix/*.o irix/$(EXEBASE)
|
||||
|
||||
_osf:
|
||||
make "CFLAGS = -c -O4 -I../common -threads" "LDFLAGS = -threads" "ODIR = osf"
|
||||
|
||||
clean:
|
||||
rm -f next/*.o next/$(EXEBASE)
|
||||
rm -f osf/*.o osf/$(EXEBASE)
|
||||
rm -f irix/*.o irix/$(EXEBASE)
|
||||
|
||||
install:
|
||||
cp next/$(EXEBASE) /limbo/quake2/bin_next
|
||||
cp osf/$(EXEBASE) /limbo/quake2/bin_osf
|
||||
cp irix/$(EXEBASE) /limbo/quake2/bin_irix
|
||||
|
||||
|
||||
FILES = $(ODIR)/qdata.o $(ODIR)/models.o $(ODIR)/sprites.o $(ODIR)/images.o $(ODIR)/cmdlib.o $(ODIR)/scriplib.o $(ODIR)/lbmlib.o $(ODIR)/mathlib.o $(ODIR)/l3dslib.o $(ODIR)/trilib.o $(ODIR)/threads.o $(ODIR)/tables.o
|
||||
|
||||
$(EXE) : $(FILES)
|
||||
cc -o $(EXE) $(LDFLAGS) $(FILES) -lm
|
||||
|
||||
$(ODIR)/qdata.o : qdata.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/models.o : models.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/sprites.o : sprites.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/images.o : images.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/tables.o : tables.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
|
||||
$(ODIR)/cmdlib.o : ../common/cmdlib.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/scriplib.o : ../common/scriplib.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/lbmlib.o : ../common/lbmlib.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/mathlib.o : ../common/mathlib.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/trilib.o : ../common/trilib.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/l3dslib.o : ../common/l3dslib.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
$(ODIR)/threads.o : ../common/threads.c
|
||||
cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i
|
||||
cc $(CFLAGS) -o $@ /tmp/temp.i
|
||||
1152
tools/quake2/qdata/models.c
Normal file
1152
tools/quake2/qdata/models.c
Normal file
File diff suppressed because it is too large
Load Diff
553
tools/quake2/qdata/qdata.c
Normal file
553
tools/quake2/qdata/qdata.c
Normal file
@@ -0,0 +1,553 @@
|
||||
/*
|
||||
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"
|
||||
#include "inout.h"
|
||||
|
||||
qboolean g_compress_pak;
|
||||
qboolean g_release; // don't grab, copy output data to new tree
|
||||
qboolean g_pak; // if true, copy to pak instead of release
|
||||
char g_releasedir[1024]; // c:\quake2\baseq2, etc
|
||||
qboolean g_archive; // don't grab, copy source data to new tree
|
||||
qboolean do3ds;
|
||||
char g_only[256]; // if set, only grab this cd
|
||||
qboolean g_skipmodel; // set true when a cd is not g_only
|
||||
|
||||
char *ext_3ds = "3ds";
|
||||
char *ext_tri= "tri";
|
||||
char *trifileext;
|
||||
|
||||
char game[64] = "quake2";
|
||||
|
||||
void InitPaths( int *argc, char **argv );
|
||||
|
||||
/*
|
||||
=======================================================
|
||||
|
||||
PAK FILES
|
||||
|
||||
=======================================================
|
||||
*/
|
||||
|
||||
unsigned Com_BlockChecksum (void *buffer, int length);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[56];
|
||||
int filepos, filelen;
|
||||
} packfile_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char id[4];
|
||||
int dirofs;
|
||||
int dirlen;
|
||||
} packheader_t;
|
||||
|
||||
packfile_t pfiles[16384];
|
||||
FILE *pakfile;
|
||||
packfile_t *pf;
|
||||
packheader_t pakheader;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
BeginPak
|
||||
==============
|
||||
*/
|
||||
void BeginPak (char *outname)
|
||||
{
|
||||
if (!g_pak)
|
||||
return;
|
||||
|
||||
pakfile = SafeOpenWrite (outname);
|
||||
|
||||
// leave space for header
|
||||
SafeWrite (pakfile, &pakheader, sizeof(pakheader));
|
||||
|
||||
pf = pfiles;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
ReleaseFile
|
||||
|
||||
Filename should be gamedir reletive.
|
||||
Either copies the file to the release dir, or adds it to
|
||||
the pak file.
|
||||
==============
|
||||
*/
|
||||
void ReleaseFile (char *filename)
|
||||
{
|
||||
int len;
|
||||
byte *buf;
|
||||
char source[1024];
|
||||
char dest[1024];
|
||||
|
||||
if (!g_release)
|
||||
return;
|
||||
|
||||
sprintf (source, "%s%s", gamedir, filename);
|
||||
|
||||
if (!g_pak)
|
||||
{ // copy it
|
||||
sprintf (dest, "%s/%s", g_releasedir, filename);
|
||||
printf ("copying to %s\n", dest);
|
||||
QCopyFile (source, dest);
|
||||
return;
|
||||
}
|
||||
|
||||
// pak it
|
||||
printf ("paking %s\n", filename);
|
||||
if (strlen(filename) >= sizeof(pf->name))
|
||||
Error ("Filename too long for pak: %s", filename);
|
||||
|
||||
len = LoadFile (source, (void **)&buf);
|
||||
|
||||
if (g_compress_pak && len < 4096*1024 )
|
||||
{
|
||||
cblock_t in, out;
|
||||
cblock_t Huffman (cblock_t in);
|
||||
|
||||
in.count = len;
|
||||
in.data = buf;
|
||||
|
||||
out = Huffman (in);
|
||||
|
||||
if (out.count < in.count)
|
||||
{
|
||||
printf (" compressed from %i to %i\n", in.count, out.count);
|
||||
free (in.data);
|
||||
buf = out.data;
|
||||
len = out.count;
|
||||
}
|
||||
else
|
||||
free (out.data);
|
||||
}
|
||||
|
||||
strcpy (pf->name, filename);
|
||||
pf->filepos = LittleLong(ftell(pakfile));
|
||||
pf->filelen = LittleLong(len);
|
||||
pf++;
|
||||
|
||||
SafeWrite (pakfile, buf, len);
|
||||
|
||||
free (buf);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
FinishPak
|
||||
==============
|
||||
*/
|
||||
void FinishPak (void)
|
||||
{
|
||||
int dirlen;
|
||||
int d;
|
||||
int i;
|
||||
unsigned checksum;
|
||||
|
||||
if (!g_pak)
|
||||
return;
|
||||
|
||||
pakheader.id[0] = 'P';
|
||||
pakheader.id[1] = 'A';
|
||||
pakheader.id[2] = 'C';
|
||||
pakheader.id[3] = 'K';
|
||||
dirlen = (byte *)pf - (byte *)pfiles;
|
||||
pakheader.dirofs = LittleLong(ftell(pakfile));
|
||||
pakheader.dirlen = LittleLong(dirlen);
|
||||
|
||||
checksum = Com_BlockChecksum ( (void *)pfiles, dirlen );
|
||||
|
||||
SafeWrite (pakfile, pfiles, dirlen);
|
||||
|
||||
i = ftell (pakfile);
|
||||
|
||||
fseek (pakfile, 0, SEEK_SET);
|
||||
SafeWrite (pakfile, &pakheader, sizeof(pakheader));
|
||||
fclose (pakfile);
|
||||
|
||||
d = pf - pfiles;
|
||||
printf ("%i files packed in %i bytes\n",d, i);
|
||||
printf ("checksum: 0x%x\n", checksum);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_File
|
||||
|
||||
This is only used to cause a file to be copied during a release
|
||||
build (default.cfg, maps, etc)
|
||||
===============
|
||||
*/
|
||||
void Cmd_File (void)
|
||||
{
|
||||
GetToken (false);
|
||||
ReleaseFile (token);
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
PackDirectory_r
|
||||
|
||||
===============
|
||||
*/
|
||||
#ifdef _WIN32
|
||||
#include "io.h"
|
||||
void PackDirectory_r (char *dir)
|
||||
{
|
||||
struct _finddata_t fileinfo;
|
||||
int handle;
|
||||
char dirstring[1024];
|
||||
char filename[1024];
|
||||
|
||||
sprintf (dirstring, "%s%s/*.*", gamedir, dir);
|
||||
|
||||
handle = _findfirst (dirstring, &fileinfo);
|
||||
if (handle == -1)
|
||||
return;
|
||||
|
||||
do
|
||||
{
|
||||
sprintf (filename, "%s/%s", dir, fileinfo.name);
|
||||
if (fileinfo.attrib & _A_SUBDIR)
|
||||
{ // directory
|
||||
if (fileinfo.name[0] != '.') // don't pak . and ..
|
||||
PackDirectory_r (filename);
|
||||
continue;
|
||||
}
|
||||
// copy or pack the file
|
||||
ReleaseFile (filename);
|
||||
} while (_findnext( handle, &fileinfo ) != -1);
|
||||
|
||||
_findclose (handle);
|
||||
}
|
||||
#else
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/dir.h>
|
||||
|
||||
void PackDirectory_r (char *dir)
|
||||
{
|
||||
#ifdef NeXT
|
||||
struct direct **namelist, *ent;
|
||||
#else
|
||||
struct dirent **namelist, *ent;
|
||||
#endif
|
||||
int count;
|
||||
struct stat st;
|
||||
int i;
|
||||
int len;
|
||||
char fullname[1024];
|
||||
char dirstring[1024];
|
||||
char *name;
|
||||
|
||||
sprintf (dirstring, "%s%s", gamedir, dir);
|
||||
count = scandir(dirstring, &namelist, NULL, NULL);
|
||||
|
||||
for (i=0 ; i<count ; i++)
|
||||
{
|
||||
ent = namelist[i];
|
||||
name = ent->d_name;
|
||||
|
||||
if (name[0] == '.')
|
||||
continue;
|
||||
|
||||
sprintf (fullname, "%s/%s", dir, name);
|
||||
sprintf (dirstring, "%s%s/%s", gamedir, dir, name);
|
||||
|
||||
if (stat (dirstring, &st) == -1)
|
||||
Error ("fstating %s", pf->name);
|
||||
if (st.st_mode & S_IFDIR)
|
||||
{ // directory
|
||||
PackDirectory_r (fullname);
|
||||
continue;
|
||||
}
|
||||
|
||||
// copy or pack the file
|
||||
ReleaseFile (fullname);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Dir
|
||||
|
||||
This is only used to cause a directory to be copied during a
|
||||
release build (sounds, etc)
|
||||
===============
|
||||
*/
|
||||
void Cmd_Dir (void)
|
||||
{
|
||||
GetToken (false);
|
||||
PackDirectory_r (token);
|
||||
}
|
||||
|
||||
//========================================================================
|
||||
|
||||
#define MAX_RTEX 16384
|
||||
int numrtex;
|
||||
char rtex[MAX_RTEX][64];
|
||||
|
||||
void ReleaseTexture (char *name)
|
||||
{
|
||||
int i;
|
||||
char path[1024];
|
||||
|
||||
for (i=0 ; i<numrtex ; i++)
|
||||
if (!Q_strncasecmp(name, rtex[i], strlen(name)))
|
||||
return;
|
||||
|
||||
if (numrtex == MAX_RTEX)
|
||||
Error ("numrtex == MAX_RTEX");
|
||||
|
||||
strcpy (rtex[i], name);
|
||||
numrtex++;
|
||||
|
||||
sprintf (path, "textures/%s.wal", name);
|
||||
ReleaseFile (path);
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Maps
|
||||
|
||||
Only relevent for release and pak files.
|
||||
Releases the .bsp files for the maps, and scans all of the files to
|
||||
build a list of all textures used, which are then released.
|
||||
===============
|
||||
*/
|
||||
void Cmd_Maps (void)
|
||||
{
|
||||
char map[1024];
|
||||
int i;
|
||||
|
||||
while (TokenAvailable ())
|
||||
{
|
||||
GetToken (false);
|
||||
sprintf (map, "maps/%s.bsp", token);
|
||||
ReleaseFile (map);
|
||||
|
||||
if (!g_release)
|
||||
continue;
|
||||
|
||||
// get all the texture references
|
||||
sprintf (map, "%smaps/%s.bsp", gamedir, token);
|
||||
LoadBSPFileTexinfo (map);
|
||||
for (i=0 ; i<numtexinfo ; i++)
|
||||
ReleaseTexture (texinfo[i].texture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//==============================================================
|
||||
|
||||
/*
|
||||
===============
|
||||
ParseScript
|
||||
===============
|
||||
*/
|
||||
void ParseScript (void)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
do
|
||||
{ // look for a line starting with a $ command
|
||||
GetToken (true);
|
||||
if (endofscript)
|
||||
return;
|
||||
if (token[0] == '$')
|
||||
break;
|
||||
while (TokenAvailable())
|
||||
GetToken (false);
|
||||
} while (1);
|
||||
|
||||
//
|
||||
// model commands
|
||||
//
|
||||
if (!strcmp (token, "$modelname"))
|
||||
Cmd_Modelname ();
|
||||
else if (!strcmp (token, "$base"))
|
||||
Cmd_Base ();
|
||||
else if (!strcmp (token, "$cd"))
|
||||
Cmd_Cd ();
|
||||
else if (!strcmp (token, "$origin"))
|
||||
Cmd_Origin ();
|
||||
else if (!strcmp (token, "$scale"))
|
||||
Cmd_ScaleUp ();
|
||||
else if (!strcmp (token, "$frame"))
|
||||
Cmd_Frame ();
|
||||
else if (!strcmp (token, "$skin"))
|
||||
Cmd_Skin ();
|
||||
else if (!strcmp (token, "$skinsize"))
|
||||
Cmd_Skinsize ();
|
||||
//
|
||||
// sprite commands
|
||||
//
|
||||
else if (!strcmp (token, "$spritename"))
|
||||
Cmd_SpriteName ();
|
||||
else if (!strcmp (token, "$load"))
|
||||
Cmd_Load ();
|
||||
else if (!strcmp (token, "$spriteframe"))
|
||||
Cmd_SpriteFrame ();
|
||||
//
|
||||
// image commands
|
||||
//
|
||||
else if (!strcmp (token, "$grab"))
|
||||
Cmd_Grab ();
|
||||
else if (!strcmp (token, "$raw"))
|
||||
Cmd_Raw ();
|
||||
else if (!strcmp (token, "$colormap"))
|
||||
Cmd_Colormap ();
|
||||
else if (!strcmp (token, "$mippal"))
|
||||
Cmd_Mippal ();
|
||||
else if (!strcmp (token, "$mipdir"))
|
||||
Cmd_Mipdir ();
|
||||
else if (!strcmp (token, "$mip"))
|
||||
Cmd_Mip ();
|
||||
else if (!strcmp (token, "$environment"))
|
||||
Cmd_Environment ();
|
||||
//
|
||||
// video
|
||||
//
|
||||
else if (!strcmp (token, "$video"))
|
||||
Cmd_Video ();
|
||||
//
|
||||
// misc
|
||||
//
|
||||
else if (!strcmp (token, "$file"))
|
||||
Cmd_File ();
|
||||
else if (!strcmp (token, "$dir"))
|
||||
Cmd_Dir ();
|
||||
else if (!strcmp (token, "$maps"))
|
||||
Cmd_Maps ();
|
||||
else if (!strcmp (token, "$alphalight"))
|
||||
Cmd_Alphalight ();
|
||||
else if (!strcmp (token, "$inverse16table" ))
|
||||
Cmd_Inverse16Table();
|
||||
else
|
||||
Error ("bad command %s\n", token);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================
|
||||
|
||||
/*
|
||||
==============
|
||||
main
|
||||
==============
|
||||
*/
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
static int i; // VC4.2 compiler bug if auto...
|
||||
char path[1024];
|
||||
|
||||
ExpandWildcards (&argc, &argv);
|
||||
|
||||
InitPaths( &argc, argv );
|
||||
|
||||
for (i=1 ; i<argc ; i++)
|
||||
{
|
||||
if (!strcmp(argv[i], "-archive"))
|
||||
{
|
||||
// -archive f:/quake2/release/dump_11_30
|
||||
archive = true;
|
||||
strcpy (archivedir, argv[i+1]);
|
||||
printf ("Archiving source to: %s\n", archivedir);
|
||||
i++;
|
||||
}
|
||||
else if (!strcmp(argv[i], "-release"))
|
||||
{
|
||||
g_release = true;
|
||||
strcpy (g_releasedir, argv[i+1]);
|
||||
printf ("Copy output to: %s\n", g_releasedir);
|
||||
i++;
|
||||
}
|
||||
else if (!strcmp(argv[i], "-compress"))
|
||||
{
|
||||
g_compress_pak = true;
|
||||
printf ("Compressing pakfile\n");
|
||||
}
|
||||
else if (!strcmp(argv[i], "-pak"))
|
||||
{
|
||||
g_release = true;
|
||||
g_pak = true;
|
||||
printf ("Building pakfile: %s\n", argv[i+1]);
|
||||
BeginPak (argv[i+1]);
|
||||
i++;
|
||||
}
|
||||
else if (!strcmp(argv[i], "-only"))
|
||||
{
|
||||
strcpy (g_only, argv[i+1]);
|
||||
printf ("Only grabbing %s\n", g_only);
|
||||
i++;
|
||||
}
|
||||
else if (!strcmp(argv[i], "-3ds"))
|
||||
{
|
||||
do3ds = true;
|
||||
printf ("loading .3ds files\n");
|
||||
}
|
||||
else if (argv[i][0] == '-')
|
||||
Error ("Unknown option \"%s\"", argv[i]);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if (i >= argc)
|
||||
Error ("usage: %s [-archive <directory>] [-release <directory>] [-only <model>] [-3ds] file.qgr", argv[ 0 ] );
|
||||
|
||||
if (do3ds)
|
||||
trifileext = ext_3ds;
|
||||
else
|
||||
trifileext = ext_tri;
|
||||
|
||||
for ( ; i<argc ; i++)
|
||||
{
|
||||
printf ("--------------- %s ---------------\n", argv[i]);
|
||||
// load the script
|
||||
strcpy (path, argv[i]);
|
||||
DefaultExtension (path, ".qdt");
|
||||
SetQdirFromPath (path);
|
||||
LoadScriptFile (ExpandArg(path));
|
||||
|
||||
//
|
||||
// parse it
|
||||
//
|
||||
ParseScript ();
|
||||
|
||||
// write out the last model
|
||||
FinishModel ();
|
||||
FinishSprite ();
|
||||
}
|
||||
|
||||
if (g_pak)
|
||||
FinishPak ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
93
tools/quake2/qdata/qdata.h
Normal file
93
tools/quake2/qdata/qdata.h
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
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 <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "cmdlib.h"
|
||||
#include "scriplib.h"
|
||||
#include "mathlib.h"
|
||||
#include "trilib.h"
|
||||
#include "lbmlib.h"
|
||||
#include "q2_threads.h"
|
||||
#include "l3dslib.h"
|
||||
#include "bspfile.h"
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef NDEBUG // Don't show in a Release build
|
||||
#pragma warning(disable : 4305) // truncate from double to float
|
||||
#pragma warning(disable : 4244) // conversion from double to float
|
||||
#pragma warning(disable : 4018) // signed/unsigned mismatch
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void Cmd_Modelname (void);
|
||||
void Cmd_Base (void);
|
||||
void Cmd_Cd (void);
|
||||
void Cmd_Origin (void);
|
||||
void Cmd_ScaleUp (void);
|
||||
void Cmd_Frame (void);
|
||||
void Cmd_Modelname (void);
|
||||
void Cmd_Skin (void);
|
||||
void Cmd_Skinsize (void);
|
||||
void FinishModel (void);
|
||||
|
||||
void Cmd_Inverse16Table( void );
|
||||
|
||||
void Cmd_SpriteName (void);
|
||||
void Cmd_Load (void);
|
||||
void Cmd_SpriteFrame (void);
|
||||
void FinishSprite (void);
|
||||
|
||||
void Cmd_Grab (void);
|
||||
void Cmd_Raw (void);
|
||||
void Cmd_Mip (void);
|
||||
void Cmd_Environment (void);
|
||||
void Cmd_Colormap (void);
|
||||
|
||||
void Cmd_File (void);
|
||||
void Cmd_Dir (void);
|
||||
void Cmd_StartWad (void);
|
||||
void Cmd_EndWad (void);
|
||||
void Cmd_Mippal (void);
|
||||
void Cmd_Mipdir (void);
|
||||
void Cmd_Alphalight (void);
|
||||
|
||||
void Cmd_Video (void);
|
||||
|
||||
void RemapZero (byte *pixels, byte *palette, int width, int height);
|
||||
|
||||
void ReleaseFile (char *filename);
|
||||
|
||||
extern byte *byteimage, *lbmpalette;
|
||||
extern int byteimagewidth, byteimageheight;
|
||||
|
||||
extern qboolean g_release; // don't grab, copy output data to new tree
|
||||
extern char g_releasedir[1024]; // c:\quake2\baseq2, etc
|
||||
extern qboolean g_archive; // don't grab, copy source data to new tree
|
||||
extern qboolean do3ds;
|
||||
extern char g_only[256]; // if set, only grab this cd
|
||||
extern qboolean g_skipmodel; // set true when a cd is not g_only
|
||||
|
||||
extern char *trifileext;
|
||||
218
tools/quake2/qdata/qdata3.dsp
Normal file
218
tools/quake2/qdata/qdata3.dsp
Normal file
@@ -0,0 +1,218 @@
|
||||
# Microsoft Developer Studio Project File - Name="qdata3" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=qdata3 - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "qdata3.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "qdata3.mak" CFG="qdata3 - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "qdata3 - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "qdata3 - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "qdata3 - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
F90=df.exe
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /MD /W3 /GX- /Zi /O2 /I "..\common" /I "..\..\..\..\libxml2\include" /I "..\..\..\libs" /I "..\..\..\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD LINK32 wsock32.lib l_net.lib mathlib.lib /nologo /subsystem:console /map /machine:I386 /libpath:"..\..\..\libs\mathlib\Release" /libpath:"..\..\..\libs\l_net\Release" /libpath:"..\..\..\..\libxml2\win32\libxml2\release_so"
|
||||
|
||||
!ELSEIF "$(CFG)" == "qdata3 - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
F90=df.exe
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MDd /W3 /Gm /GX- /ZI /Od /I "..\common" /I "..\..\..\..\libxml2\include" /I "..\..\..\libs" /I "..\..\..\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LINK32=link.exe
|
||||
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD LINK32 wsock32.lib l_net.lib mathlib.lib /nologo /subsystem:console /profile /map /debug /machine:I386 /libpath:"..\..\..\libs\mathlib\Debug" /libpath:"..\..\..\libs\l_net\Debug" /libpath:"..\..\..\..\libxml2\win32\libxml2\debug_so"
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "qdata3 - Win32 Release"
|
||||
# Name "qdata3 - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\bspfile.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\cmdlib.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\images.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\inout.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\l3dslib.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\lbmlib.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\mathlib.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\md4.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\models.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\path_init.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qdata.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\scriplib.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\sprites.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\tables.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\threads.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\trilib.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\video.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\anorms.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\bspfile.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\cmdlib.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\inout.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\l3dslib.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\lbmlib.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\mathlib.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qdata.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\qfiles.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\scriplib.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\threads.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\common\trilib.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
||||
231
tools/quake2/qdata/qdata3.vcproj
Normal file
231
tools/quake2/qdata/qdata3.vcproj
Normal file
@@ -0,0 +1,231 @@
|
||||
<?xml version="1.0" encoding = "Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.00"
|
||||
Name="qdata3"
|
||||
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory=".\Debug"
|
||||
IntermediateDirectory=".\Debug"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\common,..\..\..\..\libxml2\include,..\..\..\libs,..\..\..\include"
|
||||
PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
PrecompiledHeaderFile=".\Debug/qdata3.pch"
|
||||
AssemblerListingLocation=".\Debug/"
|
||||
ObjectFile=".\Debug/"
|
||||
ProgramDataBaseFileName=".\Debug/"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="TRUE"
|
||||
DebugInformationFormat="4"
|
||||
CompileAs="0"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalOptions="/MACHINE:I386"
|
||||
AdditionalDependencies="wsock32.lib libxml2.lib"
|
||||
OutputFile=".\Debug/qdata3.exe"
|
||||
LinkIncremental="2"
|
||||
SuppressStartupBanner="TRUE"
|
||||
AdditionalLibraryDirectories="..\..\..\libs\mathlib\Debug;..\..\..\libs\l_net\Debug;"..\..\..\..\libxml2\win32\binaries-debug""
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile=".\Debug/qdata3.pdb"
|
||||
GenerateMapFile="TRUE"
|
||||
MapFileName=".\Debug/qdata3.map"
|
||||
SubSystem="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TypeLibraryName=".\Debug/qdata3.tlb"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1033"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\Release"
|
||||
IntermediateDirectory=".\Release"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
InlineFunctionExpansion="1"
|
||||
AdditionalIncludeDirectories="..\common,..\..\..\..\libxml2\include,..\..\..\libs,..\..\..\include"
|
||||
PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
PrecompiledHeaderFile=".\Release/qdata3.pch"
|
||||
AssemblerListingLocation=".\Release/"
|
||||
ObjectFile=".\Release/"
|
||||
ProgramDataBaseFileName=".\Release/"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="TRUE"
|
||||
DebugInformationFormat="3"
|
||||
CompileAs="0"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalOptions="/MACHINE:I386"
|
||||
AdditionalDependencies="wsock32.lib libxml2.lib"
|
||||
OutputFile=".\Release/qdata3.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
AdditionalLibraryDirectories="..\..\..\libs\mathlib\Release;..\..\..\libs\l_net\Release;"..\..\..\..\libxml2\win32\binaries-release""
|
||||
ProgramDatabaseFile=".\Release/qdata3.pdb"
|
||||
GenerateMapFile="TRUE"
|
||||
MapFileName=".\Release/qdata3.map"
|
||||
SubSystem="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TypeLibraryName=".\Release/qdata3.tlb"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1033"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
|
||||
<File
|
||||
RelativePath="..\common\bspfile.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\cmdlib.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\images.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\inout.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\l3dslib.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\lbmlib.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\mathlib.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\md4.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\models.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\path_init.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\qdata.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\scriplib.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sprites.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\tables.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\threads.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\trilib.c">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\video.c">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl">
|
||||
<File
|
||||
RelativePath=".\anorms.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\bspfile.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\cmdlib.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\inout.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\l3dslib.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\lbmlib.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\mathlib.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\qdata.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\qfiles.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\scriplib.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\threads.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\common\trilib.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
228
tools/quake2/qdata/sprites.c
Normal file
228
tools/quake2/qdata/sprites.c
Normal file
@@ -0,0 +1,228 @@
|
||||
/*
|
||||
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"
|
||||
#include "inout.h"
|
||||
|
||||
#define MAX_SPRFRAMES MAX_MD2SKINS
|
||||
|
||||
dsprite_t sprite;
|
||||
dsprframe_t frames[MAX_SPRFRAMES];
|
||||
|
||||
byte *byteimage, *lbmpalette;
|
||||
int byteimagewidth, byteimageheight;
|
||||
|
||||
char spritename[1024];
|
||||
|
||||
|
||||
void FinishSprite (void);
|
||||
void Cmd_Spritename (void);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
FinishSprite
|
||||
==============
|
||||
*/
|
||||
void FinishSprite (void)
|
||||
{
|
||||
FILE *spriteouthandle;
|
||||
int i, curframe;
|
||||
dsprite_t spritetemp;
|
||||
char savename[1024];
|
||||
|
||||
if (sprite.numframes == 0)
|
||||
return;
|
||||
|
||||
if (!strlen(spritename))
|
||||
Error ("Didn't name sprite file");
|
||||
|
||||
sprintf (savename, "%s%s.sp2", gamedir, spritename);
|
||||
|
||||
if (g_release)
|
||||
{
|
||||
char name[1024];
|
||||
|
||||
sprintf (name, "%s.sp2", spritename);
|
||||
ReleaseFile (name);
|
||||
spritename[0] = 0; // clear for a new sprite
|
||||
sprite.numframes = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
printf ("saving in %s\n", savename);
|
||||
CreatePath (savename);
|
||||
spriteouthandle = SafeOpenWrite (savename);
|
||||
|
||||
|
||||
//
|
||||
// write out the sprite header
|
||||
//
|
||||
spritetemp.ident = LittleLong (IDSPRITEHEADER);
|
||||
spritetemp.version = LittleLong (SPRITE_VERSION);
|
||||
spritetemp.numframes = LittleLong (sprite.numframes);
|
||||
|
||||
SafeWrite (spriteouthandle, &spritetemp, 12);
|
||||
|
||||
//
|
||||
// write out the frames
|
||||
//
|
||||
curframe = 0;
|
||||
|
||||
for (i=0 ; i<sprite.numframes ; i++)
|
||||
{
|
||||
frames[i].width = LittleLong(frames[i].width);
|
||||
frames[i].height = LittleLong(frames[i].height);
|
||||
frames[i].origin_x = LittleLong(frames[i].origin_x);
|
||||
frames[i].origin_y = LittleLong(frames[i].origin_y);
|
||||
}
|
||||
SafeWrite (spriteouthandle, frames, sizeof(frames[0])*sprite.numframes);
|
||||
|
||||
fclose (spriteouthandle);
|
||||
|
||||
spritename[0] = 0; // clear for a new sprite
|
||||
sprite.numframes = 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Load
|
||||
===============
|
||||
*/
|
||||
void Cmd_Load (void)
|
||||
{
|
||||
char *name;
|
||||
|
||||
GetToken (false);
|
||||
|
||||
if (g_release)
|
||||
return;
|
||||
|
||||
name = ExpandPathAndArchive(token);
|
||||
|
||||
// load the image
|
||||
printf ("loading %s\n", name);
|
||||
Load256Image (name, &byteimage, &lbmpalette,
|
||||
&byteimagewidth, &byteimageheight);
|
||||
RemapZero (byteimage, lbmpalette,
|
||||
byteimagewidth, byteimageheight);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_SpriteFrame
|
||||
===============
|
||||
*/
|
||||
void Cmd_SpriteFrame (void)
|
||||
{
|
||||
int y,xl,yl,xh,yh,w,h;
|
||||
dsprframe_t *pframe;
|
||||
int ox, oy;
|
||||
byte *cropped;
|
||||
char savename[1024];
|
||||
|
||||
GetToken (false);
|
||||
xl = atoi (token);
|
||||
GetToken (false);
|
||||
yl = atoi (token);
|
||||
GetToken (false);
|
||||
w = atoi (token);
|
||||
GetToken (false);
|
||||
h = atoi (token);
|
||||
|
||||
// origin offset is optional
|
||||
if (TokenAvailable ())
|
||||
{
|
||||
GetToken (false);
|
||||
ox = atoi (token);
|
||||
GetToken (false);
|
||||
oy = atoi (token);
|
||||
}
|
||||
else
|
||||
{
|
||||
ox = w/2;
|
||||
oy = h/2;
|
||||
}
|
||||
|
||||
if ((xl & 0x07) || (yl & 0x07) || (w & 0x07) || (h & 0x07))
|
||||
Error ("Sprite dimensions not multiples of 8\n");
|
||||
|
||||
if ((w > 256) || (h > 256))
|
||||
Error ("Sprite has a dimension longer than 256");
|
||||
|
||||
xh = xl+w;
|
||||
yh = yl+h;
|
||||
|
||||
if (sprite.numframes >= MAX_SPRFRAMES)
|
||||
Error ("Too many frames; increase MAX_SPRFRAMES\n");
|
||||
|
||||
pframe = &frames[sprite.numframes];
|
||||
pframe->width = w;
|
||||
pframe->height = h;
|
||||
pframe->origin_x = ox;
|
||||
pframe->origin_y = oy;
|
||||
sprintf (pframe->name, "%s_%i.pcx", spritename, sprite.numframes);
|
||||
sprintf (savename, "%s%s_%i.pcx", gamedir, spritename, sprite.numframes);
|
||||
sprite.numframes++;
|
||||
|
||||
if (g_release)
|
||||
{
|
||||
ReleaseFile (pframe->name);
|
||||
return;
|
||||
}
|
||||
|
||||
// crop it to the proper size
|
||||
cropped = malloc (w*h);
|
||||
for (y=0 ; y<h ; y++)
|
||||
{
|
||||
memcpy (cropped+y*w, byteimage+(y+yl)*byteimagewidth+xl, w);
|
||||
}
|
||||
|
||||
// save off the new image
|
||||
printf ("saving %s\n", savename);
|
||||
CreatePath (savename);
|
||||
WritePCXfile (savename, cropped, w, h, lbmpalette);
|
||||
|
||||
free (cropped);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
==============
|
||||
Cmd_SpriteName
|
||||
==============
|
||||
*/
|
||||
void Cmd_SpriteName (void)
|
||||
{
|
||||
if (sprite.numframes)
|
||||
FinishSprite ();
|
||||
|
||||
GetToken (false);
|
||||
strcpy (spritename, token);
|
||||
memset (&sprite, 0, sizeof(sprite));
|
||||
memset (&frames, 0, sizeof(frames));
|
||||
}
|
||||
|
||||
171
tools/quake2/qdata/tables.c
Normal file
171
tools/quake2/qdata/tables.c
Normal file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
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"
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
ALPHALIGHT GENERATION
|
||||
|
||||
Find alphamap values that best match modulated lightmap values
|
||||
|
||||
This isn't used anymore, but I'm keeping it around...
|
||||
=============================================================================
|
||||
*/
|
||||
|
||||
unsigned short alphamap[32*32*32];
|
||||
unsigned char inverse16to8table[65536];
|
||||
|
||||
/*
|
||||
static int FindNearestColor( unsigned int color )
|
||||
{
|
||||
int i;
|
||||
int closest_so_far = 0;
|
||||
float closest_distance_so_far = 100000000;
|
||||
float d;
|
||||
float r[2], g[2], b[2];
|
||||
|
||||
// incoming color is assumed to be in 0xRRGGBB format
|
||||
r[0] = ( color & 31 ) << 3;
|
||||
g[0] = ( ( color >> 5 ) & 63 ) << 2;
|
||||
b[0] = ( ( color >> 11 ) & 31 ) << 3;
|
||||
|
||||
for ( i = 0; i < 256; i++ )
|
||||
{
|
||||
r[1] = ( d_8to24table[i] >> 0 ) & 0xFF;
|
||||
g[1] = ( d_8to24table[i] >> 8 ) & 0xFF;
|
||||
b[1] = ( d_8to24table[i] >> 16 ) & 0xFF;
|
||||
|
||||
d = ( r[1] - r[0] ) * ( r[1] - r[0] ) +
|
||||
( g[1] - g[0] ) * ( g[1] - g[0] ) +
|
||||
( b[1] - b[0] ) * ( b[1] - b[0] );
|
||||
|
||||
if ( d < closest_distance_so_far )
|
||||
{
|
||||
closest_distance_so_far = d;
|
||||
closest_so_far = i;
|
||||
}
|
||||
}
|
||||
|
||||
return closest_so_far;
|
||||
}
|
||||
*/
|
||||
|
||||
extern byte BestColor( int, int, int, int, int );
|
||||
|
||||
void Inverse16_BuildTable( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
** create the 16-to-8 table
|
||||
*/
|
||||
for ( i = 0; i < 65536; i++ )
|
||||
{
|
||||
int r = i & 31;
|
||||
int g = ( i >> 5 ) & 63;
|
||||
int b = ( i >> 11 ) & 31;
|
||||
|
||||
r <<= 3;
|
||||
g <<= 2;
|
||||
b <<= 3;
|
||||
|
||||
inverse16to8table[i] = BestColor( r, g, b, 0, 255 );
|
||||
}
|
||||
}
|
||||
|
||||
void Alphalight_Thread (int i)
|
||||
{
|
||||
int j;
|
||||
float r, g, b;
|
||||
float mr, mg, mb, ma;
|
||||
float distortion, bestdistortion;
|
||||
float v;
|
||||
|
||||
r = (i>>10) * (1.0/16);
|
||||
g = ((i>>5)&31) * (1.0/16);
|
||||
b = (i&31) * (1.0/16);
|
||||
|
||||
bestdistortion = 999999;
|
||||
for (j=0 ; j<16*16*16*16 ; j++)
|
||||
{
|
||||
mr = (j>>12) * (1.0/16);
|
||||
mg = ((j>>8)&15) * (1.0/16);
|
||||
mb = ((j>>4)&15) * (1.0/16);
|
||||
ma = (j&15) * (1.0/16);
|
||||
|
||||
v = r * 0.5 - (mr*ma + 0.5*(1.0-ma));
|
||||
distortion = v*v;
|
||||
v = g * 0.5 - (mg*ma + 0.5*(1.0-ma));
|
||||
distortion += v*v;
|
||||
v = b * 0.5 - (mb*ma + 0.5*(1.0-ma));
|
||||
distortion += v*v;
|
||||
|
||||
distortion *= 1.0 + ma*4;
|
||||
|
||||
if (distortion < bestdistortion)
|
||||
{
|
||||
bestdistortion = distortion;
|
||||
alphamap[i] = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Cmd_Alphalight (void)
|
||||
{
|
||||
char savename[1024];
|
||||
|
||||
GetToken (false);
|
||||
|
||||
if (g_release)
|
||||
{
|
||||
ReleaseFile (token);
|
||||
return;
|
||||
}
|
||||
|
||||
sprintf (savename, "%s%s", gamedir, token);
|
||||
printf ("Building alphalight table...\n");
|
||||
|
||||
RunThreadsOnIndividual (32*32*32, true, Alphalight_Thread);
|
||||
|
||||
SaveFile (savename, (byte *)alphamap, sizeof(alphamap));
|
||||
}
|
||||
|
||||
|
||||
void Cmd_Inverse16Table( void )
|
||||
{
|
||||
char savename[1024];
|
||||
|
||||
if ( g_release )
|
||||
{
|
||||
sprintf (savename, "pics/16to8.dat");
|
||||
ReleaseFile( savename );
|
||||
return;
|
||||
}
|
||||
|
||||
sprintf (savename, "%spics/16to8.dat", gamedir);
|
||||
printf ("Building inverse 16-to-8 table...\n");
|
||||
|
||||
Inverse16_BuildTable();
|
||||
|
||||
SaveFile( savename, (byte *) inverse16to8table, sizeof( inverse16to8table ) );
|
||||
}
|
||||
1259
tools/quake2/qdata/video.c
Normal file
1259
tools/quake2/qdata/video.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user