mirror of
https://git.code.sf.net/p/quake/newtree
synced 2025-05-31 17:21:46 +00:00
revert Endy's HL changes. Sorry endy but what would you rather have: HL
support in quakeforge, or knghtbrd using your guts for violin strings? :)
This commit is contained in:
parent
26c36382db
commit
acb5f4b21a
20 changed files with 63 additions and 976 deletions
|
@ -265,8 +265,6 @@ void R_DrawSkyChain (msurface_t *s);
|
||||||
void R_LoadSkys (char *);
|
void R_LoadSkys (char *);
|
||||||
void R_ClearSkyBox (void);
|
void R_ClearSkyBox (void);
|
||||||
void R_DrawSkyBox (void);
|
void R_DrawSkyBox (void);
|
||||||
byte *LoadTGA (FILE *fin);
|
|
||||||
byte *LoadPCX (FILE *f);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// gl_draw.c
|
// gl_draw.c
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#ifndef _INFO_H
|
#ifndef _INFO_H
|
||||||
#define _INFO_H
|
#define _INFO_H
|
||||||
|
|
||||||
#define MAX_INFO_STRING 512
|
#define MAX_INFO_STRING 196
|
||||||
#define MAX_SERVERINFO_STRING 512
|
#define MAX_SERVERINFO_STRING 512
|
||||||
#define MAX_LOCALINFO_STRING 32768
|
#define MAX_LOCALINFO_STRING 32768
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,6 @@ typedef struct texture_s
|
||||||
struct texture_s *anim_next; // in the animation sequence
|
struct texture_s *anim_next; // in the animation sequence
|
||||||
struct texture_s *alternate_anims; // bmodels in frmae 1 use these
|
struct texture_s *alternate_anims; // bmodels in frmae 1 use these
|
||||||
unsigned offsets[MIPLEVELS]; // four mip maps stored
|
unsigned offsets[MIPLEVELS]; // four mip maps stored
|
||||||
int transparent;
|
|
||||||
} texture_t;
|
} texture_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,6 @@ void R_RenderView (void); // must set r_refdef first
|
||||||
void R_ViewChanged (vrect_t *pvrect, int lineadj, float aspect);
|
void R_ViewChanged (vrect_t *pvrect, int lineadj, float aspect);
|
||||||
// called whenever r_refdef or vid change
|
// called whenever r_refdef or vid change
|
||||||
void R_InitSky (struct texture_s *mt); // called at level load
|
void R_InitSky (struct texture_s *mt); // called at level load
|
||||||
void R_InitSky_32 (byte *src, int bytesperpixel);
|
|
||||||
|
|
||||||
void R_AddEfrags (entity_t *ent);
|
void R_AddEfrags (entity_t *ent);
|
||||||
void R_RemoveEfrags (entity_t *ent);
|
void R_RemoveEfrags (entity_t *ent);
|
||||||
|
|
|
@ -80,7 +80,7 @@ soft_SOURCES= cl_model.c cl_trans.c d_edge.c d_fill.c d_init.c d_modech.c \
|
||||||
screen.c model.c $(SOFT_ASM)
|
screen.c model.c $(SOFT_ASM)
|
||||||
ogl_SOURCES= gl_draw.c gl_mesh.c gl_model.c gl_ngraph.c gl_part.c \
|
ogl_SOURCES= gl_draw.c gl_mesh.c gl_model.c gl_ngraph.c gl_part.c \
|
||||||
gl_refrag.c gl_rlight.c gl_rmain.c gl_rmisc.c gl_rsurf.c \
|
gl_refrag.c gl_rlight.c gl_rmain.c gl_rmisc.c gl_rsurf.c \
|
||||||
gl_screen.c gl_trans.c gl_view.c gl_warp.c hl_bsp.c hl_wad.c
|
gl_screen.c gl_trans.c gl_view.c gl_warp.c
|
||||||
|
|
||||||
mgl_SOURCES= vid_mgl.c in_win.c
|
mgl_SOURCES= vid_mgl.c in_win.c
|
||||||
ggi_SOURCES= vid_ggi.c
|
ggi_SOURCES= vid_ggi.c
|
||||||
|
|
|
@ -81,7 +81,6 @@
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int isServer = 0;
|
|
||||||
|
|
||||||
// we need to declare some mouse variables here, because the menu system
|
// we need to declare some mouse variables here, because the menu system
|
||||||
// references them even when on a unix system.
|
// references them even when on a unix system.
|
||||||
|
|
|
@ -1405,7 +1405,7 @@ void GL_SelectTexture (GLenum target)
|
||||||
{
|
{
|
||||||
if (!gl_mtexable)
|
if (!gl_mtexable)
|
||||||
return;
|
return;
|
||||||
qglSelectTexture(target+gl_mtex_enum);
|
qglSelectTexture (target + gl_mtex_enum);
|
||||||
if (target == oldtarget)
|
if (target == oldtarget)
|
||||||
return;
|
return;
|
||||||
cnttextures[oldtarget] = currenttexture;
|
cnttextures[oldtarget] = currenttexture;
|
||||||
|
|
|
@ -60,7 +60,6 @@
|
||||||
#include "glquake.h"
|
#include "glquake.h"
|
||||||
#include "quakefs.h"
|
#include "quakefs.h"
|
||||||
#include "checksum.h"
|
#include "checksum.h"
|
||||||
#include "hl.h"
|
|
||||||
|
|
||||||
void SV_Error (char *error, ...);
|
void SV_Error (char *error, ...);
|
||||||
|
|
||||||
|
@ -81,7 +80,8 @@ byte mod_novis[MAX_MAP_LEAFS/8];
|
||||||
|
|
||||||
#define MAX_MOD_KNOWN 512
|
#define MAX_MOD_KNOWN 512
|
||||||
model_t mod_known[MAX_MOD_KNOWN];
|
model_t mod_known[MAX_MOD_KNOWN];
|
||||||
int mod_numknown, bspversion;
|
int mod_numknown;
|
||||||
|
|
||||||
unsigned *model_checksum;
|
unsigned *model_checksum;
|
||||||
texture_t *r_notexture_mip;
|
texture_t *r_notexture_mip;
|
||||||
cvar_t *gl_subdivide_size;
|
cvar_t *gl_subdivide_size;
|
||||||
|
@ -548,9 +548,6 @@ void Mod_LoadEntities (lump_t *l)
|
||||||
}
|
}
|
||||||
loadmodel->entities = Hunk_AllocName ( l->filelen, loadname);
|
loadmodel->entities = Hunk_AllocName ( l->filelen, loadname);
|
||||||
memcpy (loadmodel->entities, mod_base + l->fileofs, l->filelen);
|
memcpy (loadmodel->entities, mod_base + l->fileofs, l->filelen);
|
||||||
|
|
||||||
if (bspversion > 29)
|
|
||||||
CL_ParseEntityLump(loadmodel->entities);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -805,12 +802,10 @@ void Mod_LoadFaces (lump_t *l)
|
||||||
for (i=0 ; i<MAXLIGHTMAPS ; i++)
|
for (i=0 ; i<MAXLIGHTMAPS ; i++)
|
||||||
out->styles[i] = in->styles[i];
|
out->styles[i] = in->styles[i];
|
||||||
i = LittleLong(in->lightofs);
|
i = LittleLong(in->lightofs);
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
out->samples = NULL;
|
out->samples = NULL;
|
||||||
else if (bspversion > 29)
|
else
|
||||||
out->samples = loadmodel->lightdata + i;
|
out->samples = loadmodel->lightdata + (i * 3);
|
||||||
else
|
|
||||||
out->samples = loadmodel->lightdata + (i * 3);
|
|
||||||
|
|
||||||
// set the drawing flags flag
|
// set the drawing flags flag
|
||||||
|
|
||||||
|
@ -1177,11 +1172,9 @@ void Mod_LoadBrushModel (model_t *mod, void *buffer)
|
||||||
header = (dheader_t *)buffer;
|
header = (dheader_t *)buffer;
|
||||||
|
|
||||||
i = LittleLong (header->version);
|
i = LittleLong (header->version);
|
||||||
if ((i != BSPVERSION) && (i != 30))
|
if (i != BSPVERSION)
|
||||||
SV_Error ("Mod_LoadBrushModel: %s has wrong version number (%i should be %i)", mod->name, i, BSPVERSION);
|
SV_Error ("Mod_LoadBrushModel: %s has wrong version number (%i should be %i)", mod->name, i, BSPVERSION);
|
||||||
|
|
||||||
bspversion = i;
|
|
||||||
|
|
||||||
// swap all the lumps
|
// swap all the lumps
|
||||||
mod_base = (byte *)header;
|
mod_base = (byte *)header;
|
||||||
|
|
||||||
|
@ -1206,17 +1199,11 @@ void Mod_LoadBrushModel (model_t *mod, void *buffer)
|
||||||
|
|
||||||
// load into heap
|
// load into heap
|
||||||
|
|
||||||
Mod_LoadEntities (&header->lumps[LUMP_ENTITIES]);
|
|
||||||
Mod_LoadVertexes (&header->lumps[LUMP_VERTEXES]);
|
Mod_LoadVertexes (&header->lumps[LUMP_VERTEXES]);
|
||||||
Mod_LoadEdges (&header->lumps[LUMP_EDGES]);
|
Mod_LoadEdges (&header->lumps[LUMP_EDGES]);
|
||||||
Mod_LoadSurfedges (&header->lumps[LUMP_SURFEDGES]);
|
Mod_LoadSurfedges (&header->lumps[LUMP_SURFEDGES]);
|
||||||
|
Mod_LoadTextures (&header->lumps[LUMP_TEXTURES]);
|
||||||
// Mod_LoadTextures (&header->lumps[LUMP_TEXTURES]);
|
Mod_LoadLighting (&header->lumps[LUMP_LIGHTING]);
|
||||||
// Mod_LoadLighting (&header->lumps[LUMP_LIGHTING]);
|
|
||||||
|
|
||||||
HL_Mod_LoadTextures (&header->lumps[LUMP_TEXTURES]);
|
|
||||||
HL_Mod_LoadLighting (&header->lumps[LUMP_LIGHTING]);
|
|
||||||
|
|
||||||
Mod_LoadPlanes (&header->lumps[LUMP_PLANES]);
|
Mod_LoadPlanes (&header->lumps[LUMP_PLANES]);
|
||||||
Mod_LoadTexinfo (&header->lumps[LUMP_TEXINFO]);
|
Mod_LoadTexinfo (&header->lumps[LUMP_TEXINFO]);
|
||||||
Mod_LoadFaces (&header->lumps[LUMP_FACES]);
|
Mod_LoadFaces (&header->lumps[LUMP_FACES]);
|
||||||
|
@ -1225,7 +1212,7 @@ void Mod_LoadBrushModel (model_t *mod, void *buffer)
|
||||||
Mod_LoadLeafs (&header->lumps[LUMP_LEAFS]);
|
Mod_LoadLeafs (&header->lumps[LUMP_LEAFS]);
|
||||||
Mod_LoadNodes (&header->lumps[LUMP_NODES]);
|
Mod_LoadNodes (&header->lumps[LUMP_NODES]);
|
||||||
Mod_LoadClipnodes (&header->lumps[LUMP_CLIPNODES]);
|
Mod_LoadClipnodes (&header->lumps[LUMP_CLIPNODES]);
|
||||||
|
Mod_LoadEntities (&header->lumps[LUMP_ENTITIES]);
|
||||||
Mod_LoadSubmodels (&header->lumps[LUMP_MODELS]);
|
Mod_LoadSubmodels (&header->lumps[LUMP_MODELS]);
|
||||||
|
|
||||||
Mod_MakeHull0 ();
|
Mod_MakeHull0 ();
|
||||||
|
|
|
@ -243,7 +243,7 @@ void R_Init (void)
|
||||||
r_speeds = Cvar_Get("r_speeds", "0", CVAR_NONE, "None");
|
r_speeds = Cvar_Get("r_speeds", "0", CVAR_NONE, "None");
|
||||||
r_netgraph = Cvar_Get("r_netgraph", "0", CVAR_NONE, "None");
|
r_netgraph = Cvar_Get("r_netgraph", "0", CVAR_NONE, "None");
|
||||||
|
|
||||||
gl_clear = Cvar_Get("gl_clear", "1", CVAR_NONE, "None");
|
gl_clear = Cvar_Get("gl_clear", "0", CVAR_NONE, "None");
|
||||||
gl_texsort = Cvar_Get("gl_texsort", "1", CVAR_NONE, "None");
|
gl_texsort = Cvar_Get("gl_texsort", "1", CVAR_NONE, "None");
|
||||||
|
|
||||||
if (gl_mtexable)
|
if (gl_mtexable)
|
||||||
|
|
|
@ -686,42 +686,6 @@ void R_BlendLightmaps (void)
|
||||||
glDepthMask (1); // back to normal Z buffering
|
glDepthMask (1); // back to normal Z buffering
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ender: Half-Life BSP loading
|
|
||||||
void R_RenderBrushPolyTransparent (msurface_t *fa)
|
|
||||||
{
|
|
||||||
texture_t *t;
|
|
||||||
|
|
||||||
glEnable(GL_ALPHA_TEST);
|
|
||||||
glAlphaFunc(GL_GEQUAL, 0.05f);
|
|
||||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
|
||||||
|
|
||||||
|
|
||||||
c_brush_polys++;
|
|
||||||
|
|
||||||
if (fa->flags & SURF_DRAWSKY)
|
|
||||||
{ // warp texture, no lightmaps
|
|
||||||
EmitBothSkyLayers (fa);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
t = R_TextureAnimation (fa->texinfo->texture);
|
|
||||||
GL_Bind (t->gl_texturenum);
|
|
||||||
|
|
||||||
if (fa->flags & SURF_DRAWTURB)
|
|
||||||
{ // warp texture, no lightmaps
|
|
||||||
EmitWaterPolys (fa);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fa->flags & SURF_UNDERWATER)
|
|
||||||
DrawGLWaterPoly (fa->polys);
|
|
||||||
else
|
|
||||||
DrawGLPoly (fa->polys);
|
|
||||||
|
|
||||||
glDisable(GL_ALPHA_TEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
R_RenderBrushPoly
|
R_RenderBrushPoly
|
||||||
|
@ -735,11 +699,6 @@ void R_RenderBrushPoly (msurface_t *fa)
|
||||||
glRect_t *theRect;
|
glRect_t *theRect;
|
||||||
int smax, tmax;
|
int smax, tmax;
|
||||||
|
|
||||||
if (fa->texinfo->texture->transparent) {
|
|
||||||
R_RenderBrushPolyTransparent(fa);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
c_brush_polys++;
|
c_brush_polys++;
|
||||||
|
|
||||||
if (fa->flags & SURF_DRAWSKY)
|
if (fa->flags & SURF_DRAWSKY)
|
||||||
|
|
122
source/gl_warp.c
122
source/gl_warp.c
|
@ -332,18 +332,18 @@ void EmitBothSkyLayers (msurface_t *fa)
|
||||||
=================================================================
|
=================================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//byte *pcx_rgb;
|
byte *pcx_rgb;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
============
|
============
|
||||||
LoadPCX
|
LoadPCX
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
byte *LoadPCX (FILE *f)
|
void LoadPCX (FILE *f)
|
||||||
{
|
{
|
||||||
pcx_t *pcx, pcxbuf;
|
pcx_t *pcx, pcxbuf;
|
||||||
byte palette[768];
|
byte palette[768];
|
||||||
byte *pix, *pcx_rgb;
|
byte *pix;
|
||||||
int x, y;
|
int x, y;
|
||||||
int dataByte, runLength;
|
int dataByte, runLength;
|
||||||
int count;
|
int count;
|
||||||
|
@ -363,7 +363,7 @@ byte *LoadPCX (FILE *f)
|
||||||
|| pcx->ymax >= 256)
|
|| pcx->ymax >= 256)
|
||||||
{
|
{
|
||||||
Con_Printf ("Bad pcx file\n");
|
Con_Printf ("Bad pcx file\n");
|
||||||
return NULL;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// seek to palette
|
// seek to palette
|
||||||
|
@ -401,8 +401,6 @@ byte *LoadPCX (FILE *f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return pcx_rgb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -423,7 +421,7 @@ typedef struct _TargaHeader {
|
||||||
|
|
||||||
|
|
||||||
TargaHeader targa_header;
|
TargaHeader targa_header;
|
||||||
//byte *targa_rgba;
|
byte *targa_rgba;
|
||||||
|
|
||||||
int fgetLittleShort (FILE *f)
|
int fgetLittleShort (FILE *f)
|
||||||
{
|
{
|
||||||
|
@ -453,13 +451,12 @@ int fgetLittleLong (FILE *f)
|
||||||
LoadTGA
|
LoadTGA
|
||||||
=============
|
=============
|
||||||
*/
|
*/
|
||||||
byte *LoadTGA (FILE *fin)
|
void LoadTGA (FILE *fin)
|
||||||
{
|
{
|
||||||
int columns, rows, numPixels;
|
int columns, rows, numPixels;
|
||||||
byte *pixbuf;
|
byte *pixbuf;
|
||||||
int row, column;
|
int row, column;
|
||||||
unsigned char red = 0, green = 0, blue = 0, alphabyte = 0;
|
unsigned char red = 0, green = 0, blue = 0, alphabyte = 0;
|
||||||
byte *targa_rgba;
|
|
||||||
|
|
||||||
targa_header.id_length = fgetc(fin);
|
targa_header.id_length = fgetc(fin);
|
||||||
targa_header.colormap_type = fgetc(fin);
|
targa_header.colormap_type = fgetc(fin);
|
||||||
|
@ -600,7 +597,6 @@ byte *LoadTGA (FILE *fin)
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(fin);
|
fclose(fin);
|
||||||
return targa_rgba;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -614,7 +610,6 @@ void R_LoadSkys (char * skyname)
|
||||||
int i;
|
int i;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char name[64];
|
char name[64];
|
||||||
byte *data;
|
|
||||||
|
|
||||||
if (stricmp (skyname, "none") == 0)
|
if (stricmp (skyname, "none") == 0)
|
||||||
{
|
{
|
||||||
|
@ -634,13 +629,13 @@ void R_LoadSkys (char * skyname)
|
||||||
skyloaded = false;
|
skyloaded = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
data = LoadTGA (f);
|
LoadTGA (f);
|
||||||
// LoadPCX (f);
|
// LoadPCX (f);
|
||||||
|
|
||||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
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, pcx_rgb);
|
// glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, pcx_rgb);
|
||||||
|
|
||||||
free (data);
|
free (targa_rgba);
|
||||||
// free (pcx_rgb);
|
// free (pcx_rgb);
|
||||||
|
|
||||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
@ -1001,14 +996,14 @@ void R_DrawSkyBox (void)
|
||||||
//===============================================================
|
//===============================================================
|
||||||
|
|
||||||
/*
|
/*
|
||||||
R_InitSky
|
=============
|
||||||
|
R_InitSky
|
||||||
|
|
||||||
A sky texture is 256*128, with the right side being a masked overlay
|
A sky texture is 256*128, with the right side being a masked overlay
|
||||||
|
==============
|
||||||
*/
|
*/
|
||||||
void
|
void R_InitSky (texture_t *mt)
|
||||||
R_InitSky (texture_t *mt)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
int i, j, p;
|
int i, j, p;
|
||||||
byte *src;
|
byte *src;
|
||||||
unsigned trans[128*128];
|
unsigned trans[128*128];
|
||||||
|
@ -1022,8 +1017,9 @@ R_InitSky (texture_t *mt)
|
||||||
// a fringe on the top level
|
// a fringe on the top level
|
||||||
|
|
||||||
r = g = b = 0;
|
r = g = b = 0;
|
||||||
for (i=0 ; i<128 ; i++) {
|
for (i=0 ; i<128 ; i++)
|
||||||
for (j=0 ; j<128 ; j++) {
|
for (j=0 ; j<128 ; j++)
|
||||||
|
{
|
||||||
p = src[i*256 + j + 128];
|
p = src[i*256 + j + 128];
|
||||||
rgba = &d_8to24table[p];
|
rgba = &d_8to24table[p];
|
||||||
trans[(i*128) + j] = *rgba;
|
trans[(i*128) + j] = *rgba;
|
||||||
|
@ -1031,105 +1027,35 @@ R_InitSky (texture_t *mt)
|
||||||
g += ((byte *)rgba)[1];
|
g += ((byte *)rgba)[1];
|
||||||
b += ((byte *)rgba)[2];
|
b += ((byte *)rgba)[2];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
((byte *)&transpix)[0] = r/(128*128);
|
((byte *)&transpix)[0] = r/(128*128);
|
||||||
((byte *)&transpix)[1] = g/(128*128);
|
((byte *)&transpix)[1] = g/(128*128);
|
||||||
((byte *)&transpix)[2] = b/(128*128);
|
((byte *)&transpix)[2] = b/(128*128);
|
||||||
((byte *)&transpix)[3] = 0;
|
((byte *)&transpix)[3] = 0;
|
||||||
|
|
||||||
|
|
||||||
if (!solidskytexture)
|
if (!solidskytexture)
|
||||||
solidskytexture = texture_extension_number++;
|
solidskytexture = texture_extension_number++;
|
||||||
GL_Bind (solidskytexture);
|
GL_Bind (solidskytexture );
|
||||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, trans);
|
glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, trans);
|
||||||
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);
|
||||||
|
|
||||||
for (i=0 ; i<128 ; i++) {
|
|
||||||
for (j=0 ; j<128 ; j++) {
|
for (i=0 ; i<128 ; i++)
|
||||||
|
for (j=0 ; j<128 ; j++)
|
||||||
|
{
|
||||||
p = src[i*256 + j];
|
p = src[i*256 + j];
|
||||||
if (p == 0)
|
if (p == 0)
|
||||||
trans[(i*128) + j] = transpix;
|
trans[(i*128) + j] = transpix;
|
||||||
else
|
else
|
||||||
trans[(i*128) + j] = d_8to24table[p];
|
trans[(i*128) + j] = d_8to24table[p];
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ( !alphaskytexture )
|
if (!alphaskytexture)
|
||||||
alphaskytexture = texture_extension_number++;
|
alphaskytexture = texture_extension_number++;
|
||||||
GL_Bind(alphaskytexture);
|
GL_Bind(alphaskytexture);
|
||||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_alpha_format, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, trans);
|
glTexImage2D (GL_TEXTURE_2D, 0, gl_alpha_format, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, trans);
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
R_InitSky_32
|
|
||||||
|
|
||||||
A sky texture is 256*128, with the right side being a masked overlay
|
|
||||||
==============
|
|
||||||
*/
|
|
||||||
void R_InitSky_32 (byte *src, int bytesperpixel)
|
|
||||||
{
|
|
||||||
int i, j, p;
|
|
||||||
unsigned trans[128*128];
|
|
||||||
unsigned transpix;
|
|
||||||
int r, g, b;
|
|
||||||
unsigned *rgba;
|
|
||||||
|
|
||||||
if (bytesperpixel == 4) {
|
|
||||||
for (i = 0;i < 128;i++)
|
|
||||||
for (j = 0;j < 128;j++)
|
|
||||||
trans[(i*128) + j] = src[i*256+j+128];
|
|
||||||
} else {
|
|
||||||
// make an average value for the back to avoid
|
|
||||||
// a fringe on the top level
|
|
||||||
r = g = b = 0;
|
|
||||||
for (i=0 ; i<128 ; i++)
|
|
||||||
for (j=0 ; j<128 ; j++) {
|
|
||||||
p = src[i*256 + j + 128];
|
|
||||||
rgba = &d_8to24table[p];
|
|
||||||
trans[(i*128) + j] = *rgba;
|
|
||||||
r += ((byte *)rgba)[0];
|
|
||||||
g += ((byte *)rgba)[1];
|
|
||||||
b += ((byte *)rgba)[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
((byte *)&transpix)[0] = r/(128*128);
|
|
||||||
((byte *)&transpix)[1] = g/(128*128);
|
|
||||||
((byte *)&transpix)[2] = b/(128*128);
|
|
||||||
((byte *)&transpix)[3] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!solidskytexture)
|
|
||||||
solidskytexture = texture_extension_number++;
|
|
||||||
|
|
||||||
GL_Bind (solidskytexture );
|
|
||||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, trans);
|
|
||||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
|
|
||||||
if (bytesperpixel == 4) {
|
|
||||||
for (i = 0;i < 128;i++)
|
|
||||||
for (j = 0;j < 128;j++)
|
|
||||||
trans[(i*128) + j] = src[i*256+j];
|
|
||||||
} else {
|
|
||||||
for (i=0 ; i<128 ; i++)
|
|
||||||
for (j=0 ; j<128 ; j++) {
|
|
||||||
p = src[i*256 + j];
|
|
||||||
if (p == 0)
|
|
||||||
trans[(i*128) + j] = transpix;
|
|
||||||
else
|
|
||||||
trans[(i*128) + j] = d_8to24table[p];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!alphaskytexture)
|
|
||||||
alphaskytexture = texture_extension_number++;
|
|
||||||
|
|
||||||
GL_Bind(alphaskytexture);
|
|
||||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_alpha_format, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, trans);
|
|
||||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
}
|
|
||||||
|
|
481
source/hl_bsp.c
481
source/hl_bsp.c
|
@ -1,481 +0,0 @@
|
||||||
// Halflife BSP Loading
|
|
||||||
// Hack #1:
|
|
||||||
// Use this LoadLighting instead of the existing one in gl_model.c
|
|
||||||
// Hack #2:
|
|
||||||
// Use this LoadTexture instead of the existing one in gl_model.c
|
|
||||||
// Hack #?:
|
|
||||||
// Add int lhcsum; to gltexture_t in gl_draw.c
|
|
||||||
// Hack #4:
|
|
||||||
// save bspversion in 'int bspversion;'. Allow 30.
|
|
||||||
// Hack #5:
|
|
||||||
// New hl_wad.c
|
|
||||||
// Hack #6:
|
|
||||||
// In gl_model.h, texture_s, add "int transparent;"
|
|
||||||
// Hack #7:
|
|
||||||
// LoadEntities:
|
|
||||||
// if (bspversion > 29) // hlbsp
|
|
||||||
// CL_ParseEntityLump(loadmodel->entities);
|
|
||||||
//
|
|
||||||
// Hack #8:
|
|
||||||
// Top of GL_RenderBrushPoly (gl_rsurf.c - and add the function :)
|
|
||||||
// if (fa->texinfo->texture->transparent) {
|
|
||||||
// R_RenderBrushPolyTransparent(fa);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Hack #9: (mod_loadfaces)
|
|
||||||
// if (i == -1)
|
|
||||||
// out->samples = NULL;
|
|
||||||
// else if (bspversion > 29)
|
|
||||||
// out->samples = loadmodel->lightdata + i;
|
|
||||||
// else
|
|
||||||
// out->samples = loadmodel->lightdata + (i * 3);
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
#include <math.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "bothdefs.h" // needed by: common.h, net.h, client.h
|
|
||||||
#include "qendian.h"
|
|
||||||
#include "msg.h"
|
|
||||||
#include "bspfile.h" // needed by: glquake.h
|
|
||||||
#include "vid.h"
|
|
||||||
#include "sys.h"
|
|
||||||
#include "zone.h" // needed by: client.h, gl_model.h
|
|
||||||
#include "mathlib.h" // needed by: protocol.h, render.h, client.h,
|
|
||||||
// modelgen.h, glmodel.h
|
|
||||||
#include "wad.h"
|
|
||||||
#include "draw.h"
|
|
||||||
#include "cvar.h"
|
|
||||||
#include "crc.h"
|
|
||||||
#include "net.h" // needed by: client.h
|
|
||||||
#include "protocol.h" // needed by: client.h
|
|
||||||
#include "cmd.h"
|
|
||||||
#include "sbar.h"
|
|
||||||
#include "render.h" // needed by: client.h, gl_model.h, glquake.h
|
|
||||||
#include "client.h" // need cls in this file
|
|
||||||
#include "model.h" // needed by: glquake.h
|
|
||||||
#include "console.h"
|
|
||||||
#include "glquake.h"
|
|
||||||
#include "quakefs.h"
|
|
||||||
#include "checksum.h"
|
|
||||||
#include "hl.h"
|
|
||||||
|
|
||||||
|
|
||||||
int image_width;
|
|
||||||
int image_height;
|
|
||||||
|
|
||||||
// From gl_draw.c
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
int texnum;
|
|
||||||
char identifier[64];
|
|
||||||
int width, height;
|
|
||||||
qboolean mipmap;
|
|
||||||
int lhcsum;
|
|
||||||
} gltexture_t;
|
|
||||||
|
|
||||||
extern int bspversion;
|
|
||||||
extern model_t *loadmodel;
|
|
||||||
extern char loadname[32];
|
|
||||||
extern byte *mod_base;
|
|
||||||
extern gltexture_t gltextures[];
|
|
||||||
extern int numgltextures;
|
|
||||||
|
|
||||||
int HL_LoadTexture (char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha);
|
|
||||||
|
|
||||||
typedef struct miptex_hls
|
|
||||||
{
|
|
||||||
char name[16];
|
|
||||||
unsigned width, height;
|
|
||||||
char junk[16];
|
|
||||||
} miptex_hl;
|
|
||||||
|
|
||||||
void HL_Mod_LoadLighting (lump_t *l)
|
|
||||||
{
|
|
||||||
if (!l->filelen)
|
|
||||||
{
|
|
||||||
loadmodel->lightdata = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bspversion > 29) { // Load coloured lighting data
|
|
||||||
loadmodel->lightdata = Hunk_AllocName ( l->filelen, loadname);
|
|
||||||
memcpy (loadmodel->lightdata, mod_base + l->fileofs, l->filelen);
|
|
||||||
} else { // Expand white lighting data
|
|
||||||
byte *in, *out, d;
|
|
||||||
int i;
|
|
||||||
Con_DPrintf("Converting lightmap data\n");
|
|
||||||
loadmodel->lightdata = Hunk_AllocName (l->filelen*3, loadname);
|
|
||||||
in = loadmodel->lightdata + l->filelen*2; // place the file at the end, so it will not be overwritten until the very last write
|
|
||||||
out = loadmodel->lightdata;
|
|
||||||
memcpy (in, mod_base + l->fileofs, l->filelen);
|
|
||||||
for (i = 0;i < l->filelen;i++) {
|
|
||||||
d = *in++;
|
|
||||||
*out++ = d;
|
|
||||||
*out++ = d;
|
|
||||||
*out++ = d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
byte* loadimagepixels (char* filename, qboolean complain, int matchwidth, int matchheight)
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
char basename[128], name[128];
|
|
||||||
byte *image_rgba;
|
|
||||||
COM_StripExtension(filename, basename); // strip the extension to allow TGA skins on Q2 models despite the .pcx in the skin name
|
|
||||||
sprintf (name, "%s.tga", basename);
|
|
||||||
COM_FOpenFile (name, &f);
|
|
||||||
if (f)
|
|
||||||
return LoadTGA (f);
|
|
||||||
//return LoadTGA (f, matchwidth, matchheight);
|
|
||||||
sprintf (name, "%s.pcx", basename);
|
|
||||||
COM_FOpenFile (name, &f);
|
|
||||||
if (f)
|
|
||||||
return LoadPCX (f);
|
|
||||||
//return LoadPCX (f, matchwidth, matchheight);
|
|
||||||
if ((image_rgba = W_GetTexture(basename, matchwidth, matchheight)))
|
|
||||||
return image_rgba;
|
|
||||||
if (complain)
|
|
||||||
Con_Printf ("Couldn't load %s.tga or .pcx\n", filename);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HL_Mod_LoadTextures (lump_t *l)
|
|
||||||
{
|
|
||||||
int i, j, num, max, altmax, freeimage, transparent, bytesperpixel;
|
|
||||||
miptex_t *mt;
|
|
||||||
texture_t *tx, *tx2;
|
|
||||||
texture_t *anims[10];
|
|
||||||
texture_t *altanims[10];
|
|
||||||
dmiptexlump_t *m;
|
|
||||||
byte *data;
|
|
||||||
char imagename[32];
|
|
||||||
|
|
||||||
if (!l->filelen)
|
|
||||||
{
|
|
||||||
loadmodel->textures = NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
m = (dmiptexlump_t *)(mod_base + l->fileofs);
|
|
||||||
m->nummiptex = LittleLong (m->nummiptex);
|
|
||||||
loadmodel->numtextures = m->nummiptex;
|
|
||||||
loadmodel->textures = Hunk_AllocName (m->nummiptex * sizeof(*loadmodel->textures) , loadname);
|
|
||||||
|
|
||||||
for (i=0 ; i<m->nummiptex ; i++)
|
|
||||||
{
|
|
||||||
m->dataofs[i] = LittleLong(m->dataofs[i]);
|
|
||||||
if (m->dataofs[i] == -1)
|
|
||||||
continue;
|
|
||||||
mt = (miptex_t *)((byte *)m + m->dataofs[i]);
|
|
||||||
mt->width = LittleLong (mt->width);
|
|
||||||
mt->height = LittleLong (mt->height);
|
|
||||||
for (j=0 ; j<MIPLEVELS ; j++)
|
|
||||||
mt->offsets[j] = LittleLong (mt->offsets[j]);
|
|
||||||
|
|
||||||
if ( (mt->width & 15) || (mt->height & 15) )
|
|
||||||
Sys_Error ("Texture %s is not 16 aligned", mt->name);
|
|
||||||
|
|
||||||
// LordHavoc: rewriting the map texture loader for GLQuake
|
|
||||||
tx = Hunk_AllocName (sizeof(texture_t), loadname );
|
|
||||||
loadmodel->textures[i] = tx;
|
|
||||||
|
|
||||||
memcpy (tx->name, mt->name, sizeof(tx->name));
|
|
||||||
tx->width = mt->width;
|
|
||||||
tx->height = mt->height;
|
|
||||||
for (j=0 ; j<MIPLEVELS ; j++)
|
|
||||||
tx->offsets[j] = 0;
|
|
||||||
|
|
||||||
strcpy(imagename, "textures/");
|
|
||||||
strcat(imagename, mt->name);
|
|
||||||
|
|
||||||
freeimage = true;
|
|
||||||
transparent = false;
|
|
||||||
bytesperpixel = 4;
|
|
||||||
data = loadimagepixels(imagename, false, tx->width, tx->height);
|
|
||||||
if (!data) // no external texture found
|
|
||||||
{
|
|
||||||
strcpy(imagename, mt->name);
|
|
||||||
data = loadimagepixels(imagename, false, tx->width, tx->height);
|
|
||||||
if (!data) // no external texture found
|
|
||||||
{
|
|
||||||
freeimage = false;
|
|
||||||
bytesperpixel = 1;
|
|
||||||
if (mt->offsets[0]) // texture included
|
|
||||||
data = (byte *)((int) mt + mt->offsets[0]);
|
|
||||||
else // no texture, and no external replacement texture was found
|
|
||||||
{
|
|
||||||
tx->width = tx->height = 16;
|
|
||||||
data = (byte *)((int) r_notexture_mip + r_notexture_mip->offsets[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (j = 0;j < image_width*image_height;j++)
|
|
||||||
if (data[j*4+3] < 255)
|
|
||||||
{
|
|
||||||
transparent = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (j = 0;j < image_width*image_height;j++)
|
|
||||||
if (data[j*4+3] < 255)
|
|
||||||
{
|
|
||||||
transparent = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!strncmp(mt->name,"sky",3))
|
|
||||||
{
|
|
||||||
tx->transparent = false;
|
|
||||||
R_InitSky_32 (data, bytesperpixel);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tx->transparent = transparent;
|
|
||||||
texture_mode = GL_LINEAR_MIPMAP_NEAREST; //_LINEAR;
|
|
||||||
if (bytesperpixel == 1)
|
|
||||||
tx->gl_texturenum = GL_LoadTexture (tx->name, tx->width, tx->height, data, true, transparent);
|
|
||||||
else
|
|
||||||
tx->gl_texturenum = HL_LoadTexture (tx->name, tx->width, tx->height, data, true, transparent);
|
|
||||||
texture_mode = GL_LINEAR;
|
|
||||||
}
|
|
||||||
if (freeimage)
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// sequence the animations
|
|
||||||
//
|
|
||||||
for (i=0 ; i<m->nummiptex ; i++)
|
|
||||||
{
|
|
||||||
tx = loadmodel->textures[i];
|
|
||||||
if (!tx || tx->name[0] != '+')
|
|
||||||
continue;
|
|
||||||
if (tx->anim_next)
|
|
||||||
continue; // allready sequenced
|
|
||||||
|
|
||||||
// find the number of frames in the animation
|
|
||||||
memset (anims, 0, sizeof(anims));
|
|
||||||
memset (altanims, 0, sizeof(altanims));
|
|
||||||
|
|
||||||
max = tx->name[1];
|
|
||||||
altmax = 0;
|
|
||||||
if (max >= 'a' && max <= 'z')
|
|
||||||
max -= 'a' - 'A';
|
|
||||||
if (max >= '0' && max <= '9')
|
|
||||||
{
|
|
||||||
max -= '0';
|
|
||||||
altmax = 0;
|
|
||||||
anims[max] = tx;
|
|
||||||
max++;
|
|
||||||
}
|
|
||||||
else if (max >= 'A' && max <= 'J')
|
|
||||||
{
|
|
||||||
altmax = max - 'A';
|
|
||||||
max = 0;
|
|
||||||
altanims[altmax] = tx;
|
|
||||||
altmax++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Sys_Error ("Bad animating texture %s", tx->name);
|
|
||||||
|
|
||||||
for (j=i+1 ; j<m->nummiptex ; j++)
|
|
||||||
{
|
|
||||||
tx2 = loadmodel->textures[j];
|
|
||||||
if (!tx2 || tx2->name[0] != '+')
|
|
||||||
continue;
|
|
||||||
if (strcmp (tx2->name+2, tx->name+2))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
num = tx2->name[1];
|
|
||||||
if (num >= 'a' && num <= 'z')
|
|
||||||
num -= 'a' - 'A';
|
|
||||||
if (num >= '0' && num <= '9')
|
|
||||||
{
|
|
||||||
num -= '0';
|
|
||||||
anims[num] = tx2;
|
|
||||||
if (num+1 > max)
|
|
||||||
max = num + 1;
|
|
||||||
}
|
|
||||||
else if (num >= 'A' && num <= 'J')
|
|
||||||
{
|
|
||||||
num = num - 'A';
|
|
||||||
altanims[num] = tx2;
|
|
||||||
if (num+1 > altmax)
|
|
||||||
altmax = num+1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Sys_Error ("Bad animating texture %s", tx->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define ANIM_CYCLE 2
|
|
||||||
// link them all together
|
|
||||||
for (j=0 ; j<max ; j++)
|
|
||||||
{
|
|
||||||
tx2 = anims[j];
|
|
||||||
if (!tx2)
|
|
||||||
Sys_Error ("Missing frame %i of %s",j, tx->name);
|
|
||||||
tx2->anim_total = max * ANIM_CYCLE;
|
|
||||||
tx2->anim_min = j * ANIM_CYCLE;
|
|
||||||
tx2->anim_max = (j+1) * ANIM_CYCLE;
|
|
||||||
tx2->anim_next = anims[ (j+1)%max ];
|
|
||||||
if (altmax)
|
|
||||||
tx2->alternate_anims = altanims[0];
|
|
||||||
}
|
|
||||||
for (j=0 ; j<altmax ; j++)
|
|
||||||
{
|
|
||||||
tx2 = altanims[j];
|
|
||||||
if (!tx2)
|
|
||||||
Sys_Error ("Missing frame %i of %s",j, tx->name);
|
|
||||||
tx2->anim_total = altmax * ANIM_CYCLE;
|
|
||||||
tx2->anim_min = j * ANIM_CYCLE;
|
|
||||||
tx2->anim_max = (j+1) * ANIM_CYCLE;
|
|
||||||
tx2->anim_next = altanims[ (j+1)%altmax ];
|
|
||||||
if (max)
|
|
||||||
tx2->alternate_anims = anims[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CL_ParseEntityLump(char *entdata)
|
|
||||||
{
|
|
||||||
char *data;
|
|
||||||
char key[128], value[1024];
|
|
||||||
char wadname[128];
|
|
||||||
int i, j, k;
|
|
||||||
|
|
||||||
data = entdata;
|
|
||||||
if (!data)
|
|
||||||
return;
|
|
||||||
|
|
||||||
data = COM_Parse(data);
|
|
||||||
|
|
||||||
if (!data)
|
|
||||||
return; // valid exit
|
|
||||||
|
|
||||||
if (com_token[0] != '{')
|
|
||||||
return; // error
|
|
||||||
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
data = COM_Parse(data);
|
|
||||||
if (!data)
|
|
||||||
return; // error
|
|
||||||
if (com_token[0] == '}')
|
|
||||||
return; // since we're just parsing the first ent (worldspawn), exit
|
|
||||||
strcpy(key, com_token);
|
|
||||||
while (key[strlen(key)-1] == ' ') // remove trailing spaces
|
|
||||||
key[strlen(key)-1] = 0;
|
|
||||||
data = COM_Parse(data);
|
|
||||||
if (!data)
|
|
||||||
return; // error
|
|
||||||
strcpy(value, com_token);
|
|
||||||
// if (!strcmp("sky", key))
|
|
||||||
// strcpy(skyname, value);
|
|
||||||
// else if (!strcmp("skyboxsize", key))
|
|
||||||
// {
|
|
||||||
// r_skyboxsize.value = atof(value);
|
|
||||||
// if (r_skyboxsize.value < 64)
|
|
||||||
// r_skyboxsize.value = 64;
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (!strcmp("wad", key)) // for HalfLife maps
|
|
||||||
{
|
|
||||||
j = 0;
|
|
||||||
for (i = 0;i < 128;i++)
|
|
||||||
if (value[i] != ';' && value[i] != '\\' && value[i] != '/' && value[i] != ':')
|
|
||||||
break;
|
|
||||||
if (value[i])
|
|
||||||
{
|
|
||||||
for (;i < 128;i++)
|
|
||||||
{
|
|
||||||
// ignore path - the \\ check is for HalfLife... stupid windoze 'programmers'...
|
|
||||||
if (value[i] == '\\' || value[i] == '/' || value[i] == ':')
|
|
||||||
j = i+1;
|
|
||||||
else if (value[i] == ';' || value[i] == 0)
|
|
||||||
{
|
|
||||||
k = value[i];
|
|
||||||
value[i] = 0;
|
|
||||||
strcpy(wadname, "textures/");
|
|
||||||
Con_DPrintf("Wad: %s\n", &value[j]);
|
|
||||||
strcat(wadname, &value[j]);
|
|
||||||
W_LoadTextureWadFile (wadname, false);
|
|
||||||
j = i+1;
|
|
||||||
if (!k)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
================
|
|
||||||
GL_LoadTexture
|
|
||||||
================
|
|
||||||
*/
|
|
||||||
int lhcsumtable2[256];
|
|
||||||
int HL_LoadTexture (char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha)
|
|
||||||
{
|
|
||||||
int i, s, lhcsum;
|
|
||||||
gltexture_t *glt;
|
|
||||||
|
|
||||||
// LordHavoc: do a checksum to confirm the data really is the same as previous
|
|
||||||
// occurances. well this isn't exactly a checksum, it's better than that but
|
|
||||||
// not following any standards.
|
|
||||||
lhcsum = 0;
|
|
||||||
s = width*height*4;
|
|
||||||
for (i = 0;i < 256;i++) lhcsumtable2[i] = i + 1;
|
|
||||||
for (i = 0;i < s;i++) lhcsum += (lhcsumtable2[data[i] & 255]++);
|
|
||||||
|
|
||||||
// see if the texture is allready present
|
|
||||||
if (identifier[0])
|
|
||||||
{
|
|
||||||
for (i=0, glt=gltextures ; i<numgltextures ; i++, glt++)
|
|
||||||
{
|
|
||||||
if (!strcmp (identifier, glt->identifier))
|
|
||||||
{
|
|
||||||
// LordHavoc: everyone hates cache mismatchs, so I fixed it
|
|
||||||
if (lhcsum != glt->lhcsum || width != glt->width || height != glt->height)
|
|
||||||
{
|
|
||||||
Con_DPrintf("GL_LoadTexture: cache mismatch, replacing old texture\n");
|
|
||||||
goto HL_LoadTexture_setup; // drop out with glt pointing to the texture to replace
|
|
||||||
}
|
|
||||||
return glt->texnum;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
glt = &gltextures[numgltextures];
|
|
||||||
numgltextures++;
|
|
||||||
|
|
||||||
strcpy (glt->identifier, identifier);
|
|
||||||
glt->texnum = texture_extension_number;
|
|
||||||
texture_extension_number++;
|
|
||||||
// LordHavoc: label to drop out of the loop into the setup code
|
|
||||||
HL_LoadTexture_setup:
|
|
||||||
glt->lhcsum = lhcsum; // LordHavoc: used to verify textures are identical
|
|
||||||
glt->width = width;
|
|
||||||
glt->height = height;
|
|
||||||
glt->mipmap = mipmap;
|
|
||||||
|
|
||||||
GL_Bind(glt->texnum);
|
|
||||||
GL_Upload32 ((unsigned *) data, width, height, mipmap, true);
|
|
||||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
|
||||||
|
|
||||||
return glt->texnum;
|
|
||||||
}
|
|
||||||
|
|
207
source/hl_wad.c
207
source/hl_wad.c
|
@ -1,207 +0,0 @@
|
||||||
/*
|
|
||||||
hl_wad.c
|
|
||||||
|
|
||||||
WAD loading support for WAD3 texture wads. By LordHavoc
|
|
||||||
|
|
||||||
Copyright (C) 1996-1997 Id Software, Inc.
|
|
||||||
|
|
||||||
This program 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.
|
|
||||||
|
|
||||||
This program 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 this program; if not, write to:
|
|
||||||
|
|
||||||
Free Software Foundation, Inc.
|
|
||||||
59 Temple Place - Suite 330
|
|
||||||
Boston, MA 02111-1307, USA
|
|
||||||
|
|
||||||
$Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "sys.h"
|
|
||||||
#include "wad.h"
|
|
||||||
#include "quakefs.h"
|
|
||||||
#include "qendian.h"
|
|
||||||
#include "console.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define TEXWAD_MAXIMAGES 8192
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char name[16];
|
|
||||||
FILE *file;
|
|
||||||
int position;
|
|
||||||
} texwadlump_t;
|
|
||||||
extern int image_width, image_height;
|
|
||||||
texwadlump_t texwadlump[TEXWAD_MAXIMAGES];
|
|
||||||
|
|
||||||
/*
|
|
||||||
====================
|
|
||||||
W_LoadTextureWadFile
|
|
||||||
====================
|
|
||||||
*/
|
|
||||||
void W_LoadTextureWadFile (char *filename, int complain)
|
|
||||||
{
|
|
||||||
lumpinfo_t *lumps, *lump_p;
|
|
||||||
wadinfo_t header;
|
|
||||||
unsigned i, j;
|
|
||||||
int infotableofs;
|
|
||||||
FILE *file;
|
|
||||||
int numlumps;
|
|
||||||
|
|
||||||
|
|
||||||
COM_FOpenFile (filename, &file);
|
|
||||||
if (!file)
|
|
||||||
{
|
|
||||||
if (complain)
|
|
||||||
Con_Printf ("W_LoadTextureWadFile: couldn't find %s", filename);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fread(&header, sizeof(wadinfo_t), 1, file) != 1)
|
|
||||||
{Con_Printf ("W_LoadTextureWadFile: unable to read wad header");return;}
|
|
||||||
|
|
||||||
if(header.identification[0] != 'W'
|
|
||||||
|| header.identification[1] != 'A'
|
|
||||||
|| header.identification[2] != 'D'
|
|
||||||
|| header.identification[3] != '3')
|
|
||||||
{Con_Printf ("W_LoadTextureWadFile: Wad file %s doesn't have WAD3 id\n",filename);return;}
|
|
||||||
|
|
||||||
numlumps = LittleLong(header.numlumps);
|
|
||||||
if (numlumps < 1 || numlumps > TEXWAD_MAXIMAGES)
|
|
||||||
{Con_Printf ("W_LoadTextureWadFile: invalid number of lumps (%i)\n", numlumps);return;}
|
|
||||||
infotableofs = LittleLong(header.infotableofs);
|
|
||||||
if (fseek(file, infotableofs, SEEK_SET))
|
|
||||||
{Con_Printf ("W_LoadTextureWadFile: unable to seek to lump table");return;}
|
|
||||||
if (!(lumps = malloc(sizeof(lumpinfo_t)*numlumps)))
|
|
||||||
{Con_Printf ("W_LoadTextureWadFile: unable to allocate temporary memory for lump table");return;}
|
|
||||||
|
|
||||||
if (fread(lumps, sizeof(lumpinfo_t), numlumps, file) != numlumps)
|
|
||||||
{Con_Printf ("W_LoadTextureWadFile: unable to read lump table");return;}
|
|
||||||
|
|
||||||
for (i=0, lump_p = lumps ; i<numlumps ; i++,lump_p++)
|
|
||||||
{
|
|
||||||
W_CleanupName (lump_p->name, lump_p->name);
|
|
||||||
for (j = 0;j < TEXWAD_MAXIMAGES;j++)
|
|
||||||
{
|
|
||||||
if (texwadlump[j].name[0]) // occupied slot, check the name
|
|
||||||
{
|
|
||||||
if (!strcmp(lump_p->name, texwadlump[j].name)) // name match, replace old one
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else // empty slot
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (j >= TEXWAD_MAXIMAGES)
|
|
||||||
break; // abort loading
|
|
||||||
W_CleanupName (lump_p->name, texwadlump[j].name);
|
|
||||||
texwadlump[j].file = file;
|
|
||||||
texwadlump[j].position = LittleLong(lump_p->filepos);
|
|
||||||
}
|
|
||||||
free(lumps);
|
|
||||||
// leaves the file open
|
|
||||||
}
|
|
||||||
|
|
||||||
byte *W_GetTexture(char *name, int matchwidth, int matchheight)
|
|
||||||
{
|
|
||||||
int i, c, datasize;
|
|
||||||
short colorcount;
|
|
||||||
FILE *file;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
char name[16];
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
int ofs[4];
|
|
||||||
} t;
|
|
||||||
byte pal[256][3], *indata, *outdata, *data;
|
|
||||||
for (i = 0;i < TEXWAD_MAXIMAGES;i++)
|
|
||||||
{
|
|
||||||
if (texwadlump[i].name[0])
|
|
||||||
{
|
|
||||||
if (!strcmp(name, texwadlump[i].name)) // found it
|
|
||||||
{
|
|
||||||
file = texwadlump[i].file;
|
|
||||||
if (fseek(file, texwadlump[i].position, SEEK_SET))
|
|
||||||
{Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
|
|
||||||
if (fread(&t, sizeof(t), 1, file) != 1)
|
|
||||||
{Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
|
|
||||||
image_width = LittleLong(t.width);
|
|
||||||
image_height = LittleLong(t.height);
|
|
||||||
if (matchwidth && image_width != matchwidth)
|
|
||||||
continue;
|
|
||||||
if (matchheight && image_height != matchheight)
|
|
||||||
continue;
|
|
||||||
if (image_width & 15 || image_height & 15)
|
|
||||||
{Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
|
|
||||||
|
|
||||||
// allocate space for expanded image,
|
|
||||||
// and load incoming image into upper area (overwritten as it expands)
|
|
||||||
if (!(data = outdata = malloc(image_width*image_height*4)))
|
|
||||||
{Con_Printf("W_GetTexture: out of memory");return NULL;}
|
|
||||||
indata = outdata + image_width*image_height*3;
|
|
||||||
datasize = image_width*image_height*85/64;
|
|
||||||
|
|
||||||
// read the image data
|
|
||||||
if (fseek(file, texwadlump[i].position + sizeof(t), SEEK_SET))
|
|
||||||
{Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
|
|
||||||
if (fread(indata, 1, image_width*image_height, file) != image_width*image_height)
|
|
||||||
{Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
|
|
||||||
|
|
||||||
// read the number of colors used (always 256)
|
|
||||||
if (fseek(file, texwadlump[i].position + sizeof(t) + datasize, SEEK_SET))
|
|
||||||
{Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
|
|
||||||
if (fread(&colorcount, 2, 1, file) != 1)
|
|
||||||
{Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
|
|
||||||
colorcount = LittleShort(colorcount);
|
|
||||||
|
|
||||||
// sanity checking
|
|
||||||
if (colorcount < 0) colorcount = 0;
|
|
||||||
if (colorcount > 256) colorcount = 256;
|
|
||||||
|
|
||||||
// read the palette
|
|
||||||
if (fread(&pal, 3, colorcount, file) != colorcount)
|
|
||||||
{Con_Printf("W_GetTexture: corrupt WAD3 file");return NULL;}
|
|
||||||
|
|
||||||
// expand the image to 32bit RGBA
|
|
||||||
for (i = 0;i < image_width*image_height;i++)
|
|
||||||
{
|
|
||||||
c = *indata++;
|
|
||||||
if (c == 255) // transparent color
|
|
||||||
{
|
|
||||||
*outdata++ = 0;
|
|
||||||
*outdata++ = 0;
|
|
||||||
*outdata++ = 0;
|
|
||||||
*outdata++ = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*outdata++ = pal[c][0];
|
|
||||||
*outdata++ = pal[c][1];
|
|
||||||
*outdata++ = pal[c][2];
|
|
||||||
*outdata++ = 255;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
image_width = image_height = 0;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
|
@ -1,14 +1,14 @@
|
||||||
include <win32.mak> # Microsoft VC6++
|
include <win32.mak> # Microsoft VC6++
|
||||||
#!include <winopt.mak> # Use to compile with Intel's compiler
|
#!include <winopt.mak> # Use to compile with Intel's compiler
|
||||||
|
|
||||||
all:client.exe
|
all:glclient.exe
|
||||||
|
|
||||||
INCPATH=E:\quakesrc\q1src\incs # Path to other includes (mgl, etc)
|
INCPATH=E:\quakesrc\q1src\incs # Path to other includes (mgl, etc)
|
||||||
MGLPATH=E:\quakesrc\q1src\libs # Path to other librarys (mgl)
|
MGLPATH=E:\quakesrc\q1src\libs # Path to other librarys (mgl)
|
||||||
DXPATH=E:\quakesrc\q1src\libs # Path to other librarys (DirectX)
|
DXPATH=E:\quakesrc\q1src\libs # Path to other librarys (DirectX)
|
||||||
|
|
||||||
LIBS=winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib $(DXPATH)\dinput.lib $(DXPATH)\dxguid.lib $(MGLPATH)\mgllt.lib
|
LIBS=winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib $(DXPATH)\dinput.lib $(DXPATH)\dxguid.lib $(MGLPATH)\mgllt.lib
|
||||||
NCFLAGS=/c /nologo /DWIN32 /D_WIN32 /I..\include /I..\include\win32\vc /I$(INCPATH) /MT /DHAVE_CONFIG_H /Ox /I..\include\win32
|
NCFLAGS=/c /nologo /DWIN32 /D_WIN32 /I..\include /I..\include\win32\vc /I$(INCPATH) /MT /DHAVE_CONFIG_H
|
||||||
COM_sources=\
|
COM_sources=\
|
||||||
net_chan.obj \
|
net_chan.obj \
|
||||||
net_com.obj \
|
net_com.obj \
|
||||||
|
@ -19,24 +19,8 @@ COM_sources=\
|
||||||
mathlib.obj \
|
mathlib.obj \
|
||||||
cvar.obj \
|
cvar.obj \
|
||||||
crc.obj \
|
crc.obj \
|
||||||
com.obj \
|
common.obj \
|
||||||
qargs.obj \
|
|
||||||
quakefs.obj \
|
|
||||||
quakeio.obj \
|
|
||||||
qendian.obj \
|
|
||||||
cmd.obj \
|
cmd.obj \
|
||||||
link.obj \
|
|
||||||
checksum.obj \
|
|
||||||
info.obj \
|
|
||||||
net_com.obj \
|
|
||||||
msg.obj \
|
|
||||||
sizebuf.obj \
|
|
||||||
va.obj \
|
|
||||||
fnmatch.obj \
|
|
||||||
dirent.obj \
|
|
||||||
buildnum.obj \
|
|
||||||
hl_wad.obj \
|
|
||||||
hl_bsp.obj \
|
|
||||||
model.obj
|
model.obj
|
||||||
|
|
||||||
CL_SW_sources=\
|
CL_SW_sources=\
|
||||||
|
@ -69,7 +53,6 @@ CL_SW_sources=\
|
||||||
r_vars.obj \
|
r_vars.obj \
|
||||||
r_view.obj \
|
r_view.obj \
|
||||||
screen.obj \
|
screen.obj \
|
||||||
sw_view.obj
|
|
||||||
|
|
||||||
CL_sources=\
|
CL_sources=\
|
||||||
cl_cmd.obj \
|
cl_cmd.obj \
|
||||||
|
@ -93,12 +76,10 @@ CL_sources=\
|
||||||
nonintel.obj \
|
nonintel.obj \
|
||||||
menu.obj \
|
menu.obj \
|
||||||
keys.obj \
|
keys.obj \
|
||||||
console.obj \
|
console.obj
|
||||||
cl_slist.obj \
|
|
||||||
cl_trans.obj
|
|
||||||
|
|
||||||
CL_platform=\
|
CL_platform=\
|
||||||
vid_mgl.obj \
|
vid_win.obj \
|
||||||
snd_win.obj \
|
snd_win.obj \
|
||||||
in_win.obj \
|
in_win.obj \
|
||||||
sys_win.obj \
|
sys_win.obj \
|
||||||
|
@ -122,7 +103,7 @@ CL_asm=\
|
||||||
# r_drawa.asm \
|
# r_drawa.asm \
|
||||||
# r_edgea.asm \
|
# r_edgea.asm \
|
||||||
# r_varsa.asm \
|
# r_varsa.asm \
|
||||||
sys_x86.obj
|
sys_wina.obj
|
||||||
# snd_mixa.asm \
|
# snd_mixa.asm \
|
||||||
# surf16.asm \
|
# surf16.asm \
|
||||||
# surf8.asm
|
# surf8.asm
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
!include <win32.mak> # Microsoft VC6++
|
include <win32.mak> # Microsoft VC6++
|
||||||
#!include <winopt.mak> # Use to compile with Intel's compiler
|
#!include <winopt.mak> # Use to compile with Intel's compiler
|
||||||
|
|
||||||
all:glclient.exe
|
all:glclient.exe
|
||||||
|
@ -8,7 +8,7 @@ MGLPATH=E:\quakesrc\q1src\libs # Path to other librarys (mgl)
|
||||||
DXPATH=E:\quakesrc\q1src\libs # Path to other librarys (DirectX)
|
DXPATH=E:\quakesrc\q1src\libs # Path to other librarys (DirectX)
|
||||||
|
|
||||||
LIBS=winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib $(DXPATH)\dinput.lib $(DXPATH)\dxguid.lib $(MGLPATH)\mgllt.lib glu32.lib opengl32.lib
|
LIBS=winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib $(DXPATH)\dinput.lib $(DXPATH)\dxguid.lib $(MGLPATH)\mgllt.lib glu32.lib opengl32.lib
|
||||||
NCFLAGS=/c /nologo /DWIN32 /D_WIN32 /I..\include /I..\include\win32\vc /I$(INCPATH) /MT /DHAVE_CONFIG_H -Ox /I..\include\win32
|
NCFLAGS=/c /nologo /DWIN32 /D_WIN32 /I..\include /I..\include\win32\vc /I$(INCPATH) /MT /DHAVE_CONFIG_H
|
||||||
|
|
||||||
COM_sources=\
|
COM_sources=\
|
||||||
net_chan.obj \
|
net_chan.obj \
|
||||||
|
@ -20,26 +20,10 @@ COM_sources=\
|
||||||
mathlib.obj \
|
mathlib.obj \
|
||||||
cvar.obj \
|
cvar.obj \
|
||||||
crc.obj \
|
crc.obj \
|
||||||
com.obj \
|
common.obj \
|
||||||
qargs.obj \
|
cmd.obj
|
||||||
quakefs.obj \
|
|
||||||
quakeio.obj \
|
|
||||||
qendian.obj \
|
|
||||||
cmd.obj \
|
|
||||||
link.obj \
|
|
||||||
checksum.obj \
|
|
||||||
info.obj \
|
|
||||||
net_com.obj \
|
|
||||||
msg.obj \
|
|
||||||
sizebuf.obj \
|
|
||||||
va.obj \
|
|
||||||
fnmatch.obj \
|
|
||||||
dirent.obj \
|
|
||||||
buildnum.obj \
|
|
||||||
|
|
||||||
CL_GL_sources=\
|
CL_GL_sources=\
|
||||||
hl_bsp.obj \
|
|
||||||
hl_wad.obj \
|
|
||||||
r_view.obj \
|
r_view.obj \
|
||||||
gl_draw.obj \
|
gl_draw.obj \
|
||||||
gl_mesh.obj \
|
gl_mesh.obj \
|
||||||
|
@ -71,6 +55,7 @@ CL_sources=\
|
||||||
cl_pred.obj \
|
cl_pred.obj \
|
||||||
cl_tent.obj \
|
cl_tent.obj \
|
||||||
cl_cam.obj \
|
cl_cam.obj \
|
||||||
|
model.obj \
|
||||||
wad.obj \
|
wad.obj \
|
||||||
snd_dma.obj \
|
snd_dma.obj \
|
||||||
snd_mem.obj \
|
snd_mem.obj \
|
||||||
|
@ -80,7 +65,7 @@ CL_sources=\
|
||||||
nonintel.obj \
|
nonintel.obj \
|
||||||
menu.obj \
|
menu.obj \
|
||||||
keys.obj \
|
keys.obj \
|
||||||
# vc6fix.obj \
|
vc6fix.obj \
|
||||||
console.obj
|
console.obj
|
||||||
|
|
||||||
CL_platform=\
|
CL_platform=\
|
||||||
|
@ -95,8 +80,8 @@ CL_asm=\
|
||||||
sys_x86.obj
|
sys_x86.obj
|
||||||
|
|
||||||
glclient.exe: $(COM_sources) $(CL_GL_sources) $(CL_sources) $(CL_platform) $(CL_asm)
|
glclient.exe: $(COM_sources) $(CL_GL_sources) $(CL_sources) $(CL_platform) $(CL_asm)
|
||||||
$(link) /nologo /subsystem:windows /incremental:yes /machine:I386 -out:glclient.exe *.obj $(LIBS)
|
$(link) /nologo /subsystem:windows /incremental:yes /machine:I386 -out:glclient.exe gl\*.obj $(LIBS)
|
||||||
|
|
||||||
.c.obj:
|
.c.obj:
|
||||||
$(cc) $(NCFLAGS) $*.c
|
$(cc) $(NCFLAGS) $*.c /Fogl\$*.obj
|
||||||
|
|
||||||
|
|
|
@ -3,12 +3,8 @@ include <win32.mak>
|
||||||
|
|
||||||
all:server.exe
|
all:server.exe
|
||||||
|
|
||||||
INCPATH=E:\quakesrc\q1src\incs # Path to other includes (mgl, etc)
|
LIBS=winmm.lib wsock32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib libc.lib
|
||||||
MGLPATH=E:\quakesrc\q1src\libs # Path to other librarys (mgl)
|
NCFLAGS=/c /nologo /DWIN32 /D_WIN32 /I..\include /I..\include\win32\vc /MT /DHAVE_CONFIG_H
|
||||||
DXPATH=E:\quakesrc\q1src\libs # Path to other librarys (DirectX)
|
|
||||||
|
|
||||||
LIBS=winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comctl32.lib wsock32.lib winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib $(DXPATH)\dinput.lib $(DXPATH)\dxguid.lib $(MGLPATH)\mgllt.lib
|
|
||||||
NCFLAGS=/c /nologo /DWIN32 /D_WIN32 /I..\include /I..\include\win32\vc /MT /DHAVE_CONFIG_H /I..\include\win32 /I$(INCPATH) /Zi
|
|
||||||
COM_sources=\
|
COM_sources=\
|
||||||
net_chan.obj \
|
net_chan.obj \
|
||||||
net_com.obj \
|
net_com.obj \
|
||||||
|
@ -19,22 +15,8 @@ COM_sources=\
|
||||||
mathlib.obj \
|
mathlib.obj \
|
||||||
cvar.obj \
|
cvar.obj \
|
||||||
crc.obj \
|
crc.obj \
|
||||||
com.obj \
|
common.obj \
|
||||||
qargs.obj \
|
|
||||||
quakefs.obj \
|
|
||||||
quakeio.obj \
|
|
||||||
qendian.obj \
|
|
||||||
cmd.obj \
|
cmd.obj \
|
||||||
link.obj \
|
|
||||||
checksum.obj \
|
|
||||||
info.obj \
|
|
||||||
net_com.obj \
|
|
||||||
msg.obj \
|
|
||||||
sizebuf.obj \
|
|
||||||
va.obj \
|
|
||||||
fnmatch.obj \
|
|
||||||
dirent.obj \
|
|
||||||
buildnum.obj \
|
|
||||||
model.obj
|
model.obj
|
||||||
|
|
||||||
SV_sources=\
|
SV_sources=\
|
||||||
|
@ -59,7 +41,7 @@ SV_sources=\
|
||||||
sv_cvar.obj
|
sv_cvar.obj
|
||||||
|
|
||||||
server.exe: $(COM_sources) $(SV_sources)
|
server.exe: $(COM_sources) $(SV_sources)
|
||||||
$(link) /nologo /subsystem:console /incremental:yes /machine:I386 -out:server.exe *.obj $(LIBS) /debug
|
$(link) /nologo /subsystem:console /incremental:yes /machine:I386 -out:server.exe *.obj $(LIBS)
|
||||||
|
|
||||||
.c.obj:
|
.c.obj:
|
||||||
$(cc) $(NCFLAGS) $*.c
|
$(cc) $(NCFLAGS) $*.c
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
#include "quakefs.h"
|
#include "quakefs.h"
|
||||||
#include "qendian.h"
|
#include "qendian.h"
|
||||||
#include "checksum.h"
|
#include "checksum.h"
|
||||||
#include "sys.h"
|
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -61,7 +60,7 @@ byte mod_novis[MAX_MAP_LEAFS/8];
|
||||||
#define MAX_MOD_KNOWN 512
|
#define MAX_MOD_KNOWN 512
|
||||||
model_t mod_known[MAX_MOD_KNOWN];
|
model_t mod_known[MAX_MOD_KNOWN];
|
||||||
int mod_numknown;
|
int mod_numknown;
|
||||||
extern int isServer;
|
|
||||||
unsigned *model_checksum;
|
unsigned *model_checksum;
|
||||||
texture_t *r_notexture_mip;
|
texture_t *r_notexture_mip;
|
||||||
cvar_t *gl_subdivide_size;
|
cvar_t *gl_subdivide_size;
|
||||||
|
@ -357,8 +356,7 @@ void Mod_LoadTextures (lump_t *l)
|
||||||
for (j=0 ; j<MIPLEVELS ; j++)
|
for (j=0 ; j<MIPLEVELS ; j++)
|
||||||
tx->offsets[j] = mt->offsets[j] + sizeof(texture_t) - sizeof(miptex_t);
|
tx->offsets[j] = mt->offsets[j] + sizeof(texture_t) - sizeof(miptex_t);
|
||||||
// the pixels immediately follow the structures
|
// the pixels immediately follow the structures
|
||||||
if (!isServer)
|
memcpy ( tx+1, mt+1, pixels);
|
||||||
memcpy ( tx+1, mt+1, pixels);
|
|
||||||
|
|
||||||
if (!strncmp(mt->name,"sky",3))
|
if (!strncmp(mt->name,"sky",3))
|
||||||
R_InitSky (tx);
|
R_InitSky (tx);
|
||||||
|
@ -1134,10 +1132,8 @@ void Mod_LoadBrushModel (model_t *mod, void *buffer)
|
||||||
header = (dheader_t *)buffer;
|
header = (dheader_t *)buffer;
|
||||||
|
|
||||||
i = LittleLong (header->version);
|
i = LittleLong (header->version);
|
||||||
if ((i != BSPVERSION) && (i != 30))
|
if (i != BSPVERSION)
|
||||||
SV_Error ("Mod_LoadBrushModel: %s has wrong version number (%i should be %i)", mod->name, i, BSPVERSION);
|
SV_Error ("Mod_LoadBrushModel: %s has wrong version number (%i should be %i)", mod->name, i, BSPVERSION);
|
||||||
if ((!isServer) && (i == 30))
|
|
||||||
Sys_Error ("Mod_LoadBrushModel: Software cannot load Half-Life maps.");
|
|
||||||
|
|
||||||
// swap all the lumps
|
// swap all the lumps
|
||||||
mod_base = (byte *)header;
|
mod_base = (byte *)header;
|
||||||
|
|
|
@ -793,40 +793,6 @@ SOURCE=.\gl_warp.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\hl_bsp.c
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "qw_client - Win32 Release"
|
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "qw_client - Win32 Debug"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "qw_client - Win32 GLDebug"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "qw_client - Win32 GLRelease"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\hl_wad.c
|
|
||||||
|
|
||||||
!IF "$(CFG)" == "qw_client - Win32 Release"
|
|
||||||
|
|
||||||
# PROP Exclude_From_Build 1
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "qw_client - Win32 Debug"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "qw_client - Win32 GLDebug"
|
|
||||||
|
|
||||||
!ELSEIF "$(CFG)" == "qw_client - Win32 GLRelease"
|
|
||||||
|
|
||||||
!ENDIF
|
|
||||||
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\in_win.c
|
SOURCE=.\in_win.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
#ifdef HAVE_STRINGS_H
|
#ifdef HAVE_STRINGS_H
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
int isServer = 1;
|
|
||||||
quakeparms_t host_parms;
|
quakeparms_t host_parms;
|
||||||
|
|
||||||
qboolean host_initialized; // true if into command execution (compatability)
|
qboolean host_initialized; // true if into command execution (compatability)
|
||||||
|
|
|
@ -152,8 +152,6 @@ typedef void (APIENTRY *lp3DFXFUNC) (int, int, int, int, int, const void*);
|
||||||
lp3DFXFUNC glColorTableEXT;
|
lp3DFXFUNC glColorTableEXT;
|
||||||
qboolean is8bit = false;
|
qboolean is8bit = false;
|
||||||
qboolean isPermedia = false;
|
qboolean isPermedia = false;
|
||||||
int gl_mtex_enum = TEXTURE0_SGIS;
|
|
||||||
qboolean gl_arb_mtex = false;
|
|
||||||
qboolean gl_mtexable = false;
|
qboolean gl_mtexable = false;
|
||||||
|
|
||||||
//====================================
|
//====================================
|
||||||
|
@ -614,9 +612,9 @@ void CheckMultiTextureExtensions(void)
|
||||||
{
|
{
|
||||||
Con_Printf ("GL_ARB_multitexture\n");
|
Con_Printf ("GL_ARB_multitexture\n");
|
||||||
qglMTexCoord2f =
|
qglMTexCoord2f =
|
||||||
(void *)wglGetProcAddress("glMultiTexCoord2fARB");
|
(void *)wglGetProcAddress("glMTexCoord2fARB");
|
||||||
qglSelectTexture =
|
qglSelectTexture =
|
||||||
(void *) wglGetProcAddress("glActiveTextureARB");
|
(void *)wglGetProcAddress("glSelectTextureARB");
|
||||||
gl_mtex_enum = GL_TEXTURE0_ARB;
|
gl_mtex_enum = GL_TEXTURE0_ARB;
|
||||||
gl_mtexable = true;
|
gl_mtexable = true;
|
||||||
gl_arb_mtex = true;
|
gl_arb_mtex = true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue