]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - svvm_cmds.c
added DP_QC_STRFTIME extension
[xonotic/darkplaces.git] / svvm_cmds.c
index 524eb60038604cafd8a797109d809b0353f1a2fa..7f33f9c1b361367ad6b46885fa258e35f2e3bf7e 100644 (file)
@@ -7,6 +7,7 @@ cvar_t sv_aim = {CVAR_SAVE, "sv_aim", "2", "maximum cosine angle for quake's ver
 
 
 char *vm_sv_extensions =
+"BX_WAL_SUPPORT "
 "DP_CON_EXPANDCVAR "
 "DP_CON_ALIASPARAMETERS "
 "DP_BUTTONCHAT "
@@ -48,6 +49,7 @@ char *vm_sv_extensions =
 "DP_MONSTERWALK "
 "DP_MOVETYPEBOUNCEMISSILE "
 "DP_MOVETYPEFOLLOW "
+"DP_QC_ASINACOSATANATAN2TAN "
 "DP_QC_CHANGEPITCH "
 "DP_QC_COPYENTITY "
 "DP_QC_CVAR_STRING "
@@ -65,7 +67,10 @@ char *vm_sv_extensions =
 "DP_QC_MULTIPLETEMPSTRINGS "
 "DP_QC_RANDOMVEC "
 "DP_QC_SINCOSSQRTPOW "
+"DP_QC_STRFTIME "
 "DP_QC_STRINGBUFFERS "
+"DP_QC_STRINGCOLORFUNCTIONS "
+"DP_QC_UNLIMITEDTEMPSTRINGS "
 "DP_QC_TRACEBOX "
 "DP_QC_TRACETOSS "
 "DP_QC_TRACE_MOVETYPE_HITMODEL "
@@ -89,10 +94,12 @@ char *vm_sv_extensions =
 "DP_SV_DRAWONLYTOCLIENT "
 "DP_SV_DROPCLIENT "
 "DP_SV_EFFECT "
+"DP_SV_ENTITYCONTENTSTRANSITION "
 "DP_SV_NODRAWTOCLIENT "
 "DP_SV_PING "
 "DP_SV_PLAYERPHYSICS "
 "DP_SV_PRECACHEANYTIME "
+"DP_SV_PRINT "
 "DP_SV_PUNCHVECTOR "
 "DP_SV_ROTATINGBMODEL "
 "DP_SV_SETCOLOR "
@@ -494,11 +501,7 @@ void PF_traceline (void)
        if ((val = PRVM_GETGLOBALFIELDVALUE(gval_trace_dphittexturename)))
        {
                if (trace.hittexture)
-               {
-                       char *s = VM_GetTempString();
-                       strlcpy(s, trace.hittexture->name, VM_STRINGTEMP_LENGTH);
-                       val->string = PRVM_SetEngineString(s);
-               }
+                       val->string = PRVM_SetTempString(trace.hittexture->name);
                else
                        val->string = 0;
        }
@@ -560,11 +563,7 @@ void PF_tracebox (void)
        if ((val = PRVM_GETGLOBALFIELDVALUE(gval_trace_dphittexturename)))
        {
                if (trace.hittexture)
-               {
-                       char *s = VM_GetTempString();
-                       strlcpy(s, trace.hittexture->name, VM_STRINGTEMP_LENGTH);
-                       val->string = PRVM_SetEngineString(s);
-               }
+                       val->string = PRVM_SetTempString(trace.hittexture->name);
                else
                        val->string = 0;
        }
@@ -611,11 +610,7 @@ void PF_tracetoss (void)
        if ((val = PRVM_GETGLOBALFIELDVALUE(gval_trace_dphittexturename)))
        {
                if (trace.hittexture)
-               {
-                       char *s = VM_GetTempString();
-                       strlcpy(s, trace.hittexture->name, VM_STRINGTEMP_LENGTH);
-                       val->string = PRVM_SetEngineString(s);
-               }
+                       val->string = PRVM_SetTempString(trace.hittexture->name);
                else
                        val->string = 0;
        }
@@ -935,9 +930,10 @@ void PF_droptofloor (void)
 
        trace = SV_Move (ent->fields.server->origin, ent->fields.server->mins, ent->fields.server->maxs, end, MOVE_NORMAL, ent);
 
-       if (trace.fraction != 1)
+       if (trace.fraction != 1 || (trace.startsolid && sv_gameplayfix_droptofloorstartsolid.integer))
        {
-               VectorCopy (trace.endpos, ent->fields.server->origin);
+               if (trace.fraction < 1)
+                       VectorCopy (trace.endpos, ent->fields.server->origin);
                SV_LinkEdict (ent, false);
                ent->fields.server->flags = (int)ent->fields.server->flags | FL_ONGROUND;
                ent->fields.server->groundentity = PRVM_EDICT_TO_PROG(trace.ent);
@@ -1690,7 +1686,7 @@ void PF_effect (void)
        int i;
        const char *s;
        s = PRVM_G_STRING(OFS_PARM1);
-       if (!s || !s[0])
+       if (!s[0])
        {
                VM_Warning("effect: no model specified\n");
                return;
@@ -1702,6 +1698,19 @@ void PF_effect (void)
                VM_Warning("effect: model not precached\n");
                return;
        }
+
+       if (PRVM_G_FLOAT(OFS_PARM3) < 1)
+       {
+               VM_Warning("effect: framecount < 1\n");
+               return;
+       }
+
+       if (PRVM_G_FLOAT(OFS_PARM4) < 1)
+       {
+               VM_Warning("effect: framerate < 1\n");
+               return;
+       }
+
        SV_StartEffect(PRVM_G_VECTOR(OFS_PARM0), i, (int)PRVM_G_FLOAT(OFS_PARM2), (int)PRVM_G_FLOAT(OFS_PARM3), (int)PRVM_G_FLOAT(OFS_PARM4));
 }
 
@@ -2223,10 +2232,10 @@ void PF_getsurfacetexture(void)
 {
        model_t *model;
        msurface_t *surface;
-       PRVM_G_INT(OFS_RETURN) = 0;
+       PRVM_G_INT(OFS_RETURN) = OFS_NULL;
        if (!(model = getmodel(PRVM_G_EDICT(OFS_PARM0))) || !(surface = getsurface(model, (int)PRVM_G_FLOAT(OFS_PARM1))))
                return;
-       PRVM_G_INT(OFS_RETURN) = PRVM_SetEngineString(surface->texture->name);
+       PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(surface->texture->name);
 }
 //PF_getsurfacenearpoint, // #438 float(entity e, vector p) getsurfacenearpoint = #438;
 void PF_getsurfacenearpoint(void)
@@ -2384,7 +2393,7 @@ void SV_GetEntityMatrix (prvm_edict_t *ent, matrix4x4_t *out, qboolean viewmatri
        if (viewmatrix)
                Matrix4x4_CreateFromQuakeEntity(out, ent->fields.server->origin[0], ent->fields.server->origin[1], ent->fields.server->origin[2] + ent->fields.server->view_ofs[2], ent->fields.server->v_angle[0], ent->fields.server->v_angle[1], ent->fields.server->v_angle[2], scale);
        else
-               Matrix4x4_CreateFromQuakeEntity(out, ent->fields.server->origin[0], ent->fields.server->origin[1], ent->fields.server->origin[2], -ent->fields.server->angles[0], ent->fields.server->angles[1], ent->fields.server->angles[2], scale * 0.333);
+               Matrix4x4_CreateFromQuakeEntity(out, ent->fields.server->origin[0], ent->fields.server->origin[1], ent->fields.server->origin[2], -ent->fields.server->angles[0], ent->fields.server->angles[1], ent->fields.server->angles[2], scale * cl_viewmodel_scale.value);
 }
 
 int SV_GetEntityLocalTagMatrix(prvm_edict_t *ent, int tagindex, matrix4x4_t *out)
@@ -2778,7 +2787,25 @@ e10,                                             // #260-#269
 e10,                                           // #270-#279
 e10,                                           // #280-#289
 e10,                                           // #290-#299
-e10, e10, e10, e10, e10, e10, e10, e10, e10, e10,      // #300-399
+e10,                                           // #300-309
+e10,                                           // #310-319
+e10,                                           // #320-329
+NULL,                                          // #330
+NULL,                                          // #331
+NULL,                                          // #332
+NULL,                                          // #333
+NULL,                                          // #334
+NULL,                                          // #335
+NULL,                                          // #336
+NULL,                                          // #337
+NULL,                                          // #338
+VM_print,                                      // #339 void(string, ...) print (DP_SV_PRINT)
+e10,                                           // #340-349
+e10,                                           // #350-359
+e10,                                           // #360-369
+e10,                                           // #370-379
+e10,                                           // #380-389
+e10,                                           // #390-399
 VM_copyentity,                         // #400 void(entity from, entity to) copyentity (DP_QC_COPYENTITY)
 PF_setcolor,                           // #401 void(entity ent, float colors) setcolor (DP_QC_SETCOLOR)
 VM_findchain,                          // #402 entity(.string fld, string match) findchain (DP_QC_FINDCHAIN)
@@ -2850,13 +2877,14 @@ VM_bufstr_set,                          // #467 void(float bufhandle, float string_index, string str)
 VM_bufstr_add,                         // #468 float(float bufhandle, string str, float order) bufstr_add (DP_QC_STRINGBUFFERS)
 VM_bufstr_free,                                // #469 void(float bufhandle, float string_index) bufstr_free (DP_QC_STRINGBUFFERS)
 PF_SV_AddStat,                         // #470 void(float index, float type, .void field) SV_AddStat (EXT_CSQC)
-NULL,                                          // #471
-NULL,                                          // #472
-NULL,                                          // #473
-NULL,                                          // #474
-NULL,                                          // #475
-NULL,                                          // #476
-NULL,                                          // #477
+VM_asin,                                       // #471 float(float s) VM_asin (DP_QC_ASINACOSATANATAN2TAN)
+VM_acos,                                       // #472 float(float c) VM_acos (DP_QC_ASINACOSATANATAN2TAN)
+VM_atan,                                       // #473 float(float t) VM_atan (DP_QC_ASINACOSATANATAN2TAN)
+VM_atan2,                                      // #474 float(float c, float s) VM_atan2 (DP_QC_ASINACOSATANATAN2TAN)
+VM_tan,                                                // #475 float(float a) VM_tan (DP_QC_ASINACOSATANATAN2TAN)
+VM_strlennocol,                                // #476 float(string s) : DRESK - String Length (not counting color codes) (DP_QC_STRINGCOLORFUNCTIONS)
+VM_strdecolorize,                      // #477 string(string s) : DRESK - Decolorized String (DP_SV_STRINGCOLORFUNCTIONS)
+VM_strftime,                           // #478 string(float uselocaltime, string format, ...) (DP_QC_STRFTIME)
 NULL,                                          // #478
 NULL,                                          // #479
 e10, e10                                       // #480-499 (LordHavoc)