mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-29 07:02:12 +00:00
Trying to fix some leaks.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3547 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
ad3da01975
commit
e7ec40d0c8
23 changed files with 271 additions and 96 deletions
|
@ -83,10 +83,16 @@ qboolean CL_FilterModelindex(int modelindex, int frame)
|
|||
|
||||
//============================================================
|
||||
|
||||
void CL_FreeDlights(void)
|
||||
{
|
||||
rtlights_max = cl_maxdlights = 0;
|
||||
BZ_Free(cl_dlights);
|
||||
cl_dlights = NULL;
|
||||
}
|
||||
void CL_InitDlights(void)
|
||||
{
|
||||
rtlights_max = cl_maxdlights = RTL_FIRST;
|
||||
cl_dlights = BZ_Realloc(NULL, sizeof(*cl_dlights)*cl_maxdlights);
|
||||
cl_dlights = BZ_Realloc(cl_dlights, sizeof(*cl_dlights)*cl_maxdlights);
|
||||
memset(cl_dlights, 0, sizeof(*cl_dlights)*cl_maxdlights);
|
||||
}
|
||||
|
||||
|
@ -1556,6 +1562,11 @@ static void CL_TransitionPacketEntities(packet_entities_t *newpack, packet_entit
|
|||
VectorCopy(snew->origin, le->origin);
|
||||
VectorCopy(snew->angles, le->angles);
|
||||
|
||||
VectorCopy(snew->origin, le->oldorigin);
|
||||
VectorCopy(snew->angles, le->oldangle);
|
||||
VectorCopy(snew->origin, le->neworigin);
|
||||
VectorCopy(snew->angles, le->newangle);
|
||||
|
||||
le->orglerpdeltatime = 0.1;
|
||||
le->orglerpstarttime = oldpack->servertime;
|
||||
}
|
||||
|
|
|
@ -1166,12 +1166,7 @@ void CL_Disconnect (void)
|
|||
|
||||
if (cl.worldmodel)
|
||||
{
|
||||
#if defined(RUNTIMELIGHTING) && defined(GLQUAKE)
|
||||
extern model_t *lightmodel;
|
||||
lightmodel = NULL;
|
||||
#endif
|
||||
|
||||
cl.worldmodel->needload=true;
|
||||
Mod_ClearAll();
|
||||
cl.worldmodel = NULL;
|
||||
}
|
||||
|
||||
|
@ -3784,6 +3779,8 @@ void Host_Shutdown(void)
|
|||
S_Shutdown();
|
||||
IN_Shutdown ();
|
||||
R_ShutdownRenderer();
|
||||
CL_FreeDlights();
|
||||
M_Shutdown();
|
||||
#ifndef CLIENTONLY
|
||||
SV_Shutdown();
|
||||
#else
|
||||
|
|
|
@ -2104,7 +2104,11 @@ texid_t R_LoadHiResTexture(char *name, char *subpath, unsigned int flags)
|
|||
//now look in wad files. (halflife compatability)
|
||||
data = W_GetTexture(name, &image_width, &image_height, &alphaed);
|
||||
if (data)
|
||||
return R_LoadTexture32 (name, image_width, image_height, (unsigned*)data, flags);
|
||||
{
|
||||
tex = R_LoadTexture32 (name, image_width, image_height, (unsigned*)data, flags)
|
||||
BZ_Free(data);
|
||||
return tex;
|
||||
}
|
||||
return r_nulltex;
|
||||
}
|
||||
texid_t R_LoadReplacementTexture(char *name, char *subpath, unsigned int flags)
|
||||
|
|
|
@ -852,12 +852,30 @@ void M_DeInit_Internal (void)
|
|||
Cmd_RemoveCommand ("quickconnect");
|
||||
}
|
||||
|
||||
void M_Shutdown(void)
|
||||
{
|
||||
#ifdef MENU_DAT
|
||||
MP_Shutdown();
|
||||
#endif
|
||||
M_DeInit_Internal();
|
||||
}
|
||||
|
||||
void M_Reinit(void)
|
||||
{
|
||||
#ifdef MENU_DAT
|
||||
if (!MP_Init())
|
||||
#endif
|
||||
{
|
||||
M_Init_Internal();
|
||||
}
|
||||
}
|
||||
#warning ----------- move menu reload here --------------
|
||||
|
||||
void FPS_Preset_f(void);
|
||||
|
||||
//menu.dat is loaded later... after the video and everything is up.
|
||||
void M_Init (void)
|
||||
{
|
||||
M_Init_Internal();
|
||||
|
||||
Cmd_AddCommand("togglemenu", M_ToggleMenu_f);
|
||||
Cmd_AddCommand("closemenu", M_CloseMenu_f);
|
||||
|
@ -870,6 +888,8 @@ void M_Init (void)
|
|||
M_Serverlist_Init();
|
||||
#endif
|
||||
M_Script_Init();
|
||||
|
||||
M_Reinit();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -389,8 +389,7 @@ void M_DrawScalePic (int x, int y, int w, int h, mpic_t *pic);
|
|||
void M_FindKeysForCommand (char *command, int *twokeys);
|
||||
void M_UnbindCommand (char *command);
|
||||
|
||||
void MP_Shutdown (void);
|
||||
void MP_Init (void);
|
||||
qboolean MP_Init (void);
|
||||
qboolean MP_Toggle(void);
|
||||
void MP_Draw(void);
|
||||
void MP_RegisterCvarsAndCmds(void);
|
||||
|
|
|
@ -1709,7 +1709,6 @@ int menu_numbuiltins = sizeof(menu_builtins)/sizeof(menu_builtins[0]);
|
|||
|
||||
|
||||
|
||||
void M_Init_Internal (void);
|
||||
void M_DeInit_Internal (void);
|
||||
|
||||
int inmenuprogs;
|
||||
|
@ -1762,8 +1761,6 @@ void MP_Shutdown (void)
|
|||
|
||||
mouseusedforgui = false;
|
||||
|
||||
M_Init_Internal();
|
||||
|
||||
if (inmenuprogs) //something in the menu caused the problem, so...
|
||||
{
|
||||
inmenuprogs = 0;
|
||||
|
@ -1801,15 +1798,15 @@ void VARGS Menu_Abort (char *format, ...)
|
|||
}
|
||||
|
||||
double menutime;
|
||||
void MP_Init (void)
|
||||
qboolean MP_Init (void)
|
||||
{
|
||||
if (qrenderer == QR_NONE)
|
||||
{
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (forceqmenu.value)
|
||||
return;
|
||||
return false;
|
||||
|
||||
M_DeInit_Internal();
|
||||
|
||||
|
@ -1863,15 +1860,13 @@ void MP_Init (void)
|
|||
//failed to load or something
|
||||
// CloseProgs(menuprogs);
|
||||
// menuprogs = NULL;
|
||||
M_Init_Internal();
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
if (setjmp(mp_abort))
|
||||
{
|
||||
M_Init_Internal();
|
||||
Con_DPrintf("Failed to initialize menu.dat\n");
|
||||
inmenuprogs = false;
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
inmenuprogs++;
|
||||
|
||||
|
@ -1900,6 +1895,7 @@ void MP_Init (void)
|
|||
inmenuprogs--;
|
||||
|
||||
Con_DPrintf("Initialized menu.dat\n");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1923,7 +1919,7 @@ void MP_CoreDump_f(void)
|
|||
void MP_Reload_f(void)
|
||||
{
|
||||
MP_Shutdown();
|
||||
MP_Init();
|
||||
M_Init();
|
||||
}
|
||||
|
||||
void MP_RegisterCvarsAndCmds(void)
|
||||
|
|
|
@ -2674,6 +2674,18 @@ void Surf_DeInit(void)
|
|||
numlightmaps=0;
|
||||
}
|
||||
|
||||
void Surf_Clear(model_t *mod)
|
||||
{
|
||||
batch_t *b;
|
||||
while ((b = mod->batches))
|
||||
{
|
||||
mod->batches = b->next;
|
||||
|
||||
BZ_Free(b->mesh);
|
||||
Z_Free(b);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
GL_BuildLightmaps
|
||||
|
|
|
@ -1815,9 +1815,7 @@ void R_RestartRenderer_f (void)
|
|||
int i, j;
|
||||
rendererstate_t oldr;
|
||||
rendererstate_t newr;
|
||||
#ifdef MENU_DAT
|
||||
MP_Shutdown();
|
||||
#endif
|
||||
M_Shutdown();
|
||||
memset(&newr, 0, sizeof(newr));
|
||||
|
||||
TRACE(("dbg: R_RestartRenderer_f\n"));
|
||||
|
@ -1951,9 +1949,7 @@ TRACE(("dbg: R_RestartRenderer_f\n"));
|
|||
SCR_EndLoadingPlaque();
|
||||
|
||||
TRACE(("dbg: R_RestartRenderer_f success\n"));
|
||||
#ifdef MENU_DAT
|
||||
MP_Init();
|
||||
#endif
|
||||
M_Reinit();
|
||||
CL_InitDlights();
|
||||
}
|
||||
|
||||
|
|
|
@ -319,20 +319,6 @@ int Sys_EnumerateFiles (const char *gpath, const char *match, int (*func)(const
|
|||
|
||||
|
||||
int secbase;
|
||||
unsigned int Sys_Milliseconds (void)
|
||||
{
|
||||
struct timeval tp;
|
||||
struct timezone tzp;
|
||||
|
||||
gettimeofday(&tp, &tzp);
|
||||
|
||||
if (!secbase)
|
||||
{
|
||||
secbase = tp.tv_sec;
|
||||
return tp.tv_usec/1000;
|
||||
}
|
||||
return (tp.tv_sec - secbase)*1000 + tp.tv_usec/1000;
|
||||
}
|
||||
|
||||
double Sys_DoubleTime (void)
|
||||
{
|
||||
|
@ -350,6 +336,11 @@ double Sys_DoubleTime (void)
|
|||
return (tp.tv_sec - secbase) + tp.tv_usec/1000000.0;
|
||||
}
|
||||
|
||||
unsigned int Sys_Milliseconds (void)
|
||||
{
|
||||
return Sys_DoubleTime() * 1000;
|
||||
}
|
||||
|
||||
static void *game_library;
|
||||
|
||||
void Sys_UnloadGame(void)
|
||||
|
|
|
@ -387,7 +387,7 @@ void Cbuf_ExecuteLevel (int level)
|
|||
{
|
||||
i++;
|
||||
cmd_text[level].buf.cursize -= i;
|
||||
Q_memcpy (text, text+i, cmd_text[level].buf.cursize);
|
||||
memmove (text, text+i, cmd_text[level].buf.cursize);
|
||||
}
|
||||
|
||||
// execute the command line
|
||||
|
@ -521,7 +521,6 @@ void Cmd_Exec_f (void)
|
|||
else
|
||||
Q_strncpyz(name, Cmd_Argv(1), sizeof(name));
|
||||
|
||||
FS_LoadFile(name, &f);
|
||||
if (FS_LoadFile(name, &f) != -1)
|
||||
;
|
||||
else if (FS_LoadFile(va("%s.cfg", name), &f) != -1)
|
||||
|
|
|
@ -33,7 +33,6 @@ qboolean RMod_LoadSurfedges (lump_t *l);
|
|||
void RMod_LoadLighting (lump_t *l);
|
||||
|
||||
|
||||
void Q2BSP_SetHullFuncs(hull_t *hull);
|
||||
qboolean CM_Trace(model_t *model, int forcehullnum, int frame, vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, trace_t *trace);
|
||||
qboolean CM_NativeTrace(model_t *model, int forcehullnum, int frame, vec3_t start, vec3_t end, vec3_t mins, vec3_t maxs, unsigned int contents, trace_t *trace);
|
||||
unsigned int CM_NativeContents(struct model_s *model, int hulloverride, int frame, vec3_t p, vec3_t mins, vec3_t maxs);
|
||||
|
@ -3907,13 +3906,11 @@ q2cmodel_t *CM_LoadMap (char *name, char *filein, qboolean clientload, unsigned
|
|||
|
||||
mod->hulls[0].firstclipnode = map_cmodels[0].headnode;
|
||||
mod->hulls[0].available = true;
|
||||
Q2BSP_SetHullFuncs(&mod->hulls[0]);
|
||||
|
||||
for (j=1 ; j<MAX_MAP_HULLSM ; j++)
|
||||
{
|
||||
mod->hulls[j].firstclipnode = map_cmodels[0].headnode;
|
||||
mod->hulls[j].available = false;
|
||||
Q2BSP_SetHullFuncs(&mod->hulls[j]);
|
||||
}
|
||||
|
||||
for (i=1 ; i< loadmodel->numsubmodels ; i++)
|
||||
|
@ -3935,13 +3932,11 @@ q2cmodel_t *CM_LoadMap (char *name, char *filein, qboolean clientload, unsigned
|
|||
mod->hulls[j].available = true;
|
||||
mod->nummodelsurfaces = bm->numsurfaces;
|
||||
mod->firstmodelsurface = bm->firstsurface;
|
||||
Q2BSP_SetHullFuncs(&mod->hulls[0]);
|
||||
for (j=1 ; j<MAX_MAP_HULLSM ; j++)
|
||||
{
|
||||
mod->hulls[j].firstclipnode = bm->headnode;
|
||||
mod->hulls[j].lastclipnode = mod->numclipnodes-1;
|
||||
mod->hulls[j].available = false;
|
||||
Q2BSP_SetHullFuncs(&mod->hulls[j]);
|
||||
}
|
||||
|
||||
VectorCopy (bm->maxs, mod->maxs);
|
||||
|
@ -4063,7 +4058,6 @@ void CM_InitBoxHull (void)
|
|||
box_model.funcs.NativeTrace = CM_NativeTrace;
|
||||
|
||||
box_model.hulls[0].available = true;
|
||||
Q2BSP_SetHullFuncs(&box_model.hulls[0]);
|
||||
|
||||
box_model.nodes = Hunk_Alloc(sizeof(mnode_t)*6);
|
||||
box_planes = &map_planes[numplanes];
|
||||
|
@ -5691,11 +5685,6 @@ unsigned int Q2BSP_PointContents(model_t *mod, vec3_t p)
|
|||
|
||||
return ret;
|
||||
}
|
||||
void Q2BSP_SetHullFuncs(hull_t *hull)
|
||||
{
|
||||
// hull->funcs.HullPointContents = Q2BSP_HullPointContents;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ extern vec3_t vec3_origin;
|
|||
#define nanmask (255<<23)
|
||||
#define IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask)
|
||||
|
||||
#define FloatInterpolate(a, bness, b, c) (c) = (a)*(1-bness) + (b)*bness
|
||||
#define FloatInterpolate(a, bness, b, c) ((c) = (a) + (b - a)*bness)
|
||||
|
||||
#define DotProduct(x,y) ((x)[0]*(y)[0]+(x)[1]*(y)[1]+(x)[2]*(y)[2])
|
||||
#define VectorSubtract(a,b,c) do{(c)[0]=(a)[0]-(b)[0];(c)[1]=(a)[1]-(b)[1];(c)[2]=(a)[2]-(b)[2];}while(0)
|
||||
|
|
|
@ -46,8 +46,6 @@ void PM_InitBoxHull (void)
|
|||
box_hull.firstclipnode = 0;
|
||||
box_hull.lastclipnode = 5;
|
||||
|
||||
Q1BSP_SetHullFuncs(&box_hull);
|
||||
|
||||
for (i=0 ; i<6 ; i++)
|
||||
{
|
||||
box_clipnodes[i].planenum = i;
|
||||
|
|
|
@ -8,6 +8,21 @@
|
|||
Physics functions (common)
|
||||
*/
|
||||
|
||||
void Q1BSP_CheckHullNodes(hull_t *hull)
|
||||
{
|
||||
int num, c;
|
||||
dclipnode_t *node;
|
||||
for (num = hull->firstclipnode; num < hull->lastclipnode; num++)
|
||||
{
|
||||
node = hull->clipnodes + num;
|
||||
for (c = 0; c < 2; c++)
|
||||
if (node->children[c] >= 0)
|
||||
if (node->children[c] < hull->firstclipnode || node->children[c] > hull->lastclipnode)
|
||||
Sys_Error ("Q1BSP_CheckHull: bad node number");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#if !id386
|
||||
|
||||
/*
|
||||
|
@ -24,9 +39,6 @@ static int Q1_HullPointContents (hull_t *hull, int num, vec3_t p)
|
|||
|
||||
while (num >= 0)
|
||||
{
|
||||
if (num < hull->firstclipnode || num > hull->lastclipnode)
|
||||
Sys_Error ("SV_HullPointContents: bad node number");
|
||||
|
||||
node = hull->clipnodes + num;
|
||||
plane = hull->planes + node->planenum;
|
||||
|
||||
|
@ -49,6 +61,153 @@ int VARGS Q1_HullPointContents (hull_t *hull, int num, vec3_t p);
|
|||
|
||||
|
||||
#define DIST_EPSILON (0.03125)
|
||||
#if 1
|
||||
enum
|
||||
{
|
||||
rht_solid,
|
||||
rht_empty,
|
||||
rht_impact
|
||||
};
|
||||
vec3_t rht_start, rht_end;
|
||||
static int Q1BSP_RecursiveHullTrace (hull_t *hull, int num, float p1f, float p2f, vec3_t p1, vec3_t p2, trace_t *trace)
|
||||
{
|
||||
dclipnode_t *node;
|
||||
mplane_t *plane;
|
||||
float t1, t2;
|
||||
vec3_t mid;
|
||||
int side;
|
||||
float midf;
|
||||
int rht;
|
||||
|
||||
reenter:
|
||||
|
||||
if (num < 0)
|
||||
{
|
||||
/*hit a leaf*/
|
||||
if (num == Q1CONTENTS_SOLID)
|
||||
{
|
||||
if (trace->allsolid)
|
||||
trace->startsolid = true;
|
||||
return rht_solid;
|
||||
}
|
||||
else
|
||||
{
|
||||
trace->allsolid = false;
|
||||
if (num == Q1CONTENTS_EMPTY)
|
||||
trace->inopen = true;
|
||||
else
|
||||
trace->inwater = true;
|
||||
return rht_empty;
|
||||
}
|
||||
}
|
||||
|
||||
/*its a node*/
|
||||
|
||||
/*get the node info*/
|
||||
node = hull->clipnodes + num;
|
||||
plane = hull->planes + node->planenum;
|
||||
|
||||
if (plane->type < 3)
|
||||
{
|
||||
t1 = p1[plane->type] - plane->dist;
|
||||
t2 = p2[plane->type] - plane->dist;
|
||||
}
|
||||
else
|
||||
{
|
||||
t1 = DotProduct (plane->normal, p1) - plane->dist;
|
||||
t2 = DotProduct (plane->normal, p2) - plane->dist;
|
||||
}
|
||||
|
||||
/*if its completely on one side, resume on that side*/
|
||||
if (t1 >= 0 && t2 >= 0)
|
||||
{
|
||||
//return Q1BSP_RecursiveHullTrace (hull, node->children[0], p1f, p2f, p1, p2, trace);
|
||||
num = node->children[0];
|
||||
goto reenter;
|
||||
}
|
||||
if (t1 < 0 && t2 < 0)
|
||||
{
|
||||
//return Q1BSP_RecursiveHullTrace (hull, node->children[1], p1f, p2f, p1, p2, trace);
|
||||
num = node->children[1];
|
||||
goto reenter;
|
||||
}
|
||||
|
||||
if (plane->type < 3)
|
||||
{
|
||||
t1 = rht_start[plane->type] - plane->dist;
|
||||
t2 = rht_end[plane->type] - plane->dist;
|
||||
}
|
||||
else
|
||||
{
|
||||
t1 = DotProduct (plane->normal, rht_start) - plane->dist;
|
||||
t2 = DotProduct (plane->normal, rht_end) - plane->dist;
|
||||
}
|
||||
|
||||
side = t1 < 0;
|
||||
|
||||
midf = t1 / (t1 - t2);
|
||||
if (midf < p1f) midf = p1f;
|
||||
if (midf > p2f) midf = p2f;
|
||||
VectorInterpolate(rht_start, midf, rht_end, mid);
|
||||
|
||||
rht = Q1BSP_RecursiveHullTrace(hull, node->children[side], p1f, midf, p1, mid, trace);
|
||||
if (rht != rht_empty)
|
||||
return rht;
|
||||
rht = Q1BSP_RecursiveHullTrace(hull, node->children[side^1], midf, p2f, mid, p2, trace);
|
||||
if (rht != rht_solid)
|
||||
return rht;
|
||||
|
||||
trace->fraction = midf;
|
||||
if (side)
|
||||
{
|
||||
/*we impacted the back of the node, so flip the plane*/
|
||||
trace->plane.dist = -plane->dist;
|
||||
VectorNegate(plane->normal, trace->plane.normal);
|
||||
midf = (t1 + DIST_EPSILON) / (t1 - t2);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*we impacted the front of the node*/
|
||||
trace->plane.dist = plane->dist;
|
||||
VectorCopy(plane->normal, trace->plane.normal);
|
||||
midf = (t1 - DIST_EPSILON) / (t1 - t2);
|
||||
}
|
||||
VectorCopy (mid, trace->endpos);
|
||||
VectorInterpolate(rht_start, midf, rht_end, trace->endpos);
|
||||
|
||||
return rht_impact;
|
||||
}
|
||||
|
||||
qboolean Q1BSP_RecursiveHullCheck (hull_t *hull, int num, float p1f, float p2f, vec3_t p1, vec3_t p2, trace_t *trace)
|
||||
{
|
||||
if (VectorEquals(p1, p2))
|
||||
{
|
||||
/*points cannot cross planes, so do it faster*/
|
||||
switch(Q1_HullPointContents(hull, num, p1))
|
||||
{
|
||||
case Q1CONTENTS_SOLID:
|
||||
trace->startsolid = true;
|
||||
break;
|
||||
case Q1CONTENTS_EMPTY:
|
||||
trace->allsolid = false;
|
||||
trace->inopen = true;
|
||||
break;
|
||||
default:
|
||||
trace->allsolid = false;
|
||||
trace->inwater = true;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorCopy(p1, rht_start);
|
||||
VectorCopy(p2, rht_end);
|
||||
return Q1BSP_RecursiveHullTrace(hull, num, p1f, p2f, p1, p2, trace) != rht_impact;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
qboolean Q1BSP_RecursiveHullCheck (hull_t *hull, int num, float p1f, float p2f, vec3_t p1, vec3_t p2, trace_t *trace)
|
||||
{
|
||||
dclipnode_t *node;
|
||||
|
@ -76,9 +235,6 @@ qboolean Q1BSP_RecursiveHullCheck (hull_t *hull, int num, float p1f, float p2f,
|
|||
return true; // empty
|
||||
}
|
||||
|
||||
if (num < hull->firstclipnode || num > hull->lastclipnode)
|
||||
Sys_Error ("Q1BSP_RecursiveHullCheck: bad node number");
|
||||
|
||||
//
|
||||
// find the point distances
|
||||
//
|
||||
|
@ -187,6 +343,7 @@ qboolean Q1BSP_RecursiveHullCheck (hull_t *hull, int num, float p1f, float p2f,
|
|||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
int Q1BSP_HullPointContents(hull_t *hull, vec3_t p)
|
||||
{
|
||||
|
@ -210,11 +367,6 @@ int Q1BSP_HullPointContents(hull_t *hull, vec3_t p)
|
|||
}
|
||||
}
|
||||
|
||||
void Q1BSP_SetHullFuncs(hull_t *hull)
|
||||
{
|
||||
// hull->funcs.HullPointContents = Q1BSP_HullPointContents;
|
||||
}
|
||||
|
||||
unsigned int Q1BSP_PointContents(model_t *model, vec3_t point)
|
||||
{
|
||||
return Q1BSP_HullPointContents(&model->hulls[0], point);
|
||||
|
|
|
@ -282,6 +282,7 @@ void RMod_ClearAll (void)
|
|||
|
||||
if (mod->type == mod_brush)
|
||||
{
|
||||
Surf_Clear(mod);
|
||||
for (t = 0; t < mod->numtextures; t++)
|
||||
{
|
||||
if (!mod->textures[t])
|
||||
|
@ -304,6 +305,7 @@ Mod_Init
|
|||
*/
|
||||
void RMod_Init (void)
|
||||
{
|
||||
RMod_ClearAll();
|
||||
mod_numknown = 0;
|
||||
Q1BSP_Init();
|
||||
|
||||
|
@ -313,12 +315,11 @@ void RMod_Init (void)
|
|||
|
||||
void RMod_Shutdown (void)
|
||||
{
|
||||
RMod_ClearAll();
|
||||
mod_numknown = 0;
|
||||
|
||||
Cmd_RemoveCommand("mod_texturelist");
|
||||
Cmd_RemoveCommand("mod_usetexture");
|
||||
|
||||
RMod_ClearAll();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2412,6 +2413,7 @@ qboolean RMod_LoadClipnodes (lump_t *l)
|
|||
|
||||
if (numsuplementryclipnodes) //now load the crouch ones.
|
||||
{
|
||||
/*This looks buggy*/
|
||||
for (i = 3; i < MAX_MAP_HULLSM; i++)
|
||||
{
|
||||
hull = &loadmodel->hulls[i];
|
||||
|
@ -2965,7 +2967,8 @@ qboolean RMod_LoadBrushModel (model_t *mod, void *buffer)
|
|||
|
||||
mod->hulls[0].firstclipnode = bm->headnode[0];
|
||||
mod->hulls[0].available = true;
|
||||
Q1BSP_SetHullFuncs(&mod->hulls[0]);
|
||||
Q1BSP_CheckHullNodes(&mod->hulls[0]);
|
||||
|
||||
|
||||
for (j=1 ; j<MAX_MAP_HULLSM ; j++)
|
||||
{
|
||||
|
@ -2976,7 +2979,8 @@ qboolean RMod_LoadBrushModel (model_t *mod, void *buffer)
|
|||
if (mod->hulls[j].firstclipnode > mod->hulls[j].lastclipnode)
|
||||
mod->hulls[j].available = false;
|
||||
|
||||
Q1BSP_SetHullFuncs(&mod->hulls[j]);
|
||||
if (mod->hulls[j].available)
|
||||
Q1BSP_CheckHullNodes(&mod->hulls[j]);
|
||||
}
|
||||
|
||||
mod->firstmodelsurface = bm->firstface;
|
||||
|
|
|
@ -30,12 +30,6 @@ struct wedict_s;
|
|||
struct model_s;
|
||||
struct world_s;
|
||||
|
||||
typedef struct {
|
||||
// qboolean (*RecursiveHullCheck) (struct hull_s *hull, int num, float p1f, float p2f, vec3_t p1, vec3_t p2, struct trace_s *trace);
|
||||
// int (*HullPointContents) (struct hull_s *hull, vec3_t p); //return FTE contents
|
||||
int dummy;
|
||||
} hullfuncs_t;
|
||||
|
||||
typedef struct {
|
||||
//deals with FTECONTENTS (assumes against solid)
|
||||
void (*PurgeModel) (struct model_s *mod);
|
||||
|
@ -423,11 +417,9 @@ typedef struct hull_s
|
|||
vec3_t clip_mins;
|
||||
vec3_t clip_maxs;
|
||||
int available;
|
||||
|
||||
hullfuncs_t funcs;
|
||||
} hull_t;
|
||||
|
||||
void Q1BSP_SetHullFuncs(hull_t *hull);
|
||||
void Q1BSP_CheckHullNodes(hull_t *hull);
|
||||
void Q1BSP_SetModelFuncs(struct model_s *mod);
|
||||
void Q1BSP_Init(void);
|
||||
|
||||
|
|
|
@ -236,7 +236,7 @@ void GLR_RenderDlights (void)
|
|||
l = cl_dlights+rtlights_first;
|
||||
for (i=rtlights_first; i<rtlights_max; i++, l++)
|
||||
{
|
||||
if (!l->radius || !(l->flags & LFLAG_ALLOW_FLASH))
|
||||
if (!l->radius)// || !(l->flags & LFLAG_ALLOW_FLASH))
|
||||
continue;
|
||||
|
||||
//dlights emitting from the local player are not visible as flashblends
|
||||
|
|
|
@ -53,6 +53,11 @@ void BE_ClearVBO(vbo_t *vbo)
|
|||
if (j == 7)
|
||||
qglDeleteBuffersARB(1, &vboh[i]);
|
||||
}
|
||||
if (!vbo->vbocoord)
|
||||
BZ_Free(vbo->coord);
|
||||
if (!vbo->vboe)
|
||||
BZ_Free(vbo->indicies);
|
||||
BZ_Free(vbo->meshlist);
|
||||
memset(vbo, 0, sizeof(*vbo));
|
||||
}
|
||||
|
||||
|
|
|
@ -745,15 +745,15 @@ void GL_Init(void *(*getglfunction) (char *name))
|
|||
gl_minor_version = 1;
|
||||
}
|
||||
qglGetIntegerv(GL_NUM_EXTENSIONS, &gl_num_extensions);
|
||||
if (!qglGetError())
|
||||
if (gl_num_extensions && !qglGetError())
|
||||
{
|
||||
int i;
|
||||
if (developer.value)
|
||||
{
|
||||
Con_DPrintf ("GL_EXTENSIONS:");
|
||||
Con_Printf ("GL_EXTENSIONS:");
|
||||
for (i = 0; i < gl_num_extensions; i++)
|
||||
Con_DPrintf (" %s", qglGetStringi(GL_EXTENSIONS, i));
|
||||
Con_DPrintf ("\n");
|
||||
Con_Printf (" %s", qglGetStringi(GL_EXTENSIONS, i));
|
||||
Con_Printf ("\n");
|
||||
}
|
||||
else
|
||||
Con_Printf ("GL_EXTENSIONS: %i extensions\n", gl_num_extensions);
|
||||
|
|
|
@ -736,6 +736,14 @@ void CloseProgs(progfuncs_t *inst)
|
|||
free(inst->addressablehunk);
|
||||
#endif
|
||||
|
||||
if (inst->prinst->allocedstrings)
|
||||
f(inst->prinst->allocedstrings);
|
||||
inst->prinst->allocedstrings = NULL;
|
||||
if (inst->prinst->tempstrings)
|
||||
f(inst->prinst->tempstrings);
|
||||
inst->prinst->tempstrings = NULL;
|
||||
|
||||
|
||||
/*
|
||||
while(inst->prinst->extensionbuiltin)
|
||||
{
|
||||
|
|
|
@ -553,6 +553,9 @@ void SV_UnspawnServer (void) //terminate the running server.
|
|||
}
|
||||
for (i = 0; i < MAX_CLIENTS; i++)
|
||||
{
|
||||
if (svs.clients[i].frameunion.frames)
|
||||
Z_Free(svs.clients[i].frameunion.frames);
|
||||
svs.clients[i].frameunion.frames = NULL;
|
||||
svs.clients[i].state = 0;
|
||||
*svs.clients[i].namebuf = '\0';
|
||||
svs.clients[i].name = NULL;
|
||||
|
|
|
@ -2135,12 +2135,7 @@ qboolean SV_Physics (void)
|
|||
if (ent->isfree)
|
||||
continue;
|
||||
|
||||
if (ent->solidtype != ent->v->solid)
|
||||
{
|
||||
// Con_Printf("Entity \"%s\" improperly changed solid type\n", svprogfuncs->stringtable+ent->v->classname);
|
||||
World_LinkEdict (&sv.world, (wedict_t*)ent, true); // a change of solidity should always relink the edict. someone messed up.
|
||||
}
|
||||
else if (retouch)
|
||||
if (retouch)
|
||||
World_LinkEdict (&sv.world, (wedict_t*)ent, true); // force retouch even for stationary
|
||||
|
||||
if (i > 0 && i <= sv.allocated_client_slots)
|
||||
|
@ -2157,6 +2152,12 @@ qboolean SV_Physics (void)
|
|||
|
||||
SV_RunEntity (ent);
|
||||
SV_RunNewmis ();
|
||||
|
||||
if (ent->solidtype != ent->v->solid)
|
||||
{
|
||||
Con_DPrintf("Entity \"%s\" improperly changed solid type\n", PR_GetString(svprogfuncs, ent->v->classname));
|
||||
World_LinkEdict (&sv.world, (wedict_t*)ent, true); // a change of solidity should always relink the edict. someone messed up.
|
||||
}
|
||||
}
|
||||
|
||||
if (retouch)
|
||||
|
|
|
@ -79,8 +79,6 @@ static void World_InitBoxHull (void)
|
|||
box_hull.firstclipnode = 0;
|
||||
box_hull.lastclipnode = 5;
|
||||
|
||||
Q1BSP_SetHullFuncs(&box_hull);
|
||||
|
||||
for (i=0 ; i<6 ; i++)
|
||||
{
|
||||
box_clipnodes[i].planenum = i;
|
||||
|
|
Loading…
Reference in a new issue