ed = PROG_TO_EDICT(pr_global_struct->self);
ED_Print (ed);
ED_Free (ed);
-
-// LordHavoc: bug fix - no longer kills server
-// Host_Error ("Program error");
}
-
/*
==============
PF_makevectors
void SetMinMaxSize (edict_t *e, float *min, float *max, qboolean rotate)
{
- /*
- float *angles;
- vec3_t rmin, rmax;
- float bounds[2][3];
- float xvector[2], yvector[2];
- float a;
- vec3_t base, transformed;
- int i, j, k, l;
- */
int i;
for (i=0 ; i<3 ; i++)
if (min[i] > max[i])
PR_RunError ("backwards mins/maxs");
- /*
- rotate = false; // FIXME: implement rotation properly again
-
- if (!rotate)
- {
- VectorCopy (min, rmin);
- VectorCopy (max, rmax);
- }
- else
- {
- // find min / max for rotations
- angles = e->v.angles;
-
- a = angles[1]/180 * M_PI;
-
- xvector[0] = cos(a);
- xvector[1] = sin(a);
- yvector[0] = -sin(a);
- yvector[1] = cos(a);
-
- VectorCopy (min, bounds[0]);
- VectorCopy (max, bounds[1]);
-
- rmin[0] = rmin[1] = rmin[2] = 9999;
- rmax[0] = rmax[1] = rmax[2] = -9999;
-
- for (i=0 ; i<= 1 ; i++)
- {
- base[0] = bounds[i][0];
- for (j=0 ; j<= 1 ; j++)
- {
- base[1] = bounds[j][1];
- for (k=0 ; k<= 1 ; k++)
- {
- base[2] = bounds[k][2];
-
- // transform the point
- transformed[0] = xvector[0]*base[0] + yvector[0]*base[1];
- transformed[1] = xvector[1]*base[0] + yvector[1]*base[1];
- transformed[2] = base[2];
-
- for (l=0 ; l<3 ; l++)
- {
- if (transformed[l] < rmin[l])
- rmin[l] = transformed[l];
- if (transformed[l] > rmax[l])
- rmax[l] = transformed[l];
- }
- }
- }
- }
- }
-
-// set derived values
- VectorCopy (rmin, e->v.mins);
- VectorCopy (rmax, e->v.maxs);
- VectorSubtract (max, min, e->v.size);
- */
-
// set derived values
VectorCopy (min, e->v.mins);
VectorCopy (max, e->v.maxs);
e->v.model = m - pr_strings;
- e->v.modelindex = i; //SV_ModelIndex (m);
+ e->v.modelindex = i;
- mod = sv.models[ (int)e->v.modelindex]; // Mod_ForName (m, true);
+ mod = sv.models[ (int)e->v.modelindex];
if (mod)
- /*
- { // LordHavoc: corrected model bounding box, but for compatibility that means I have to break it here
- vec3_t min, max;
- if (mod->type == ALIASTYPE_MDL)
- {
- min[0] = min[1] = min[2] = -16;
- max[0] = max[1] = max[2] = 16;
- SetMinMaxSize (e, min, max, true);
- }
- else
- SetMinMaxSize (e, mod->mins, mod->maxs, true);
- }
- */
SetMinMaxSize (e, mod->normalmins, mod->normalmaxs, true);
else
SetMinMaxSize (e, vec3_origin, vec3_origin, true);
*/
void PF_break (void)
{
-// Con_Printf ("break statement\n");
-// *(int *)-4 = 0; // dump to debugger
PR_RunError ("break statement");
}
*/
void PF_findradius (void)
{
- edict_t *ent, *chain;
- float rad;
- float *org;
- vec3_t eorg;
- int i, j;
+ edict_t *ent, *chain;
+ float radius;
+ float radius2;
+ float *org;
+ float eorg[3];
+ int i;
chain = (edict_t *)sv.edicts;
org = G_VECTOR(OFS_PARM0);
- rad = G_FLOAT(OFS_PARM1);
+ radius = G_FLOAT(OFS_PARM1);
+ radius2 = radius * radius;
ent = NEXT_EDICT(sv.edicts);
for (i=1 ; i<sv.num_edicts ; i++, ent = NEXT_EDICT(ent))
continue;
if (ent->v.solid == SOLID_NOT)
continue;
- for (j=0 ; j<3 ; j++)
- eorg[j] = org[j] - (ent->v.origin[j] + (ent->v.mins[j] + ent->v.maxs[j])*0.5);
- if (Length(eorg) > rad)
+
+ // LordHavoc: compare against bounding box rather than center,
+ // and use DotProduct instead of Length, major speedup
+ eorg[0] = (org[0] - ent->v.origin[0]) - bound(ent->v.mins[0], (org[0] - ent->v.origin[0]), ent->v.maxs[0]);
+ eorg[1] = (org[1] - ent->v.origin[1]) - bound(ent->v.mins[1], (org[1] - ent->v.origin[1]), ent->v.maxs[1]);
+ eorg[2] = (org[2] - ent->v.origin[2]) - bound(ent->v.mins[2], (org[2] - ent->v.origin[2]), ent->v.maxs[2]);
+ if (DotProduct(eorg, eorg) > radius2)
continue;
ent->v.chain = EDICT_TO_PROG(chain);
v = G_FLOAT(OFS_PARM0);
s = PR_GetTempString();
- /*
- if (v == (int)v)
- sprintf (s, "%d",(int)v);
- else
- sprintf (s, "%5.1f",v);
- */
// LordHavoc: ftos improvement
sprintf (s, "%g", v);
G_INT(OFS_RETURN) = s - pr_strings;
*/
void PF_pointcontents (void)
{
- G_FLOAT(OFS_RETURN) = SV_PointContents (G_VECTOR(OFS_PARM0));
+ G_FLOAT(OFS_RETURN) = Mod_PointInLeaf(G_VECTOR(OFS_PARM0), sv.worldmodel)->contents;
}
/*
VectorCopy (pr_global_struct->v_forward, dir);
VectorMA (start, 2048, dir, end);
tr = SV_Move (start, vec3_origin, vec3_origin, end, MOVE_NORMAL, ent);
- if (tr.ent && tr.ent->v.takedamage == DAMAGE_AIM
- && (!teamplay.integer || ent->v.team <=0 || ent->v.team != tr.ent->v.team) )
+ if (tr.ent && ((edict_t *)tr.ent)->v.takedamage == DAMAGE_AIM
+ && (!teamplay.integer || ent->v.team <=0 || ent->v.team != ((edict_t *)tr.ent)->v.team) )
{
VectorCopy (pr_global_struct->v_forward, G_VECTOR(OFS_RETURN));
return;
builtin_t *pr_builtins = pr_builtin;
int pr_numbuiltins = sizeof(pr_builtin)/sizeof(pr_builtin[0]);
+