]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - pr_cmds.c
Fixed a bug in the Ogg Vorbis streaming code that can cause sound files to be unplaya...
[xonotic/darkplaces.git] / pr_cmds.c
index 7eaa915f45e5b71d07b1c1ff3c38196074c417e1..7a24b55a03be0aa8b77040abca615ea5f70894c9 100644 (file)
--- a/pr_cmds.c
+++ b/pr_cmds.c
@@ -76,6 +76,7 @@ char *ENGINE_EXTENSIONS =
 "DP_EF_FLAME "
 "DP_EF_FULLBRIGHT "
 "DP_EF_NODRAW "
+"DP_EF_NOSHADOW "
 "DP_EF_RED "
 "DP_EF_STARDUST "
 "DP_ENT_ALPHA "
@@ -125,6 +126,7 @@ char *ENGINE_EXTENSIONS =
 "DP_SV_EXTERIORMODELTOCLIENT "
 "DP_SV_NODRAWTOCLIENT "
 "DP_SV_PLAYERPHYSICS "
+"DP_SV_ROTATINGBMODEL "
 "DP_SV_SETCOLOR "
 "DP_SV_SLOWMO "
 "DP_TE_BLOOD "
@@ -145,6 +147,7 @@ char *ENGINE_EXTENSIONS =
 "KRIMZON_SV_PARSECLIENTCOMMAND "
 "NEH_CMD_PLAY2 "
 "NEH_RESTOREGAME "
+"TENEBRAE_GFX_DLIGHTS "
 "TW_SV_STEPCONTROL "
 ;
 
@@ -199,9 +202,9 @@ void PF_error (void)
        char string[STRINGTEMP_LENGTH];
 
        PF_VarString(0, string, sizeof(string));
-       Con_Printf ("======SERVER ERROR in %s:\n%s\n", PR_GetString(pr_xfunction->s_name), string);
+       Con_Printf("======SERVER ERROR in %s:\n%s\n", PR_GetString(pr_xfunction->s_name), string);
        ed = PROG_TO_EDICT(pr_global_struct->self);
-       ED_Print (ed);
+       ED_Print(ed);
 
        PF_ERROR("Program error");
 }
@@ -222,9 +225,9 @@ void PF_objerror (void)
        char string[STRINGTEMP_LENGTH];
 
        PF_VarString(0, string, sizeof(string));
-       Con_Printf ("======OBJECT ERROR in %s:\n%s\n", PR_GetString(pr_xfunction->s_name), string);
+       Con_Printf("======OBJECT ERROR in %s:\n%s\n", PR_GetString(pr_xfunction->s_name), string);
        ed = PROG_TO_EDICT(pr_global_struct->self);
-       ED_Print (ed);
+       ED_Print(ed);
        ED_Free (ed);
 }
 
@@ -377,7 +380,7 @@ void PF_bprint (void)
 {
        char string[STRINGTEMP_LENGTH];
        PF_VarString(0, string, sizeof(string));
-       SV_BroadcastPrintf("%s", string);
+       SV_BroadcastPrint(string);
 }
 
 /*
@@ -399,7 +402,7 @@ void PF_sprint (void)
 
        if (entnum < 1 || entnum > svs.maxclients || !svs.clients[entnum-1].active)
        {
-               Con_Print("tried to sprint to a non-client\n");
+               Con_Print("tried to sprint to a non-client\n");
                return;
        }
 
@@ -431,7 +434,7 @@ void PF_centerprint (void)
 
        if (entnum < 1 || entnum > svs.maxclients || !svs.clients[entnum-1].active)
        {
-               Con_Print("tried to sprint to a non-client\n");
+               Con_Print("tried to sprint to a non-client\n");
                return;
        }
 
@@ -635,7 +638,7 @@ void PF_ambientsound (void)
 
        if (!*check)
        {
-               Con_Printf ("no precache: %s\n", samp);
+               Con_Printf("no precache: %s\n", samp);
                return;
        }
 
@@ -731,17 +734,17 @@ void PF_traceline (void)
 {
        float   *v1, *v2;
        trace_t trace;
-       int             nomonsters;
+       int             move;
        edict_t *ent;
 
        pr_xfunction->builtinsprofile += 30;
 
        v1 = G_VECTOR(OFS_PARM0);
        v2 = G_VECTOR(OFS_PARM1);
-       nomonsters = G_FLOAT(OFS_PARM2);
+       move = G_FLOAT(OFS_PARM2);
        ent = G_EDICT(OFS_PARM3);
 
-       trace = SV_Move (v1, vec3_origin, vec3_origin, v2, nomonsters, ent);
+       trace = SV_Move (v1, vec3_origin, vec3_origin, v2, move, ent);
 
        pr_global_struct->trace_allsolid = trace.allsolid;
        pr_global_struct->trace_startsolid = trace.startsolid;
@@ -775,7 +778,7 @@ void PF_tracebox (void)
 {
        float   *v1, *v2, *m1, *m2;
        trace_t trace;
-       int             nomonsters;
+       int             move;
        edict_t *ent;
 
        pr_xfunction->builtinsprofile += 30;
@@ -784,10 +787,10 @@ void PF_tracebox (void)
        m1 = G_VECTOR(OFS_PARM1);
        m2 = G_VECTOR(OFS_PARM2);
        v2 = G_VECTOR(OFS_PARM3);
-       nomonsters = G_FLOAT(OFS_PARM4);
+       move = G_FLOAT(OFS_PARM4);
        ent = G_EDICT(OFS_PARM5);
 
-       trace = SV_Move (v1, m1, m2, v2, nomonsters ? MOVE_NOMONSTERS : MOVE_NORMAL, ent);
+       trace = SV_Move (v1, m1, m2, v2, move, ent);
 
        pr_global_struct->trace_allsolid = trace.allsolid;
        pr_global_struct->trace_startsolid = trace.startsolid;
@@ -964,7 +967,7 @@ void PF_stuffcmd (void)
        entnum = G_EDICTNUM(OFS_PARM0);
        if (entnum < 1 || entnum > svs.maxclients || !svs.clients[entnum-1].active)
        {
-               Con_Printf("Can't stuffcmd to a non-client");
+               Con_Print("Can't stuffcmd to a non-client\n");
                return;
        }
        str = G_STRING(OFS_PARM1);
@@ -1073,7 +1076,7 @@ void PF_dprint (void)
        if (developer.integer)
        {
                PF_VarString(0, string, sizeof(string));
-               Con_Printf("%s",string);
+               Con_Print(string);
        }
 }
 
@@ -1888,7 +1891,7 @@ void PF_setspawnparms (void)
        i = NUM_FOR_EDICT(ent);
        if (i < 1 || i > svs.maxclients || !svs.clients[i-1].active)
        {
-               Con_Printf("tried to setspawnparms on a non-client\n");
+               Con_Print("tried to setspawnparms on a non-client\n");
                return;
        }
 
@@ -1996,7 +1999,7 @@ void PF_registercvar (void)
 // check for overlap with a command
        if (Cmd_Exists (name))
        {
-               Con_Printf ("PF_registercvar: %s is a command\n", name);
+               Con_Printf("PF_registercvar: %s is a command\n", name);
                return;
        }
 
@@ -2148,7 +2151,7 @@ void PF_setcolor (void)
 
        if (entnum < 1 || entnum > svs.maxclients || !svs.clients[entnum-1].active)
        {
-               Con_Print("tried to setcolor a non-client\n");
+               Con_Print("tried to setcolor a non-client\n");
                return;
        }
 
@@ -2607,9 +2610,9 @@ static msurface_t *getsurface(edict_t *ed, int surfnum)
        if (modelindex < 1 || modelindex >= MAX_MODELS)
                return NULL;
        model = sv.models[modelindex];
-       if (surfnum < 0 || surfnum >= model->brushq1.nummodelsurfaces)
+       if (surfnum < 0 || surfnum >= model->nummodelsurfaces)
                return NULL;
-       return model->brushq1.surfaces + surfnum + model->brushq1.firstmodelsurface;
+       return model->brushq1.surfaces + surfnum + model->firstmodelsurface;
 }
 
 
@@ -2693,9 +2696,9 @@ void PF_getsurfacenearpoint(void)
        VectorSubtract(point, ed->v->origin, p);
        best = -1;
        bestdist = 1000000000;
-       for (surfnum = 0;surfnum < model->brushq1.nummodelsurfaces;surfnum++)
+       for (surfnum = 0;surfnum < model->nummodelsurfaces;surfnum++)
        {
-               surf = model->brushq1.surfaces + surfnum + model->brushq1.firstmodelsurface;
+               surf = model->brushq1.surfaces + surfnum + model->firstmodelsurface;
                dist = PlaneDiff(p, surf->plane);
                dist = dist * dist;
                if (dist < bestdist)
@@ -2957,7 +2960,7 @@ void PF_clientcommand (void)
        i = (NUM_FOR_EDICT(G_EDICT(OFS_PARM0)) - 1);
        if (i < 0 || i >= svs.maxclients || !svs.clients[i].active)
        {
-               Con_Printf("PF_clientcommand: entity is not a client");
+               Con_Print("PF_clientcommand: entity is not a client\n");
                return;
        }
 
@@ -2969,30 +2972,26 @@ void PF_clientcommand (void)
 
 //float(string s) tokenize = #441; // takes apart a string into individal words (access them with argv), returns how many
 //this function originally written by KrimZon, made shorter by LordHavoc
-char **tokens = NULL;
-int    max_tokens, num_tokens = 0;
+//20040203: rewritten by LordHavoc (no longer uses allocations)
+int num_tokens = 0;
+char *tokens[256], tokenbuf[4096];
 void PF_tokenize (void)
 {
+       int pos;
        const char *p;
-       char *str;
-       str = G_STRING(OFS_PARM0);
+       p = G_STRING(OFS_PARM0);
 
-       if (tokens != NULL)
+       num_tokens = 0;
+       pos = 0;
+       while(COM_ParseToken(&p, false))
        {
-               int i;
-               for (i=0;i<num_tokens;i++)
-                       Z_Free(tokens[i]);
-               Z_Free(tokens);
-               num_tokens = 0;
-       }
-
-       tokens = Z_Malloc(strlen(str) * sizeof(char *));
-       max_tokens = strlen(str);
-
-       for (p = str;COM_ParseToken(&p, false) && num_tokens < max_tokens;num_tokens++)
-       {
-               tokens[num_tokens] = Z_Malloc(strlen(com_token) + 1);
-               strcpy(tokens[num_tokens], com_token);
+               if (num_tokens >= (int)(sizeof(tokens)/sizeof(tokens[0])))
+                       break;
+               if (pos + strlen(com_token) + 1 > sizeof(tokenbuf))
+                       break;
+               tokens[num_tokens++] = tokenbuf + pos;
+               strcpy(tokenbuf + pos, com_token);
+               pos += strlen(com_token) + 1;
        }
 
        G_FLOAT(OFS_RETURN) = num_tokens;