cvar_t sv_aim = {CVAR_SAVE, "sv_aim", "2"}; //"0.93"}; // LordHavoc: disabled autoaim by default
cvar_t pr_zone_min_strings = {0, "pr_zone_min_strings", "64"};
-mempool_t *pr_strings_mempool;
-
// LordHavoc: added this to semi-fix the problem of using many ftos calls in a print
#define STRINGTEMP_BUFFERS 16
#define STRINGTEMP_LENGTH 4096
"DP_GFX_SKYBOX "
"DP_HALFLIFE_MAP "
"DP_HALFLIFE_MAP_CVAR "
+"DP_HALFLIFE_SPRITE "
"DP_INPUTBUTTONS "
"DP_LITSPRITES "
"DP_LITSUPPORT "
"DP_QC_TRACE_MOVETYPE_WORLDONLY "
"DP_QC_VECTORVECTORS "
"DP_QUAKE2_MODEL "
+"DP_QUAKE2_SPRITE "
"DP_QUAKE3_MODEL "
"DP_REGISTERCVAR "
"DP_SND_DIRECTIONLESSATTNNONE "
// radius
MSG_WriteByte(&sv.datagram, bound(0, G_FLOAT(OFS_PARM1) / 8 - 1, 255));
// lifetime
- MSG_WriteByte(&sv.datagram, bound(0, G_FLOAT(OFS_PARM2) / 256 - 1, 255));
+ MSG_WriteByte(&sv.datagram, bound(0, G_FLOAT(OFS_PARM2) * 256 - 1, 255));
// color
MSG_WriteByte(&sv.datagram, bound(0, G_VECTOR(OFS_PARM3)[0] * 255, 255));
MSG_WriteByte(&sv.datagram, bound(0, G_VECTOR(OFS_PARM3)[1] * 255, 255));
{
int i, j, k;
float *v[3], facenormal[3], edgenormal[3], sidenormal[3], temp[3], offsetdist, dist, bestdist;
+ const int *e;
bestdist = 1000000000;
VectorCopy(p, out);
- for (i = 0;i < surface->mesh.num_triangles;i++)
+ for (i = 0, e = (surface->groupmesh->data_element3i + 3 * surface->num_firsttriangle);i < surface->num_triangles;i++, e += 3)
{
// clip original point to each triangle of the surface and find the
// triangle that is closest
- v[0] = surface->mesh.data_vertex3f + surface->mesh.data_element3i[i * 3 + 0] * 3;
- v[1] = surface->mesh.data_vertex3f + surface->mesh.data_element3i[i * 3 + 1] * 3;
- v[2] = surface->mesh.data_vertex3f + surface->mesh.data_element3i[i * 3 + 2] * 3;
+ v[0] = surface->groupmesh->data_vertex3f + e[0] * 3;
+ v[1] = surface->groupmesh->data_vertex3f + e[1] * 3;
+ v[2] = surface->groupmesh->data_vertex3f + e[2] * 3;
TriangleNormal(v[0], v[1], v[2], facenormal);
VectorNormalize(facenormal);
offsetdist = DotProduct(v[0], facenormal) - DotProduct(p, facenormal);
}
// note: this (incorrectly) assumes it is a simple polygon
- G_FLOAT(OFS_RETURN) = surface->mesh.num_vertices;
+ G_FLOAT(OFS_RETURN) = surface->num_vertices;
}
//PF_getsurfacepoint, // #435 vector(entity e, float s, float n) getsurfacepoint = #435;
void PF_getsurfacepoint(void)
return;
// note: this (incorrectly) assumes it is a simple polygon
pointnum = G_FLOAT(OFS_PARM2);
- if (pointnum < 0 || pointnum >= surface->mesh.num_vertices)
+ if (pointnum < 0 || pointnum >= surface->num_vertices)
return;
// FIXME: implement rotation/scaling
- VectorAdd(&surface->mesh.data_vertex3f[pointnum * 3], ed->v->origin, G_VECTOR(OFS_RETURN));
+ VectorAdd(&(surface->groupmesh->data_vertex3f + 3 * surface->num_firstvertex)[pointnum * 3], ed->v->origin, G_VECTOR(OFS_RETURN));
}
//PF_getsurfacenormal, // #436 vector(entity e, float s) getsurfacenormal = #436;
void PF_getsurfacenormal(void)
// note: this (incorrectly) assumes it is a simple polygon
// note: this only returns the first triangle, so it doesn't work very
// well for curved surfaces or arbitrary meshes
- TriangleNormal(surface->mesh.data_vertex3f, surface->mesh.data_vertex3f + 3, surface->mesh.data_vertex3f + 6, normal);
+ TriangleNormal((surface->groupmesh->data_vertex3f + 3 * surface->num_firstvertex), (surface->groupmesh->data_vertex3f + 3 * surface->num_firstvertex) + 3, (surface->groupmesh->data_vertex3f + 3 * surface->num_firstvertex) + 6, normal);
VectorNormalize(normal);
VectorCopy(normal, G_VECTOR(OFS_RETURN));
}
{
char *in, *out;
in = G_STRING(OFS_PARM0);
- out = Mem_Alloc(pr_strings_mempool, strlen(in) + 1);
+ out = PR_Alloc(strlen(in) + 1);
strcpy(out, in);
G_INT(OFS_RETURN) = PR_SetString(out);
}
//void(string s) strunzone = #119; // removes a copy of a string from the string zone (you can not use that string again or it may crash!!!)
void PF_strunzone(void)
{
- Mem_Free(G_STRING(OFS_PARM0));
+ PR_Free(G_STRING(OFS_PARM0));
}
//void(entity e, string s) clientcommand = #440; // executes a command string as if it came from the specified client
void PR_Cmd_Init(void)
{
- pr_strings_mempool = Mem_AllocPool("pr_stringszone", 0, NULL);
PR_Files_Init();
PR_Search_Init();
}
void PR_Cmd_Shutdown(void)
{
- Mem_FreePool (&pr_strings_mempool);
}
void PR_Cmd_Reset(void)
{
- Mem_EmptyPool(pr_strings_mempool);
PR_Search_Reset();
PR_Files_CloseAll();
}