X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=svvm_cmds.c;h=5700b21aca1a34d8fcf9e2b5422c4bfba0fa980e;hb=55fdd472aa5f61698dbc7fc20406d5342dde3648;hp=92b004dc66e4bf264762a578f4882dfa02c7a05e;hpb=ad5cb10c4f5822f86287b97f46eca90ca67ca82c;p=xonotic%2Fdarkplaces.git diff --git a/svvm_cmds.c b/svvm_cmds.c index 92b004dc..5700b21a 100644 --- a/svvm_cmds.c +++ b/svvm_cmds.c @@ -98,12 +98,14 @@ char *vm_sv_extensions = "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_PING " "DP_SV_PLAYERPHYSICS " "DP_SV_POINTPARTICLES " +"DP_SV_POINTSOUND " "DP_SV_PRECACHEANYTIME " "DP_SV_PRINT " "DP_SV_PUNCHVECTOR " @@ -139,6 +141,9 @@ char *vm_sv_extensions = "TW_SV_STEPCONTROL " "DP_SV_CMD " "DP_QC_CMD " +"FTE_STRINGS " +"DP_CON_BESTWEAPON " +"DP_QC_STRREPLACE " ; /* @@ -405,7 +410,7 @@ static void VM_SV_ambientsound (void) MSG_WriteVector(&sv.signon, pos, sv.protocol); - if (large) + if (large || sv.protocol == PROTOCOL_NEHAHRABJP || sv.protocol == PROTOCOL_NEHAHRABJP2 || sv.protocol == PROTOCOL_NEHAHRABJP3) MSG_WriteShort (&sv.signon, soundnum); else MSG_WriteByte (&sv.signon, soundnum); @@ -472,6 +477,45 @@ static void VM_SV_sound (void) SV_StartSound (entity, channel, sample, volume, attenuation); } +/* +================= +VM_SV_pointsound + +Follows the same logic as VM_SV_sound, except instead of +an entity, an origin for the sound is provided, and channel +is omitted (since no entity is being tracked). + +================= +*/ +static void VM_SV_pointsound(void) +{ + const char *sample; + int volume; + float attenuation; + vec3_t org; + + VM_SAFEPARMCOUNT(4, 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); + + if (volume < 0 || volume > 255) + { + VM_Warning("SV_StartPointSound: volume must be in range 0-1\n"); + return; + } + + if (attenuation < 0 || attenuation > 4) + { + VM_Warning("SV_StartPointSound: attenuation must be in range 0-4\n"); + return; + } + + SV_StartPointSound (org, sample, volume, attenuation); +} + /* ================= VM_SV_traceline @@ -654,7 +698,7 @@ static int VM_SV_newcheckclient (int check) VectorAdd(ent->fields.server->origin, ent->fields.server->view_ofs, org); checkpvsbytes = 0; if (sv.worldmodel && sv.worldmodel->brush.FatPVS) - checkpvsbytes = sv.worldmodel->brush.FatPVS(sv.worldmodel, org, 0, checkpvs, sizeof(checkpvs)); + checkpvsbytes = sv.worldmodel->brush.FatPVS(sv.worldmodel, org, 0, checkpvs, sizeof(checkpvs), false); return i; } @@ -805,7 +849,7 @@ static void VM_SV_findradius (void) eorg[2] -= bound(ent->fields.server->mins[2], eorg[2], ent->fields.server->maxs[2]); } else - VectorMAMAM(1, eorg, 0.5f, ent->fields.server->mins, 0.5f, ent->fields.server->maxs, eorg); + VectorMAMAM(1, eorg, -0.5f, ent->fields.server->mins, -0.5f, ent->fields.server->maxs, eorg); if (DotProduct(eorg, eorg) < radius2) { ent->fields.server->chain = PRVM_EDICT_TO_PROG(chain); @@ -1240,6 +1284,12 @@ static void VM_SV_makestatic (void) MSG_WriteShort (&sv.signon, (int)ent->fields.server->modelindex); MSG_WriteShort (&sv.signon, (int)ent->fields.server->frame); } + else if (sv.protocol == PROTOCOL_NEHAHRABJP || sv.protocol == PROTOCOL_NEHAHRABJP2 || sv.protocol == PROTOCOL_NEHAHRABJP3) + { + MSG_WriteByte (&sv.signon,svc_spawnstatic); + MSG_WriteShort (&sv.signon, (int)ent->fields.server->modelindex); + MSG_WriteByte (&sv.signon, (int)ent->fields.server->frame); + } else { MSG_WriteByte (&sv.signon,svc_spawnstatic); @@ -2902,16 +2952,16 @@ NULL, // #217 VM_bitshift, // #218 float(float number, float quantity) bitshift (EXT_BITSHIFT) NULL, // #219 NULL, // #220 -NULL, // #221 +VM_strstrofs, // #221 float(string str, string sub[, float startpos]) strstrofs (FTE_STRINGS) VM_str2chr, // #222 float(string str, float ofs) str2chr (FTE_STRINGS) VM_chr2str, // #223 string(float c, ...) chr2str (FTE_STRINGS) -NULL, // #224 -NULL, // #225 -NULL, // #226 -NULL, // #227 +VM_strconv, // #224 string(float ccase, float calpha, float cnum, string s, ...) strconv (FTE_STRINGS) +VM_strpad, // #225 string(float chars, string s, ...) strpad (FTE_STRINGS) +VM_infoadd, // #226 string(string info, string key, string value, ...) infoadd (FTE_STRINGS) +VM_infoget, // #227 string(string info, string key) infoget (FTE_STRINGS) VM_strncmp, // #228 float(string s1, string s2, float len) strncmp (FTE_STRINGS) -NULL, // #229 -NULL, // #230 +VM_strncasecmp, // #229 float(string s1, string s2) strcasecmp (FTE_STRINGS) +VM_strncasecmp, // #230 float(string s1, string s2, float len) strncasecmp (FTE_STRINGS) NULL, // #231 VM_SV_AddStat, // #232 void(float index, float type, .void field) SV_AddStat (EXT_CSQC) NULL, // #233 @@ -3127,10 +3177,10 @@ VM_SV_clientcommand, // #440 void(entity e, string s) clientcommand (KRIMZON_S VM_tokenize, // #441 float(string s) tokenize (KRIMZON_SV_PARSECLIENTCOMMAND) VM_argv, // #442 string(float n) argv (KRIMZON_SV_PARSECLIENTCOMMAND) VM_SV_setattachment, // #443 void(entity e, entity tagentity, string tagname) setattachment (DP_GFX_QUAKE3MODELTAGS) -VM_search_begin, // #444 float(string pattern, float caseinsensitive, float quiet) search_begin (DP_FS_SEARCH) -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_search_begin, // #444 float(string pattern, float caseinsensitive, float quiet) search_begin (DP_QC_FS_SEARCH) +VM_search_end, // #445 void(float handle) search_end (DP_QC_FS_SEARCH) +VM_search_getsize, // #446 float(float handle) search_getsize (DP_QC_FS_SEARCH) +VM_search_getfilename, // #447 string(float handle, float num) search_getfilename (DP_QC_FS_SEARCH) VM_cvar_string, // #448 string(string s) cvar_string (DP_QC_CVAR_STRING) 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) @@ -3166,9 +3216,9 @@ VM_tokenizebyseparator, // #479 float(string s) tokenizebyseparator (DP_QC_TOK VM_strtolower, // #480 string(string s) VM_strtolower (DP_QC_STRING_CASE_FUNCTIONS) VM_strtoupper, // #481 string(string s) VM_strtoupper (DP_QC_STRING_CASE_FUNCTIONS) VM_cvar_defstring, // #482 string(string s) cvar_defstring (DP_QC_CVAR_DEFSTRING) -NULL, // #483 -NULL, // #484 -NULL, // #485 +VM_SV_pointsound, // #483 void(vector origin, string sample, float volume, float attenuation) (DP_SV_POINTSOUND) +VM_strreplace, // #484 string(string search, string replace, string subject) strreplace (DP_QC_STRREPLACE) +VM_strireplace, // #485 string(string search, string replace, string subject) strireplace (DP_QC_STRREPLACE) NULL, // #486 NULL, // #487 NULL, // #488