]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - pr_cmds.c
changed cl_movement_latency to be in milliseconds rather than seconds (less confusing...
[xonotic/darkplaces.git] / pr_cmds.c
index 15e902b2917b73d88cba20490c72a2ad21464f0a..096cf4b50ce58dd1fe9bb23fbe42a308e454a7ec 100644 (file)
--- a/pr_cmds.c
+++ b/pr_cmds.c
@@ -23,8 +23,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 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
@@ -99,6 +97,7 @@ char *ENGINE_EXTENSIONS =
 "DP_GFX_SKYBOX "
 "DP_HALFLIFE_MAP "
 "DP_HALFLIFE_MAP_CVAR "
+"DP_HALFLIFE_SPRITE "
 "DP_INPUTBUTTONS "
 "DP_LITSPRITES "
 "DP_LITSUPPORT "
@@ -128,6 +127,7 @@ char *ENGINE_EXTENSIONS =
 "DP_QC_TRACE_MOVETYPE_WORLDONLY "
 "DP_QC_VECTORVECTORS "
 "DP_QUAKE2_MODEL "
+"DP_QUAKE2_SPRITE "
 "DP_QUAKE3_MODEL "
 "DP_REGISTERCVAR "
 "DP_SND_DIRECTIONLESSATTNNONE "
@@ -2417,7 +2417,7 @@ void PF_te_customflash (void)
        // 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));
@@ -2604,15 +2604,16 @@ static void clippointtosurface(msurface_t *surface, vec3_t p, vec3_t out)
 {
        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);
@@ -2663,7 +2664,7 @@ void PF_getsurfacenumpoints(void)
        }
 
        // 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)
@@ -2679,10 +2680,10 @@ 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)
@@ -2696,7 +2697,7 @@ 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));
 }
@@ -2982,7 +2983,7 @@ void PF_strzone(void)
 {
        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);
 }
@@ -2990,7 +2991,7 @@ void PF_strzone(void)
 //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
@@ -3716,19 +3717,16 @@ int pr_numbuiltins = sizeof(pr_builtin)/sizeof(pr_builtin[0]);
 
 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();
 }