]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - svvm_cmds.c
Added a builtin for te_flamejet
[xonotic/darkplaces.git] / svvm_cmds.c
index fe00a4458f4cf159fb6730ff791ba031a5bcf188..251ecc4fa4c74b0b8f21bc89d3d32e6bcb1bd336 100644 (file)
@@ -8,6 +8,8 @@ cvar_t sv_aim = {CVAR_SAVE, "sv_aim", "2"}; //"0.93"}; // LordHavoc: disabled au
 
 
 char *vm_sv_extensions =
+"DP_CON_EXPANDCVAR "
+"DP_CON_ALIASPARAMETERS "
 "DP_BUTTONCHAT "
 "DP_BUTTONUSE "
 "DP_CL_LOADSKY "
@@ -24,6 +26,7 @@ char *vm_sv_extensions =
 "DP_EF_RED "
 "DP_EF_STARDUST "
 "DP_ENT_ALPHA "
+"DP_ENT_COLORMOD "
 "DP_ENT_CUSTOMCOLORMAP "
 "DP_ENT_EXTERIORMODELTOCLIENT "
 "DP_ENT_GLOW "
@@ -86,10 +89,12 @@ char *vm_sv_extensions =
 "DP_SV_NODRAWTOCLIENT "
 "DP_SV_PING "
 "DP_SV_PLAYERPHYSICS "
+"DP_SV_PRECACHEANYTIME "
 "DP_SV_PUNCHVECTOR "
 "DP_SV_ROTATINGBMODEL "
 "DP_SV_SETCOLOR "
 "DP_SV_SLOWMO "
+"DP_SV_WRITEUNTERMINATEDSTRING "
 "DP_TE_BLOOD "
 "DP_TE_BLOODSHOWER "
 "DP_TE_CUSTOMFLASH "
@@ -113,7 +118,6 @@ char *vm_sv_extensions =
 "TENEBRAE_GFX_DLIGHTS "
 "TW_SV_STEPCONTROL "
 "NEXUIZ_PLAYERMODEL "
-"NEXUIZ_PLAYERSKIN "
 ;
 
 /*
@@ -739,63 +743,6 @@ void PF_findradius (void)
        VM_RETURN_EDICT(chain);
 }
 
-// LordHavoc: search for flags in float fields
-void PF_findflags (void)
-{
-       int             e;
-       int             f;
-       int             s;
-       prvm_edict_t    *ed;
-
-       e = PRVM_G_EDICTNUM(OFS_PARM0);
-       f = PRVM_G_INT(OFS_PARM1);
-       s = (int)PRVM_G_FLOAT(OFS_PARM2);
-
-       for (e++ ; e < prog->num_edicts ; e++)
-       {
-               prog->xfunction->builtinsprofile++;
-               ed = PRVM_EDICT_NUM(e);
-               if (ed->priv.server->free)
-                       continue;
-               if ((int)PRVM_E_FLOAT(ed,f) & s)
-               {
-                       VM_RETURN_EDICT(ed);
-                       return;
-               }
-       }
-
-       VM_RETURN_EDICT(prog->edicts);
-}
-
-// LordHavoc: chained search for flags in float fields
-void PF_findchainflags (void)
-{
-       int             i;
-       int             f;
-       int             s;
-       prvm_edict_t    *ent, *chain;
-
-       chain = (prvm_edict_t *)prog->edicts;
-
-       f = PRVM_G_INT(OFS_PARM0);
-       s = (int)PRVM_G_FLOAT(OFS_PARM1);
-
-       ent = PRVM_NEXT_EDICT(prog->edicts);
-       for (i = 1;i < prog->num_edicts;i++, ent = PRVM_NEXT_EDICT(ent))
-       {
-               prog->xfunction->builtinsprofile++;
-               if (ent->priv.server->free)
-                       continue;
-               if (!((int)PRVM_E_FLOAT(ent,f) & s))
-                       continue;
-
-               ent->fields.server->chain = PRVM_EDICT_TO_PROG(chain);
-               chain = ent;
-       }
-
-       VM_RETURN_EDICT(chain);
-}
-
 void PF_precache_file (void)
 {      // precache_file is only used to copy files with qcc, it does nothing
        PRVM_G_INT(OFS_RETURN) = PRVM_G_INT(OFS_PARM0);
@@ -917,6 +864,10 @@ void PF_lightstyle (void)
        style = PRVM_G_FLOAT(OFS_PARM0);
        val = PRVM_G_STRING(OFS_PARM1);
 
+       if( (unsigned) style >= MAX_LIGHTSTYLES ) {
+               PRVM_ERROR( "PF_lightstyle: style: %i >= 64", style );
+       }
+
 // change the string in sv
        strlcpy(sv.lightstyles[style], val, sizeof(sv.lightstyles[style]));
 
@@ -1182,18 +1133,20 @@ sizebuf_t *WriteDest (void)
                ent = PRVM_PROG_TO_EDICT(prog->globals.server->msg_entity);
                entnum = PRVM_NUM_FOR_EDICT(ent);
                if (entnum < 1 || entnum > svs.maxclients || !svs.clients[entnum-1].active)
-                       Host_Error("WriteDest: tried to write to non-client\n");
-               return &svs.clients[entnum-1].message;
+               {
+                       Con_Printf ("WriteDest: tried to write to non-client\n");
+                       return &sv.reliable_datagram;
+               }
+               else
+                       return &svs.clients[entnum-1].message;
 
+       default:
+               Con_Printf ("WriteDest: bad destination");
        case MSG_ALL:
                return &sv.reliable_datagram;
 
        case MSG_INIT:
                return &sv.signon;
-
-       default:
-               Host_Error("WriteDest: bad destination");
-               break;
        }
 
        return NULL;
@@ -1234,6 +1187,11 @@ void PF_WriteString (void)
        MSG_WriteString (WriteDest(), PRVM_G_STRING(OFS_PARM1));
 }
 
+void PF_WriteUnterminatedString (void)
+{
+       MSG_WriteUnterminatedString (WriteDest(), PRVM_G_STRING(OFS_PARM1));
+}
+
 
 void PF_WriteEntity (void)
 {
@@ -1838,6 +1796,22 @@ void PF_te_plasmaburn (void)
        MSG_WriteCoord(&sv.datagram, PRVM_G_VECTOR(OFS_PARM0)[2], sv.protocol);
 }
 
+void PF_te_flamejet (void)
+{
+       MSG_WriteByte(&sv.datagram, svc_temp_entity);
+       MSG_WriteByte(&sv.datagram, TE_FLAMEJET);
+       // org
+       MSG_WriteCoord(&sv.datagram, PRVM_G_VECTOR(OFS_PARM0)[0], sv.protocol);
+       MSG_WriteCoord(&sv.datagram, PRVM_G_VECTOR(OFS_PARM0)[1], sv.protocol);
+       MSG_WriteCoord(&sv.datagram, PRVM_G_VECTOR(OFS_PARM0)[2], sv.protocol);
+       // vel
+       MSG_WriteCoord(&sv.datagram, PRVM_G_VECTOR(OFS_PARM1)[0], sv.protocol);
+       MSG_WriteCoord(&sv.datagram, PRVM_G_VECTOR(OFS_PARM1)[1], sv.protocol);
+       MSG_WriteCoord(&sv.datagram, PRVM_G_VECTOR(OFS_PARM1)[2], sv.protocol);
+       // count
+       MSG_WriteByte(&sv.datagram, PRVM_G_FLOAT(OFS_PARM2));
+}
+
 static void clippointtosurface(msurface_t *surface, vec3_t p, vec3_t out)
 {
        int i, j, k;
@@ -2511,15 +2485,15 @@ VM_search_end,                          // #445 void(float handle) search_end (DP_FS_SEARCH)
 VM_search_getsize,                     // #446 float(float handle) search_getsize (DP_FS_SEARCH)
 VM_search_getfilename,         // #447 string(float handle, float num) search_getfilename (DP_FS_SEARCH)
 VM_cvar_string,                                // #448 string(string s) cvar_string (DP_QC_CVAR_STRING)
-PF_findflags,                          // #449 entity(entity start, .float fld, float match) findflags (DP_QC_FINDFLAGS)
-PF_findchainflags,                     // #450 entity(.float fld, float match) findchainflags (DP_QC_FINDCHAINFLAGS)
+VM_findflags,                          // #449 entity(entity start, .float fld, float match) findflags (DP_QC_FINDFLAGS)
+VM_findchainflags,                     // #450 entity(.float fld, float match) findchainflags (DP_QC_FINDCHAINFLAGS)
 PF_gettagindex,                                // #451 float(entity ent, string tagname) gettagindex (DP_QC_GETTAGINFO)
 PF_gettaginfo,                         // #452 vector(entity ent, float tagindex) gettaginfo (DP_QC_GETTAGINFO)
 PF_dropclient,                         // #453 void(entity clent) dropclient (DP_SV_DROPCLIENT)
 PF_spawnclient,                                // #454 entity() spawnclient (DP_SV_BOTCLIENT)
 PF_clienttype,                         // #455 float(entity clent) clienttype (DP_SV_BOTCLIENT)
-NULL,                                          // #456
-NULL,                                          // #457
+PF_WriteUnterminatedString,    // #456 void(float to, string s) WriteUnterminatedString (DP_SV_WRITEUNTERMINATEDSTRING)
+PF_te_flamejet,                                // #457 void(vector org, vector vel, float howmany) te_flamejet = #457 (DP_TE_FLAMEJET)
 NULL,                                          // #458
 NULL,                                          // #459
 e10, e10, e10, e10                     // #460-499 (LordHavoc)