I think this works, but maybe not.. skins will be very broken if I didn't

but I'll undo this mess if that happens.
This commit is contained in:
Joseph Carter 2000-03-04 16:43:53 +00:00
parent 76c3e731c1
commit 75001e947c
6 changed files with 43 additions and 68 deletions

View file

@ -42,6 +42,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <cmd.h> #include <cmd.h>
#include <cvar.h> #include <cvar.h>
#include <qstructs.h> #include <qstructs.h>
#include <image.h>
typedef struct typedef struct
{ {
@ -594,24 +595,6 @@ void CL_InitCam(void);
// skin.c // skin.c
// //
typedef struct
{
char manufacturer;
char version;
char encoding;
char bits_per_pixel;
unsigned short xmin,ymin,xmax,ymax;
unsigned short hres,vres;
unsigned char palette[48];
char reserved;
char color_planes;
unsigned short bytes_per_line;
unsigned short palette_type;
char filler[58];
unsigned char data; // unbounded
} pcx_t;
void Skin_Find (player_info_t *sc); void Skin_Find (player_info_t *sc);
byte *Skin_Cache (skin_t *skin); byte *Skin_Cache (skin_t *skin);
void Skin_Skins_f (void); void Skin_Skins_f (void);

View file

@ -296,17 +296,6 @@ EmitBothSkyLayers ( msurface_t *fa ) {
glDisable (GL_BLEND); glDisable (GL_BLEND);
} }
#if 0
/*
R_DrawSkyChain
*/
void
R_DrawSkyChain ( msurface_t *s ) {
msurface_t *fa;
}
#endif
/* /*
Quake 2 sky rendering ("skyboxes") Quake 2 sky rendering ("skyboxes")
@ -314,24 +303,20 @@ R_DrawSkyChain ( msurface_t *s ) {
#define SKY_TEX 2000 #define SKY_TEX 2000
/* #if 0
PCX Loading
*/
byte *pcx_rgb;
/* /*
LoadPCX LoadPCX
*/ */
void void
LoadPCX (QFile *f) { LoadPCX (QFile *f, byte **pcx_rgb)
{
pcx_t *pcx, pcxbuf; pcx_t *pcx, pcxbuf;
byte palette[768]; byte palette[768];
byte *pix; byte *pix;
int x, y; int x, y;
int dataByte, runLength; int dataByte, runLength;
int count; int count;
/* /*
Parse PCX file Parse PCX file
@ -354,10 +339,10 @@ LoadPCX (QFile *f) {
Qseek (f, sizeof(pcxbuf) - 4, SEEK_SET); Qseek (f, sizeof(pcxbuf) - 4, SEEK_SET);
count = (pcx->xmax+1) * (pcx->ymax+1); count = (pcx->xmax+1) * (pcx->ymax+1);
pcx_rgb = malloc( count * 4); *pcx_rgb = malloc( count * 4);
for (y=0 ; y<=pcx->ymax ; y++) { for (y=0 ; y<=pcx->ymax ; y++) {
pix = pcx_rgb + 4*y*(pcx->xmax+1); pix = *pcx_rgb + 4*y*(pcx->xmax+1);
for (x=0 ; x<=pcx->ymax ; ) { for (x=0 ; x<=pcx->ymax ; ) {
dataByte = Qgetc(f); dataByte = Qgetc(f);
@ -379,6 +364,7 @@ LoadPCX (QFile *f) {
} }
} }
} }
#endif
/* /*
TARGA LOADING TARGA LOADING
@ -392,8 +378,6 @@ typedef struct _TargaHeader {
unsigned char pixel_size, attributes; unsigned char pixel_size, attributes;
} TargaHeader; } TargaHeader;
TargaHeader targa_header;
byte *targa_rgba;
int int
QgetLittleShort ( QFile *f ) { QgetLittleShort ( QFile *f ) {
@ -423,11 +407,12 @@ QgetLittleLong (QFile *f) {
LoadTGA LoadTGA
*/ */
void void
LoadTGA (QFile *fin) { LoadTGA (QFile *fin, byte **targa_rgba) {
int columns, rows, numPixels; int columns, rows, numPixels;
byte *pixbuf; byte *pixbuf;
int row, column; int row, column;
TargaHeader targa_header;
unsigned char red = 0, green = 0, blue = 0, alphabyte = 0; unsigned char red = 0, green = 0, blue = 0, alphabyte = 0;
targa_header.id_length = Qgetc(fin); targa_header.id_length = Qgetc(fin);
@ -456,14 +441,14 @@ LoadTGA (QFile *fin) {
rows = targa_header.height; rows = targa_header.height;
numPixels = columns * rows; numPixels = columns * rows;
targa_rgba = malloc (numPixels*4); *targa_rgba = malloc (numPixels*4);
if (targa_header.id_length != 0) if (targa_header.id_length != 0)
Qseek(fin, targa_header.id_length, SEEK_CUR); // skip TARGA image comment Qseek(fin, targa_header.id_length, SEEK_CUR); // skip TARGA image comment
if (targa_header.image_type==2) { // Uncompressed, RGB images if (targa_header.image_type==2) { // Uncompressed, RGB images
for(row=rows-1; row>=0; row--) { for(row=rows-1; row>=0; row--) {
pixbuf = targa_rgba + row*columns*4; pixbuf = *targa_rgba + row*columns*4;
for(column=0; column<columns; column++) { for(column=0; column<columns; column++) {
switch (targa_header.pixel_size) { switch (targa_header.pixel_size) {
case 24: case 24:
@ -493,7 +478,7 @@ LoadTGA (QFile *fin) {
else if (targa_header.image_type==10) { // Runlength encoded RGB images else if (targa_header.image_type==10) { // Runlength encoded RGB images
unsigned char packetHeader,packetSize,j; unsigned char packetHeader,packetSize,j;
for(row=rows-1; row>=0; row--) { for(row=rows-1; row>=0; row--) {
pixbuf = targa_rgba + row*columns*4; pixbuf = *targa_rgba + row*columns*4;
for(column=0; column<columns; ) { for(column=0; column<columns; ) {
packetHeader=Qgetc(fin); packetHeader=Qgetc(fin);
packetSize = 1 + (packetHeader & 0x7f); packetSize = 1 + (packetHeader & 0x7f);
@ -525,7 +510,7 @@ LoadTGA (QFile *fin) {
row--; row--;
else else
goto breakOut; goto breakOut;
pixbuf = targa_rgba + row*columns*4; pixbuf = *targa_rgba + row*columns*4;
} }
} }
} }
@ -559,7 +544,7 @@ LoadTGA (QFile *fin) {
row--; row--;
else else
goto breakOut; goto breakOut;
pixbuf = targa_rgba + row*columns*4; pixbuf = *targa_rgba + row*columns*4;
} }
} }
} }
@ -581,6 +566,7 @@ R_LoadSkys ( void ) {
int i; int i;
QFile *f; QFile *f;
byte *skyimage = NULL;
char name[64]; char name[64];
for (i=0 ; i<6 ; i++) { for (i=0 ; i<6 ; i++) {
@ -592,14 +578,14 @@ R_LoadSkys ( void ) {
Con_Printf ("Couldn't load %s\n", name); Con_Printf ("Couldn't load %s\n", name);
continue; continue;
} }
LoadTGA (f); LoadTGA (f, &skyimage);
// LoadPCX (f); // LoadPCX (f, &skyimage);
glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, targa_rgba); glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, skyimage);
// glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, pcx_rgb); // glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, pcx_rgb);
free (targa_rgba); // free (targa_rgba);
// free (pcx_rgb); free (skyimage);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

View file

@ -298,7 +298,7 @@ QFile *COM_OpenRead(const char *path, int offs, int len)
/* /*
=========== ===========
COM_FindFile COM_FOpenFile
Finds the file in the search path. Finds the file in the search path.
Sets com_filesize and one of handle or file Sets com_filesize and one of handle or file

View file

@ -1,4 +1,5 @@
/* /*
skin.c - player skins
Copyright (C) 1996-1997 Id Software, Inc. Copyright (C) 1996-1997 Id Software, Inc.
Copyright (C) 1999,2000 contributors of the QuakeForge project Copyright (C) 1999,2000 contributors of the QuakeForge project
Portions Copyright (C) 1999,2000 Nelson Rush. Portions Copyright (C) 1999,2000 Nelson Rush.
@ -104,12 +105,13 @@ Returns a pointer to the skin bitmap, or NULL to use the default
byte *Skin_Cache (skin_t *skin) byte *Skin_Cache (skin_t *skin)
{ {
char name[1024]; char name[1024];
byte *raw; // byte *raw;
byte *out, *pix; byte *out;//, *pix;
pcx_t *pcx; // pcx_t *pcx;
int x, y; // int x, y;
int dataByte; // int dataByte;
int runLength; // int runLength;
QFile *f;
if (cls.downloadtype == dl_skin) if (cls.downloadtype == dl_skin)
return NULL; // use base until downloaded return NULL; // use base until downloaded
@ -128,19 +130,23 @@ byte *Skin_Cache (skin_t *skin)
// load the pic from disk // load the pic from disk
// //
snprintf(name, sizeof(name), "skins/%s.pcx", skin->name); snprintf(name, sizeof(name), "skins/%s.pcx", skin->name);
raw = COM_LoadTempFile (name); // raw = COM_LoadTempFile (name);
if (!raw) COM_FOpenFile (name, &f);
if (f == NULL)
{ {
Con_Printf ("Couldn't load skin %s\n", name); Con_Printf ("Couldn't load skin %s\n", name);
snprintf(name, sizeof(name), "skins/%s.pcx", baseskin->string); snprintf(name, sizeof(name), "skins/%s.pcx", baseskin->string);
raw = COM_LoadTempFile (name); // raw = COM_LoadTempFile (name);
if (!raw) COM_FOpenFile (name, &f);
if (f == NULL)
{ {
skin->failedload = true; skin->failedload = true;
return NULL; return NULL;
} }
} }
LoadPCX (f, &out);
#if 0
// //
// parse the PCX file // parse the PCX file
// //
@ -216,7 +222,7 @@ byte *Skin_Cache (skin_t *skin)
} }
skin->failedload = false; skin->failedload = false;
#endif
return out; return out;
} }

View file

@ -192,7 +192,7 @@ CFLAGS += @CFLAGS@ -DQUAKEWORLD -DLIBDIR=\"$(libdir)\" $(OPTFLAGS) $(DEFS) \
-I. $(SRC_DIR_INC) -I$(QW_COMMON_DIR) -I$(COMMON_ODIR) -I$(COMMON_DIR) -I. $(SRC_DIR_INC) -I$(QW_COMMON_DIR) -I$(COMMON_ODIR) -I$(COMMON_DIR)
GENERAL_SRC = $(CL_COMMON_SRC) \ GENERAL_SRC = $(CL_COMMON_SRC) \
$(QW_CL_SRC) $(QW_NET_SRC) net_chan.c skin.c \ $(QW_CL_SRC) $(QW_NET_SRC) net_chan.c skin.c pcx.c\
$(SYS_SRC) $(QW_GENERAL_SRC) $(SYS_SRC) $(QW_GENERAL_SRC)
# FIXME: add dos/win specifc source # FIXME: add dos/win specifc source

View file

@ -159,7 +159,7 @@ UQ_NET_SRC = net_com.c mdfour.c net_dgrm.c net_loop.c net_main.c net_vcr.c $(NET
MISC_SRC = common.c crc.c cvar.c cmd.c mathlib.c register_check.c \ MISC_SRC = common.c crc.c cvar.c cmd.c mathlib.c register_check.c \
wad.c zone.c cvars.c lib_replace.c qendian.c quakefs.c \ wad.c zone.c cvars.c lib_replace.c qendian.c quakefs.c \
quakeio.c qargs.c plugin.c quakeio.c qargs.c plugin.c pcx.c
ifeq ($(GENERATIONS),yes) ifeq ($(GENERATIONS),yes)
MISC_SRC += unzip.c MISC_SRC += unzip.c
endif endif