]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - svvm_cmds.c
|sort
[xonotic/darkplaces.git] / svvm_cmds.c
index 4f43379eaffc1e1d659233194cd49ba4f4eeb140..53e4c20bd509cd3c25b1d37e9396c2abb21e102d 100644 (file)
@@ -13,6 +13,7 @@ char *vm_sv_extensions =
 "DP_BUTTONUSE "
 "DP_CL_LOADSKY "
 "DP_CON_ALIASPARAMETERS "
+"DP_CON_BESTWEAPON "
 "DP_CON_EXPANDCVAR "
 "DP_CON_SET "
 "DP_CON_SETA "
@@ -24,8 +25,8 @@ char *vm_sv_extensions =
 "DP_EF_FULLBRIGHT "
 "DP_EF_NODEPTHTEST "
 "DP_EF_NODRAW "
-"DP_EF_NOSHADOW "
 "DP_EF_NOGUNBOB "
+"DP_EF_NOSHADOW "
 "DP_EF_RED "
 "DP_EF_STARDUST "
 "DP_ENT_ALPHA "
@@ -36,6 +37,7 @@ char *vm_sv_extensions =
 "DP_ENT_LOWPRECISION "
 "DP_ENT_SCALE "
 "DP_ENT_VIEWMODEL "
+"DP_GECKO_SUPPORT "
 "DP_GFX_EXTERNALTEXTURES "
 "DP_GFX_EXTERNALTEXTURES_PERMAP "
 "DP_GFX_FOG "
@@ -53,9 +55,13 @@ char *vm_sv_extensions =
 "DP_MOVETYPEFOLLOW "
 "DP_QC_ASINACOSATANATAN2TAN "
 "DP_QC_CHANGEPITCH "
+"DP_QC_CMD "
 "DP_QC_COPYENTITY "
+"DP_QC_CRC16 "
 "DP_QC_CVAR_DEFSTRING "
 "DP_QC_CVAR_STRING "
+"DP_QC_CVAR_TYPE "
+"DP_QC_EDICT_NUM "
 "DP_QC_ETOS "
 "DP_QC_FINDCHAIN "
 "DP_QC_FINDCHAINFLAGS "
@@ -65,21 +71,25 @@ char *vm_sv_extensions =
 "DP_QC_FS_SEARCH "
 "DP_QC_GETLIGHT "
 "DP_QC_GETSURFACE "
+"DP_QC_GETSURFACEPOINTATTRIBUTE "
 "DP_QC_GETTAGINFO "
 "DP_QC_MINMAXBOUND "
 "DP_QC_MULTIPLETEMPSTRINGS "
+"DP_QC_NUM_FOR_EDICT "
 "DP_QC_RANDOMVEC "
 "DP_QC_SINCOSSQRTPOW "
 "DP_QC_STRFTIME "
-"DP_QC_STRING_CASE_FUNCTIONS "
 "DP_QC_STRINGBUFFERS "
 "DP_QC_STRINGCOLORFUNCTIONS "
+"DP_QC_STRING_CASE_FUNCTIONS "
+"DP_QC_STRREPLACE "
 "DP_QC_TOKENIZEBYSEPARATOR "
 "DP_QC_TRACEBOX "
 "DP_QC_TRACETOSS "
 "DP_QC_TRACE_MOVETYPE_HITMODEL "
 "DP_QC_TRACE_MOVETYPE_WORLDONLY "
 "DP_QC_UNLIMITEDTEMPSTRINGS "
+"DP_QC_URI_ESCAPE "
 "DP_QC_VECTOANGLES_WITH_ROLL "
 "DP_QC_VECTORVECTORS "
 "DP_QUAKE2_MODEL "
@@ -96,15 +106,16 @@ char *vm_sv_extensions =
 "DP_SV_BOTCLIENT "
 "DP_SV_CLIENTCOLORS "
 "DP_SV_CLIENTNAME "
+"DP_SV_CMD "
 "DP_SV_CUSTOMIZEENTITYFORCLIENT "
 "DP_SV_DRAWONLYTOCLIENT "
 "DP_SV_DROPCLIENT "
 "DP_SV_EFFECT "
 "DP_SV_ENTITYCONTENTSTRANSITION "
-"DP_SV_ONENTITYNOSPAWNFUNCTION "
 "DP_SV_MODELFLAGS_AS_EFFECTS "
 "DP_SV_NETADDRESS "
 "DP_SV_NODRAWTOCLIENT "
+"DP_SV_ONENTITYNOSPAWNFUNCTION "
 "DP_SV_PING "
 "DP_SV_PLAYERPHYSICS "
 "DP_SV_POINTPARTICLES "
@@ -114,6 +125,7 @@ char *vm_sv_extensions =
 "DP_SV_PUNCHVECTOR "
 "DP_SV_ROTATINGBMODEL "
 "DP_SV_SETCOLOR "
+"DP_SV_SHUTDOWN "
 "DP_SV_SLOWMO "
 "DP_SV_WRITEUNTERMINATEDSTRING "
 "DP_TE_BLOOD "
@@ -132,8 +144,8 @@ char *vm_sv_extensions =
 "DP_TRACE_HITCONTENTSMASK_SURFACEINFO "
 "DP_VIEWZOOM "
 "EXT_BITSHIFT "
-//"EXT_CSQC " // not ready yet
 "FRIK_FILE "
+"FTE_STRINGS "
 "KRIMZON_SV_PARSECLIENTCOMMAND "
 "NEH_CMD_PLAY2 "
 "NEH_RESTOREGAME "
@@ -142,12 +154,7 @@ char *vm_sv_extensions =
 "PRYDON_CLIENTCURSOR "
 "TENEBRAE_GFX_DLIGHTS "
 "TW_SV_STEPCONTROL "
-"DP_SV_CMD "
-"DP_QC_CMD "
-"FTE_STRINGS "
-"DP_CON_BESTWEAPON "
-"DP_QC_STRREPLACE "
-"DP_QC_CRC16 "
+//"EXT_CSQC " // not ready yet
 ;
 
 /*
@@ -967,18 +974,52 @@ static void VM_SV_droptofloor (void)
        VectorCopy (ent->fields.server->origin, end);
        end[2] -= 256;
 
-       trace = SV_Move (ent->fields.server->origin, ent->fields.server->mins, ent->fields.server->maxs, end, MOVE_NORMAL, ent, SV_GenericHitSuperContentsMask(ent));
+       if (sv_gameplayfix_droptofloorstartsolid_nudgetocorrect.integer)
+               SV_UnstickEntity(ent);
 
-       if (trace.fraction != 1 || (trace.startsolid && sv_gameplayfix_droptofloorstartsolid.integer))
-       {
-               if (trace.fraction < 1)
+       trace = SV_Move (ent->fields.server->origin, ent->fields.server->mins, ent->fields.server->maxs, end, MOVE_NORMAL, ent, SV_GenericHitSuperContentsMask(ent));
+       if (trace.startsolid && sv_gameplayfix_droptofloorstartsolid.integer)
+       {
+               vec3_t offset, org;
+               VectorSet(offset, 0.5f * (ent->fields.server->mins[0] + ent->fields.server->maxs[0]), 0.5f * (ent->fields.server->mins[1] + ent->fields.server->maxs[1]), ent->fields.server->mins[2]);
+               VectorAdd(ent->fields.server->origin, offset, org);
+               trace = SV_Move (org, vec3_origin, vec3_origin, end, MOVE_NORMAL, ent, SV_GenericHitSuperContentsMask(ent));
+               VectorSubtract(trace.endpos, offset, trace.endpos);
+               if (trace.startsolid)
+               {
+                       Con_DPrintf("droptofloor at %f %f %f - COULD NOT FIX BADLY PLACED ENTITY\n", ent->fields.server->origin[0], ent->fields.server->origin[1], ent->fields.server->origin[2]);
+                       SV_UnstickEntity(ent);
+                       SV_LinkEdict (ent, false);
+                       ent->fields.server->flags = (int)ent->fields.server->flags | FL_ONGROUND;
+                       ent->fields.server->groundentity = 0;
+                       PRVM_G_FLOAT(OFS_RETURN) = 1;
+               }
+               else if (trace.fraction < 1)
+               {
+                       Con_DPrintf("droptofloor at %f %f %f - FIXED BADLY PLACED ENTITY\n", ent->fields.server->origin[0], ent->fields.server->origin[1], ent->fields.server->origin[2]);
                        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);
-               PRVM_G_FLOAT(OFS_RETURN) = 1;
-               // if support is destroyed, keep suspended (gross hack for floating items in various maps)
-               ent->priv.server->suspendedinairflag = true;
+                       SV_UnstickEntity(ent);
+                       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);
+                       PRVM_G_FLOAT(OFS_RETURN) = 1;
+                       // if support is destroyed, keep suspended (gross hack for floating items in various maps)
+                       ent->priv.server->suspendedinairflag = true;
+               }
+       }
+       else
+       {
+               if (trace.fraction != 1)
+               {
+                       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);
+                       PRVM_G_FLOAT(OFS_RETURN) = 1;
+                       // if support is destroyed, keep suspended (gross hack for floating items in various maps)
+                       ent->priv.server->suspendedinairflag = true;
+               }
        }
 }
 
@@ -1410,11 +1451,11 @@ void VM_SV_UpdateCustomStats (client_t *client, prvm_edict_t *ent, sizebuf_t *ms
                        stats[i+35] = s[12] + s[13] * 256 + s[14] * 65536 + s[15] * 16777216;
                        break;
                //float field sent as-is
-               case 2:
+               case 8:
                        stats[i+32] = PRVM_E_INT(ent, vm_customstats[i].fieldoffset);
                        break;
                //integer value of float field
-               case 8:
+               case 2:
                        stats[i+32] = (int)PRVM_E_FLOAT(ent, vm_customstats[i].fieldoffset);
                        break;
                default:
@@ -3305,11 +3346,31 @@ NULL,                                                   // #491
 NULL,                                                  // #492
 NULL,                                                  // #493
 VM_crc16,                                              // #494 float(float caseinsensitive, string s, ...) crc16 = #494 (DP_QC_CRC16)
-NULL,                                                  // #495
+VM_cvar_type,                                  // #495 float(string name) cvar_type = #495; (DP_QC_CVAR_TYPE)
 NULL,                                                  // #496
 NULL,                                                  // #497
 NULL,                                                  // #498
 NULL,                                                  // #499
+NULL,                                                  // #500
+NULL,                                                  // #501
+NULL,                                                  // #502
+NULL,                                                  // #503
+NULL,                                                  // #504
+NULL,                                                  // #505
+NULL,                                                  // #506
+NULL,                                                  // #507
+NULL,                                                  // #508
+NULL,                                                  // #509
+VM_uri_escape,                                 // #510 string(string in) uri_escape = #510;
+VM_uri_unescape,                               // #511 string(string in) uri_unescape = #511;
+VM_etof,                                       // #512 float(entity ent) num_for_edict = #512 (DP_QC_NUM_FOR_EDICT)
+NULL,                                                  // #513
+NULL,                                                  // #514
+NULL,                                                  // #515
+NULL,                                                  // #516
+NULL,                                                  // #517
+NULL,                                                  // #518
+NULL,                                                  // #519
 };
 
 const int vm_sv_numbuiltins = sizeof(vm_sv_builtins) / sizeof(prvm_builtin_t);