X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=svvm_cmds.c;h=acc1d184086680dbf371ad48f9262a26bae80342;hb=8cabb44fef43e034df597cf69427d444203f3719;hp=5c7de143dd0a572b4b263273060128f09c967fd6;hpb=5070a71b37b3dde085b45ff86fd36c5bb274a039;p=xonotic%2Fdarkplaces.git diff --git a/svvm_cmds.c b/svvm_cmds.c index 5c7de143..acc1d184 100644 --- a/svvm_cmds.c +++ b/svvm_cmds.c @@ -21,7 +21,8 @@ const char *vm_sv_extensions = "DP_CON_STARTMAP " "DP_CRYPTO " "DP_CSQC_BINDMAPS " -"DP_CSQC_ENTITYNOCULL " +"DP_CSQC_ENTITYWORLDOBJECT " +"DP_CSQC_ENTITYMODELLIGHT " "DP_CSQC_ENTITYTRANSPARENTSORTING_OFFSET " "DP_CSQC_MULTIFRAME_INTERPOLATION " "DP_CSQC_BOXPARTICLES " @@ -53,7 +54,6 @@ const char *vm_sv_extensions = "DP_ENT_SCALE " "DP_ENT_TRAILEFFECTNUM " "DP_ENT_VIEWMODEL " -"DP_GECKO_SUPPORT " "DP_GFX_EXTERNALTEXTURES " "DP_GFX_EXTERNALTEXTURES_PERMAP " "DP_GFX_FOG " @@ -74,6 +74,7 @@ const char *vm_sv_extensions = "DP_LITSUPPORT " "DP_MONSTERWALK " "DP_MOVETYPEBOUNCEMISSILE " +"DP_MOVETYPEFLYWORLDONLY " "DP_MOVETYPEFOLLOW " "DP_NULL_MODEL " "DP_QC_ASINACOSATANATAN2TAN " @@ -86,6 +87,8 @@ const char *vm_sv_extensions = "DP_QC_CVAR_DESCRIPTION " "DP_QC_CVAR_STRING " "DP_QC_CVAR_TYPE " +"DP_QC_DIGEST " +"DP_QC_DIGEST_SHA256 " "DP_QC_EDICT_NUM " "DP_QC_ENTITYDATA " "DP_QC_ENTITYSTRING " @@ -106,6 +109,7 @@ const char *vm_sv_extensions = "DP_QC_GETTAGINFO_BONEPROPERTIES " "DP_QC_GETTIME " "DP_QC_GETTIME_CDTRACK " +"DP_QC_I18N " "DP_QC_LOG " "DP_QC_MINMAXBOUND " "DP_QC_MULTIPLETEMPSTRINGS " @@ -140,6 +144,8 @@ const char *vm_sv_extensions = "DP_SKELETONOBJECTS " "DP_SND_DIRECTIONLESSATTNNONE " "DP_SND_FAKETRACKS " +"DP_SND_SOUND7_WIP1 " +"DP_SND_SOUND7_WIP2 " "DP_SND_OGGVORBIS " "DP_SND_SETPARAMS " "DP_SND_STEREOWAV " @@ -510,20 +516,39 @@ static void VM_SV_sound (void) int channel; prvm_edict_t *entity; int volume; + int flags; float attenuation; + float pitchchange; - VM_SAFEPARMCOUNTRANGE(4, 5, VM_SV_sound); + VM_SAFEPARMCOUNTRANGE(4, 7, VM_SV_sound); entity = PRVM_G_EDICT(OFS_PARM0); channel = (int)PRVM_G_FLOAT(OFS_PARM1); sample = PRVM_G_STRING(OFS_PARM2); volume = (int)(PRVM_G_FLOAT(OFS_PARM3) * 255); - attenuation = PRVM_G_FLOAT(OFS_PARM4); if (prog->argc < 5) { Con_DPrintf("VM_SV_sound: given only 4 parameters, expected 5, assuming attenuation = ATTN_NORMAL\n"); attenuation = 1; } + else + attenuation = PRVM_G_FLOAT(OFS_PARM4); + if (prog->argc < 6) + pitchchange = 0; + else + pitchchange = PRVM_G_FLOAT(OFS_PARM5) * 0.01f; + + if (prog->argc < 7) + { + flags = 0; + if(channel >= 8 && channel <= 15) // weird QW feature + { + flags |= CHANFLAG_RELIABLE; + channel -= 8; + } + } + else + flags = PRVM_G_FLOAT(OFS_PARM6); if (volume < 0 || volume > 255) { @@ -537,13 +562,15 @@ static void VM_SV_sound (void) return; } - if (channel < 0 || channel > 7) + channel = CHAN_USER2ENGINE(channel); + + if (!IS_CHAN(channel)) { - VM_Warning("SV_StartSound: channel must be in range 0-7\n"); + VM_Warning("SV_StartSound: channel must be in range 0-127\n"); return; } - SV_StartSound (entity, channel, sample, volume, attenuation); + SV_StartSound (entity, channel, sample, volume, attenuation, flags & CHANFLAG_RELIABLE, pitchchange); } /* @@ -561,14 +588,16 @@ static void VM_SV_pointsound(void) const char *sample; int volume; float attenuation; + float pitchchange; vec3_t org; - VM_SAFEPARMCOUNT(4, VM_SV_pointsound); + VM_SAFEPARMCOUNTRANGE(4, 5, VM_SV_pointsound); VectorCopy(PRVM_G_VECTOR(OFS_PARM0), org); sample = PRVM_G_STRING(OFS_PARM1); volume = (int)(PRVM_G_FLOAT(OFS_PARM2) * 255); attenuation = PRVM_G_FLOAT(OFS_PARM3); + pitchchange = prog->argc < 5 ? 0 : PRVM_G_FLOAT(OFS_PARM4) * 0.01f; if (volume < 0 || volume > 255) { @@ -582,7 +611,7 @@ static void VM_SV_pointsound(void) return; } - SV_StartPointSound (org, sample, volume, attenuation); + SV_StartPointSound (org, sample, volume, attenuation, pitchchange); } /* @@ -964,7 +993,7 @@ static void VM_SV_findradius (void) maxs[0] = org[0] + (radius + 1); maxs[1] = org[1] + (radius + 1); maxs[2] = org[2] + (radius + 1); - numtouchedicts = World_EntitiesInBox(&sv.world, mins, maxs, MAX_EDICTS, touchedicts); + numtouchedicts = SV_EntitiesInBox(mins, maxs, MAX_EDICTS, touchedicts); if (numtouchedicts > MAX_EDICTS) { // this never happens @@ -1078,6 +1107,7 @@ VM_SV_droptofloor void() droptofloor =============== */ + static void VM_SV_droptofloor (void) { prvm_edict_t *ent; @@ -1105,7 +1135,8 @@ static void VM_SV_droptofloor (void) end[2] -= 256; if (sv_gameplayfix_droptofloorstartsolid_nudgetocorrect.integer) - SV_UnstickEntity(ent); + if (sv_gameplayfix_unstickentities.integer) + SV_UnstickEntity(ent); trace = SV_TraceBox(PRVM_serveredictvector(ent, origin), PRVM_serveredictvector(ent, mins), PRVM_serveredictvector(ent, maxs), end, MOVE_NORMAL, ent, SV_GenericHitSuperContentsMask(ent)); if (trace.startsolid && sv_gameplayfix_droptofloorstartsolid.integer) @@ -1118,7 +1149,8 @@ static void VM_SV_droptofloor (void) if (trace.startsolid) { Con_DPrintf("droptofloor at %f %f %f - COULD NOT FIX BADLY PLACED ENTITY\n", PRVM_serveredictvector(ent, origin)[0], PRVM_serveredictvector(ent, origin)[1], PRVM_serveredictvector(ent, origin)[2]); - SV_UnstickEntity(ent); + if (sv_gameplayfix_unstickentities.integer) + SV_UnstickEntity(ent); SV_LinkEdict(ent); PRVM_serveredictfloat(ent, flags) = (int)PRVM_serveredictfloat(ent, flags) | FL_ONGROUND; PRVM_serveredictedict(ent, groundentity) = 0; @@ -1128,7 +1160,8 @@ static void VM_SV_droptofloor (void) { Con_DPrintf("droptofloor at %f %f %f - FIXED BADLY PLACED ENTITY\n", PRVM_serveredictvector(ent, origin)[0], PRVM_serveredictvector(ent, origin)[1], PRVM_serveredictvector(ent, origin)[2]); VectorCopy (trace.endpos, PRVM_serveredictvector(ent, origin)); - SV_UnstickEntity(ent); + if (sv_gameplayfix_unstickentities.integer) + SV_UnstickEntity(ent); SV_LinkEdict(ent); PRVM_serveredictfloat(ent, flags) = (int)PRVM_serveredictfloat(ent, flags) | FL_ONGROUND; PRVM_serveredictedict(ent, groundentity) = PRVM_EDICT_TO_PROG(trace.ent); @@ -2282,7 +2315,7 @@ static void VM_SV_clientcommand (void) temp_client = host_client; host_client = svs.clients + i; - Cmd_ExecuteString (PRVM_G_STRING(OFS_PARM1), src_client); + Cmd_ExecuteString (PRVM_G_STRING(OFS_PARM1), src_client, true); host_client = temp_client; } @@ -3756,6 +3789,16 @@ VM_sprintf, // #627 string sprintf(string format, ...) VM_getsurfacenumtriangles, // #628 float(entity e, float s) getsurfacenumpoints (DP_QC_GETSURFACETRIANGLE) VM_getsurfacetriangle, // #629 vector(entity e, float s, float n) getsurfacepoint (DP_QC_GETSURFACETRIANGLE) NULL, // #630 +NULL, // #631 +NULL, // #632 +NULL, // #633 +NULL, // #634 +NULL, // #635 +NULL, // #636 +NULL, // #637 +NULL, // #638 +VM_digest_hex, // #639 +NULL, // #640 }; const int vm_sv_numbuiltins = sizeof(vm_sv_builtins) / sizeof(prvm_builtin_t);