DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
svvm_cmds.c File Reference
#include "quakedef.h"
#include "prvm_cmds.h"
#include "jpeg.h"
+ Include dependency graph for svvm_cmds.c:

Go to the source code of this file.

Data Structures

struct  customstat_t
 

Macros

#define MSG_ALL   2
 
#define MSG_BROADCAST   0
 
#define MSG_ENTITY   5
 
#define MSG_INIT   3
 
#define MSG_ONE   1
 

Functions

static qbool droptofloor_bsp_failcond (trace_t *trace)
 
static void SetMinMaxSize (prvm_prog_t *prog, prvm_edict_t *e, float *min, float *max, qbool rotate)
 
static int SV_GetEntityLocalTagMatrix (prvm_prog_t *prog, prvm_edict_t *ent, int tagindex, matrix4x4_t *out)
 
void SV_GetEntityMatrix (prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qbool viewmatrix)
 
static int SV_GetExtendedTagInfo (prvm_prog_t *prog, prvm_edict_t *e, int tagindex, int *parentindex, const char **tagname, matrix4x4_t *tag_localmatrix)
 
static int SV_GetTagIndex (prvm_prog_t *prog, prvm_edict_t *e, const char *tagname)
 
static int SV_GetTagMatrix (prvm_prog_t *prog, matrix4x4_t *out, prvm_edict_t *ent, int tagindex)
 
static trace_t SV_Trace_Toss (prvm_prog_t *prog, prvm_edict_t *tossent, prvm_edict_t *ignore)
 
qbool SV_VM_ConsoleCommand (const char *text, size_t textlen)
 
void SVVM_init_cmd (prvm_prog_t *prog)
 
void SVVM_reset_cmd (prvm_prog_t *prog)
 
void VM_CustomStats_Clear (void)
 
static void VM_SV_AddStat (prvm_prog_t *prog)
 
static void VM_SV_aim (prvm_prog_t *prog)
 
static void VM_SV_ambientsound (prvm_prog_t *prog)
 
static void VM_SV_centerprint (prvm_prog_t *prog)
 
static void VM_SV_checkbottom (prvm_prog_t *prog)
 
static void VM_SV_checkclient (prvm_prog_t *prog)
 
static void VM_SV_checkpvs (prvm_prog_t *prog)
 
static void VM_SV_clientcommand (prvm_prog_t *prog)
 
static void VM_SV_clienttype (prvm_prog_t *prog)
 
static void VM_SV_copyentity (prvm_prog_t *prog)
 
static void VM_SV_dropclient (prvm_prog_t *prog)
 
static void VM_SV_droptofloor (prvm_prog_t *prog)
 
static void VM_SV_effect (prvm_prog_t *prog)
 
static void VM_SV_findbox (prvm_prog_t *prog)
 
static void VM_SV_findradius (prvm_prog_t *prog)
 
static void VM_SV_frameduration (prvm_prog_t *prog)
 
static void VM_SV_frameforname (prvm_prog_t *prog)
 
static void VM_SV_getlight (prvm_prog_t *prog)
 
static void VM_SV_gettagindex (prvm_prog_t *prog)
 
static void VM_SV_gettaginfo (prvm_prog_t *prog)
 
static void VM_SV_lightstyle (prvm_prog_t *prog)
 
static void VM_SV_makestatic (prvm_prog_t *prog)
 
static void VM_SV_modelnameforindex (prvm_prog_t *prog)
 
static int VM_SV_newcheckclient (prvm_prog_t *prog, int check)
 
static void VM_SV_particle (prvm_prog_t *prog)
 
static void VM_SV_particleeffectnum (prvm_prog_t *prog)
 
static void VM_SV_pointcontents (prvm_prog_t *prog)
 
static void VM_SV_pointparticles (prvm_prog_t *prog)
 
static void VM_SV_pointsound (prvm_prog_t *prog)
 
static void VM_SV_precache_model (prvm_prog_t *prog)
 
static void VM_SV_precache_sound (prvm_prog_t *prog)
 
static void VM_SV_registercommand (prvm_prog_t *prog)
 
static void VM_SV_serverkey (prvm_prog_t *prog)
 
static void VM_SV_setattachment (prvm_prog_t *prog)
 
static void VM_SV_setcolor (prvm_prog_t *prog)
 
static void VM_SV_setmodel (prvm_prog_t *prog)
 
static void VM_SV_setmodelindex (prvm_prog_t *prog)
 
static void VM_SV_setorigin (prvm_prog_t *prog)
 
static void VM_SV_setpause (prvm_prog_t *prog)
 
static void VM_SV_setsize (prvm_prog_t *prog)
 
static void VM_SV_setspawnparms (prvm_prog_t *prog)
 
static void VM_SV_skel_build (prvm_prog_t *prog)
 
static void VM_SV_skel_copybones (prvm_prog_t *prog)
 
static void VM_SV_skel_create (prvm_prog_t *prog)
 
static void VM_SV_skel_delete (prvm_prog_t *prog)
 
static void VM_SV_skel_find_bone (prvm_prog_t *prog)
 
static void VM_SV_skel_get_boneabs (prvm_prog_t *prog)
 
static void VM_SV_skel_get_bonename (prvm_prog_t *prog)
 
static void VM_SV_skel_get_boneparent (prvm_prog_t *prog)
 
static void VM_SV_skel_get_bonerel (prvm_prog_t *prog)
 
static void VM_SV_skel_get_numbones (prvm_prog_t *prog)
 
static void VM_SV_skel_mul_bone (prvm_prog_t *prog)
 
static void VM_SV_skel_mul_bones (prvm_prog_t *prog)
 
static void VM_SV_skel_set_bone (prvm_prog_t *prog)
 
static void VM_SV_sound (prvm_prog_t *prog)
 
static void VM_SV_spawnclient (prvm_prog_t *prog)
 
static void VM_SV_sprint (prvm_prog_t *prog)
 
static void VM_SV_stuffcmd (prvm_prog_t *prog)
 
static void VM_SV_te_beam (prvm_prog_t *prog)
 
static void VM_SV_te_blood (prvm_prog_t *prog)
 
static void VM_SV_te_bloodshower (prvm_prog_t *prog)
 
static void VM_SV_te_customflash (prvm_prog_t *prog)
 
static void VM_SV_te_explosion (prvm_prog_t *prog)
 
static void VM_SV_te_explosion2 (prvm_prog_t *prog)
 
static void VM_SV_te_explosionquad (prvm_prog_t *prog)
 
static void VM_SV_te_explosionrgb (prvm_prog_t *prog)
 
static void VM_SV_te_flamejet (prvm_prog_t *prog)
 
static void VM_SV_te_gunshot (prvm_prog_t *prog)
 
static void VM_SV_te_gunshotquad (prvm_prog_t *prog)
 
static void VM_SV_te_knightspike (prvm_prog_t *prog)
 
static void VM_SV_te_lavasplash (prvm_prog_t *prog)
 
static void VM_SV_te_lightning1 (prvm_prog_t *prog)
 
static void VM_SV_te_lightning2 (prvm_prog_t *prog)
 
static void VM_SV_te_lightning3 (prvm_prog_t *prog)
 
static void VM_SV_te_particlecube (prvm_prog_t *prog)
 
static void VM_SV_te_particlerain (prvm_prog_t *prog)
 
static void VM_SV_te_particlesnow (prvm_prog_t *prog)
 
static void VM_SV_te_plasmaburn (prvm_prog_t *prog)
 
static void VM_SV_te_smallflash (prvm_prog_t *prog)
 
static void VM_SV_te_spark (prvm_prog_t *prog)
 
static void VM_SV_te_spike (prvm_prog_t *prog)
 
static void VM_SV_te_spikequad (prvm_prog_t *prog)
 
static void VM_SV_te_superspike (prvm_prog_t *prog)
 
static void VM_SV_te_superspikequad (prvm_prog_t *prog)
 
static void VM_SV_te_tarexplosion (prvm_prog_t *prog)
 
static void VM_SV_te_teleport (prvm_prog_t *prog)
 
static void VM_SV_te_wizspike (prvm_prog_t *prog)
 
static void VM_SV_tracebox (prvm_prog_t *prog)
 
static void VM_SV_traceline (prvm_prog_t *prog)
 
static void VM_SV_tracetoss (prvm_prog_t *prog)
 
static void VM_SV_trailparticles (prvm_prog_t *prog)
 
void VM_SV_UpdateCustomStats (client_t *client, prvm_edict_t *ent, sizebuf_t *msg, int *stats)
 
static void VM_SV_walkmove (prvm_prog_t *prog)
 
static void VM_SV_WriteAngle (prvm_prog_t *prog)
 
static void VM_SV_WriteByte (prvm_prog_t *prog)
 
static void VM_SV_WriteChar (prvm_prog_t *prog)
 
static void VM_SV_WriteCoord (prvm_prog_t *prog)
 
static void VM_SV_WriteEntity (prvm_prog_t *prog)
 
static void VM_SV_WriteLong (prvm_prog_t *prog)
 
static void VM_SV_WritePicture (prvm_prog_t *prog)
 
static void VM_SV_WriteShort (prvm_prog_t *prog)
 
static void VM_SV_WriteString (prvm_prog_t *prog)
 
static void VM_SV_WriteUnterminatedString (prvm_prog_t *prog)
 
static sizebuf_tWriteDest (prvm_prog_t *prog)
 

Variables

int c_invis
 
int c_notvis
 
static unsigned char * checkpvs
 
static vec3_t quakemaxs = {16, 16, 16}
 
static vec3_t quakemins = {-16, -16, -16}
 
cvar_t sv_qcstats
 
static customstat_t vm_customstats [MAX_CL_STATS]
 
static int vm_customstats_last
 
prvm_builtin_t vm_sv_builtins []
 
const char * vm_sv_extensions []
 client also uses this
 
const int vm_sv_numbuiltins = sizeof(vm_sv_builtins) / sizeof(prvm_builtin_t)
 

Macro Definition Documentation

◆ MSG_ALL

#define MSG_ALL   2

Definition at line 1452 of file svvm_cmds.c.

Referenced by WriteDest().

◆ MSG_BROADCAST

#define MSG_BROADCAST   0

Definition at line 1450 of file svvm_cmds.c.

Referenced by WriteDest().

◆ MSG_ENTITY

#define MSG_ENTITY   5

Definition at line 1454 of file svvm_cmds.c.

Referenced by WriteDest().

◆ MSG_INIT

#define MSG_INIT   3

Definition at line 1453 of file svvm_cmds.c.

Referenced by WriteDest().

◆ MSG_ONE

#define MSG_ONE   1

Definition at line 1451 of file svvm_cmds.c.

Referenced by WriteDest().

Function Documentation

◆ droptofloor_bsp_failcond()

static qbool droptofloor_bsp_failcond ( trace_t * trace)
inlinestatic

Definition at line 1181 of file svvm_cmds.c.

1182{
1183 if (sv.worldmodel->brush.isq3bsp || sv.worldmodel->brush.isq2bsp)
1184 return trace->startsolid;
1185 else
1186 return trace->allsolid || trace->fraction == 1;
1187}
server_t sv
local server
Definition sv_main.c:223
struct model_s * worldmodel
Definition server.h:112
double fraction
Definition collision.h:40
qbool allsolid
Definition collision.h:24
qbool startsolid
Definition collision.h:26

References trace_t::allsolid, trace_t::fraction, trace_t::startsolid, sv, and server_t::worldmodel.

Referenced by VM_SV_droptofloor().

◆ SetMinMaxSize()

static void SetMinMaxSize ( prvm_prog_t * prog,
prvm_edict_t * e,
float * min,
float * max,
qbool rotate )
static

Definition at line 271 of file svvm_cmds.c.

272{
273 int i;
274
275 for (i=0 ; i<3 ; i++)
276 if (min[i] > max[i])
277 prog->error_cmd("SetMinMaxSize: backwards mins/maxs");
278
279// set derived values
283
284 SV_LinkEdict(e);
285}
vector size
vector mins
vector maxs
#define max(A, B)
Definition mathlib.h:38
#define min(A, B)
Definition mathlib.h:37
#define VectorSubtract(a, b, out)
Definition mathlib.h:99
#define VectorCopy(in, out)
Definition mathlib.h:101
#define PRVM_serveredictvector(ed, fieldname)
Definition progsvm.h:173
int i
void SV_LinkEdict(prvm_edict_t *ent)
Definition sv_phys.c:804
void(* error_cmd)(const char *format,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
[INIT]
Definition progsvm.h:747

References prvm_prog_t::error_cmd, i, max, maxs, min, mins, PRVM_serveredictvector, size, SV_LinkEdict(), VectorCopy, and VectorSubtract.

Referenced by VM_SV_setmodel(), VM_SV_setmodelindex(), and VM_SV_setsize().

◆ SV_GetEntityLocalTagMatrix()

static int SV_GetEntityLocalTagMatrix ( prvm_prog_t * prog,
prvm_edict_t * ent,
int tagindex,
matrix4x4_t * out )
static

Definition at line 2536 of file svvm_cmds.c.

2537{
2538 model_t *model;
2539 if (tagindex >= 0 && (model = SV_GetModelFromEdict(ent)) && model->animscenes)
2540 {
2541 VM_GenerateFrameGroupBlend(prog, ent->priv.server->framegroupblend, ent);
2542 VM_FrameBlendFromFrameGroupBlend(ent->priv.server->frameblend, ent->priv.server->framegroupblend, model, sv.time);
2543 VM_UpdateEdictSkeleton(prog, ent, model, ent->priv.server->frameblend);
2544 return Mod_Alias_GetTagMatrix(model, ent->priv.server->frameblend, &ent->priv.server->skeleton, tagindex, out);
2545 }
2546 *out = identitymatrix;
2547 return 0;
2548}
string model
const matrix4x4_t identitymatrix
Definition matrixlib.c:9
int Mod_Alias_GetTagMatrix(const model_t *model, const frameblend_t *frameblend, const skeleton_t *skeleton, int tagindex, matrix4x4_t *outmatrix)
void VM_UpdateEdictSkeleton(prvm_prog_t *prog, prvm_edict_t *ed, const struct model_s *edmodel, const struct frameblend_s *frameblend)
void VM_GenerateFrameGroupBlend(prvm_prog_t *prog, struct framegroupblend_s *framegroupblend, const prvm_edict_t *ed)
void VM_FrameBlendFromFrameGroupBlend(struct frameblend_s *frameblend, const struct framegroupblend_s *framegroupblend, const struct model_s *model, double curtime)
model_t * SV_GetModelFromEdict(prvm_edict_t *ed)
Definition sv_main.c:1612
union prvm_edict_t::@29 priv
struct edict_engineprivate_s * server
FIXME: this server pointer really means world, not server (it is used by both server qc and client qc...
Definition progsvm.h:106
double time
Definition server.h:76

References identitymatrix, Mod_Alias_GetTagMatrix(), model, prvm_edict_t::priv, prvm_edict_t::server, sv, SV_GetModelFromEdict(), server_t::time, VM_FrameBlendFromFrameGroupBlend(), VM_GenerateFrameGroupBlend(), and VM_UpdateEdictSkeleton().

Referenced by SV_GetTagMatrix().

◆ SV_GetEntityMatrix()

void SV_GetEntityMatrix ( prvm_prog_t * prog,
prvm_edict_t * ent,
matrix4x4_t * out,
qbool viewmatrix )

Definition at line 2518 of file svvm_cmds.c.

2519{
2520 float scale;
2521 float pitchsign = 1;
2522
2524 if (!scale)
2525 scale = 1.0f;
2526
2527 if (viewmatrix)
2529 else
2530 {
2531 pitchsign = SV_GetPitchSign(prog, ent);
2533 }
2534}
vector angles
vector origin
float scale
void Matrix4x4_CreateFromQuakeEntity(matrix4x4_t *out, double x, double y, double z, double pitch, double yaw, double roll, double scale)
Definition matrixlib.c:715
vector v_angle
Definition progsdefs.qc:161
vector view_ofs
Definition progsdefs.qc:151
#define PRVM_serveredictfloat(ed, fieldname)
Definition progsvm.h:172
cvar_t cl_viewmodel_scale
Definition view.c:82
int SV_GetPitchSign(prvm_prog_t *prog, prvm_edict_t *ent)
Definition sv_phys.c:47
float value
Definition cvar.h:74

References angles, cl_viewmodel_scale, Matrix4x4_CreateFromQuakeEntity(), origin, PRVM_serveredictfloat, PRVM_serveredictvector, scale, SV_GetPitchSign(), v_angle, cvar_t::value, and view_ofs.

Referenced by getmatrix(), SV_Ent_Create_f(), SV_Ent_Remove_f(), and SV_GetTagMatrix().

◆ SV_GetExtendedTagInfo()

static int SV_GetExtendedTagInfo ( prvm_prog_t * prog,
prvm_edict_t * e,
int tagindex,
int * parentindex,
const char ** tagname,
matrix4x4_t * tag_localmatrix )
static

Definition at line 2496 of file svvm_cmds.c.

2497{
2498 int r;
2499 model_t *model;
2500
2501 *tagname = NULL;
2502 *parentindex = 0;
2503 Matrix4x4_CreateIdentity(tag_localmatrix);
2504
2505 if (tagindex >= 0 && (model = SV_GetModelFromEdict(e)) && model->num_bones)
2506 {
2507 r = Mod_Alias_GetExtendedTagInfoForIndex(model, (int)PRVM_serveredictfloat(e, skin), e->priv.server->frameblend, &e->priv.server->skeleton, tagindex - 1, parentindex, tagname, tag_localmatrix);
2508
2509 if(!r) // success?
2510 *parentindex += 1;
2511
2512 return r;
2513 }
2514
2515 return 1;
2516}
float skin
void Matrix4x4_CreateIdentity(matrix4x4_t *out)
Definition matrixlib.c:564
int Mod_Alias_GetExtendedTagInfoForIndex(const model_t *model, unsigned int skin, const frameblend_t *frameblend, const skeleton_t *skeleton, int tagindex, int *parentindex, const char **tagname, matrix4x4_t *tag_localmatrix)
#define NULL
Definition qtypes.h:12
dp_FragColor r

References Matrix4x4_CreateIdentity(), Mod_Alias_GetExtendedTagInfoForIndex(), model, NULL, prvm_edict_t::priv, PRVM_serveredictfloat, r, prvm_edict_t::server, skin, and SV_GetModelFromEdict().

Referenced by VM_SV_gettaginfo().

◆ SV_GetTagIndex()

static int SV_GetTagIndex ( prvm_prog_t * prog,
prvm_edict_t * e,
const char * tagname )
static

Definition at line 2485 of file svvm_cmds.c.

2486{
2487 int i;
2488
2491 return -1;
2492
2494}
float modelindex
static int(ZEXPORT *qz_inflate)(z_stream *strm
int Mod_Alias_GetTagIndexForName(const model_t *model, unsigned int skin, const char *tagname)
#define MAX_MODELS
max number of models loaded at once (including during level transitions)
Definition qdefs.h:106
model_t * SV_GetModelByIndex(int modelindex)
Definition sv_main.c:1607

References i, int(), MAX_MODELS, Mod_Alias_GetTagIndexForName(), modelindex, PRVM_serveredictfloat, skin, and SV_GetModelByIndex().

Referenced by VM_SV_gettagindex().

◆ SV_GetTagMatrix()

static int SV_GetTagMatrix ( prvm_prog_t * prog,
matrix4x4_t * out,
prvm_edict_t * ent,
int tagindex )
static

Definition at line 2557 of file svvm_cmds.c.

2558{
2559 int ret;
2560 int modelindex, attachloop;
2561 matrix4x4_t entitymatrix, tagmatrix, attachmatrix;
2562 model_t *model;
2563
2564 *out = identitymatrix; // warnings and errors return identical matrix
2565
2566 if (ent == prog->edicts)
2567 return 1;
2568 if (ent->free)
2569 return 2;
2570
2573 return 3;
2574
2576
2577 VM_GenerateFrameGroupBlend(prog, ent->priv.server->framegroupblend, ent);
2578 VM_FrameBlendFromFrameGroupBlend(ent->priv.server->frameblend, ent->priv.server->framegroupblend, model, sv.time);
2579 VM_UpdateEdictSkeleton(prog, ent, model, ent->priv.server->frameblend);
2580
2581 tagmatrix = identitymatrix;
2582 // DP_GFX_QUAKE3MODELTAGS, scan all chain and stop on unattached entity
2583 attachloop = 0;
2584 for (;;)
2585 {
2586 if (attachloop >= 256) // prevent runaway looping
2587 return 5;
2588 // apply transformation by child's tagindex on parent entity and then
2589 // by parent entity itself
2590 ret = SV_GetEntityLocalTagMatrix(prog, ent, tagindex - 1, &attachmatrix);
2591 if (ret && attachloop == 0)
2592 return ret;
2593 SV_GetEntityMatrix(prog, ent, &entitymatrix, false);
2594 Matrix4x4_Concat(&tagmatrix, &attachmatrix, out);
2595 Matrix4x4_Concat(out, &entitymatrix, &tagmatrix);
2596 // next iteration we process the parent entity
2598 {
2599 tagindex = (int)PRVM_serveredictfloat(ent, tag_index);
2601 }
2602 else
2603 break;
2604 attachloop++;
2605 }
2606
2607 // RENDER_VIEWMODEL magic
2609 {
2610 Matrix4x4_Copy(&tagmatrix, out);
2612
2613 SV_GetEntityMatrix(prog, ent, &entitymatrix, true);
2614 Matrix4x4_Concat(out, &entitymatrix, &tagmatrix);
2615 }
2616 return 0;
2617}
entity viewmodelforclient
entity tag_entity
float tag_index
void Matrix4x4_Concat(matrix4x4_t *out, const matrix4x4_t *in1, const matrix4x4_t *in2)
Definition matrixlib.c:83
void Matrix4x4_Copy(matrix4x4_t *out, const matrix4x4_t *in)
Definition matrixlib.c:19
#define PRVM_serveredictedict(ed, fieldname)
Definition progsvm.h:175
#define PRVM_EDICT_NUM(n)
Definition progsvm.h:867
return ret
qbool free
true if this edict is unused
Definition progsvm.h:93
prvm_edict_t * edicts
Definition progsvm.h:680
static int SV_GetEntityLocalTagMatrix(prvm_prog_t *prog, prvm_edict_t *ent, int tagindex, matrix4x4_t *out)
Definition svvm_cmds.c:2536
void SV_GetEntityMatrix(prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qbool viewmatrix)
Definition svvm_cmds.c:2518

References prvm_prog_t::edicts, prvm_edict_t::free, identitymatrix, int(), Matrix4x4_Concat(), Matrix4x4_Copy(), MAX_MODELS, model, modelindex, prvm_edict_t::priv, PRVM_EDICT_NUM, PRVM_serveredictedict, PRVM_serveredictfloat, ret, prvm_edict_t::server, sv, SV_GetEntityLocalTagMatrix(), SV_GetEntityMatrix(), SV_GetModelByIndex(), tag_entity, tag_index, server_t::time, viewmodelforclient, VM_FrameBlendFromFrameGroupBlend(), VM_GenerateFrameGroupBlend(), and VM_UpdateEdictSkeleton().

Referenced by VM_SV_gettaginfo().

◆ SV_Trace_Toss()

static trace_t SV_Trace_Toss ( prvm_prog_t * prog,
prvm_edict_t * tossent,
prvm_edict_t * ignore )
static

Definition at line 712 of file svvm_cmds.c.

713{
714 int i;
715 float gravity;
716 vec3_t move, end, tossentorigin, tossentmins, tossentmaxs;
717 vec3_t original_origin;
718 vec3_t original_velocity;
719 vec3_t original_angles;
720 vec3_t original_avelocity;
721 trace_t trace;
722
723 VectorCopy(PRVM_serveredictvector(tossent, origin) , original_origin );
724 VectorCopy(PRVM_serveredictvector(tossent, velocity) , original_velocity );
725 VectorCopy(PRVM_serveredictvector(tossent, angles) , original_angles );
726 VectorCopy(PRVM_serveredictvector(tossent, avelocity), original_avelocity);
727
728 gravity = PRVM_serveredictfloat(tossent, gravity);
729 if (!gravity)
730 gravity = 1.0f;
731 gravity *= sv_gravity.value * 0.025;
732
733 for (i = 0;i < 200;i++) // LadyHavoc: sanity check; never trace more than 10 seconds
734 {
735 SV_CheckVelocity (tossent);
736 PRVM_serveredictvector(tossent, velocity)[2] -= gravity;
738 VectorScale (PRVM_serveredictvector(tossent, velocity), 0.05, move);
739 VectorAdd (PRVM_serveredictvector(tossent, origin), move, end);
740 VectorCopy(PRVM_serveredictvector(tossent, origin), tossentorigin);
741 VectorCopy(PRVM_serveredictvector(tossent, mins), tossentmins);
742 VectorCopy(PRVM_serveredictvector(tossent, maxs), tossentmaxs);
743 trace = SV_TraceBox(tossentorigin, tossentmins, tossentmaxs, end, MOVE_NORMAL, tossent, SV_GenericHitSuperContentsMask(tossent), 0, 0, collision_extendmovelength.value);
745 PRVM_serveredictvector(tossent, velocity)[2] -= gravity;
746
747 if (trace.fraction < 1)
748 break;
749 }
750
751 VectorCopy(original_origin , PRVM_serveredictvector(tossent, origin) );
752 VectorCopy(original_velocity , PRVM_serveredictvector(tossent, velocity) );
753 VectorCopy(original_angles , PRVM_serveredictvector(tossent, angles) );
754 VectorCopy(original_avelocity, PRVM_serveredictvector(tossent, avelocity));
755
756 return trace;
757}
cvar_t collision_extendmovelength
Definition collision.c:14
vector avelocity
vector velocity
#define VectorScale(in, scale, out)
Definition mathlib.h:111
#define VectorAdd(a, b, out)
Definition mathlib.h:100
#define VectorMA(a, scale, b, out)
Definition mathlib.h:114
vec_t vec3_t[3]
Definition qtypes.h:71
void SV_CheckVelocity(prvm_edict_t *ent)
Definition sv_phys.c:965
int SV_GenericHitSuperContentsMask(const prvm_edict_t *edict)
calculates hitsupercontentsmask for a generic qc entity
Definition sv_phys.c:73
cvar_t sv_gravity
Definition sv_main.c:134
trace_t SV_TraceBox(const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int type, prvm_edict_t *passedict, int hitsupercontentsmask, int skipsupercontentsmask, int skipmaterialflagsmask, float extend)
traces a box move against worldmodel and all entities in the specified area
Definition sv_phys.c:414
double endpos[3]
Definition collision.h:42
#define MOVE_NORMAL
Definition world.h:28

References angles, avelocity, collision_extendmovelength, trace_t::endpos, trace_t::fraction, i, maxs, mins, MOVE_NORMAL, origin, PRVM_serveredictfloat, PRVM_serveredictvector, SV_CheckVelocity(), SV_GenericHitSuperContentsMask(), sv_gravity, SV_TraceBox(), cvar_t::value, VectorAdd, VectorCopy, VectorMA, VectorScale, and velocity.

Referenced by VM_SV_tracetoss().

◆ SV_VM_ConsoleCommand()

qbool SV_VM_ConsoleCommand ( const char * text,
size_t textlen )

Definition at line 2927 of file svvm_cmds.c.

2928{
2929 prvm_prog_t *prog = SVVM_prog;
2930 return PRVM_ConsoleCommand(prog, text, textlen, &prog->funcoffsets.ConsoleCmd, true, PRVM_EDICT_TO_PROG(sv.world.prog->edicts), sv.time, "QC function ConsoleCmd is missing");
2931}
#define PRVM_EDICT_TO_PROG(e)
Definition progsvm.h:875
#define SVVM_prog
Definition progsvm.h:766
qbool PRVM_ConsoleCommand(prvm_prog_t *prog, const char *text, size_t textlen, int *func, qbool preserve_self, int curself, double ptime, const char *error_message)
Definition prvm_cmds.c:68
prvm_prog_funcoffsets_t funcoffsets
Definition progsvm.h:693
world_t world
collision culling data
Definition server.h:106
struct prvm_prog_s * prog
Definition world.h:73

References prvm_prog_t::funcoffsets, world_t::prog, PRVM_ConsoleCommand(), PRVM_EDICT_TO_PROG, sv, SVVM_prog, server_t::time, and server_t::world.

Referenced by Cmd_CL_Callback(), and Cmd_SV_Callback().

◆ SVVM_init_cmd()

void SVVM_init_cmd ( prvm_prog_t * prog)

Definition at line 3918 of file svvm_cmds.c.

3919{
3920 VM_Cmd_Init(prog);
3921}
void VM_Cmd_Init(prvm_prog_t *prog)
Definition prvm_cmds.c:5265

References VM_Cmd_Init().

Referenced by SV_VM_Setup().

◆ SVVM_reset_cmd()

void SVVM_reset_cmd ( prvm_prog_t * prog)

Definition at line 3923 of file svvm_cmds.c.

3924{
3925 World_End(&sv.world);
3926 VM_Cmd_Reset(prog);
3927}
void VM_Cmd_Reset(prvm_prog_t *prog)
Definition prvm_cmds.c:5274
void World_End(world_t *world)
Definition world.c:69

References sv, VM_Cmd_Reset(), server_t::world, and World_End().

Referenced by SV_VM_Setup().

◆ VM_CustomStats_Clear()

void VM_CustomStats_Clear ( void )

Definition at line 1717 of file svvm_cmds.c.

1718{
1719 memset(vm_customstats, 0, sizeof(vm_customstats));
1721}
static int vm_customstats_last
Definition svvm_cmds.c:1715
static customstat_t vm_customstats[MAX_CL_STATS]
Definition svvm_cmds.c:1714

References vm_customstats, and vm_customstats_last.

Referenced by SV_VM_Setup().

◆ VM_SV_AddStat()

static void VM_SV_AddStat ( prvm_prog_t * prog)
static

Definition at line 1773 of file svvm_cmds.c.

1774{
1775 int off, i, type;
1776
1778
1781 off = PRVM_G_INT (OFS_PARM2);
1782
1783 switch (type)
1784 {
1785 case 1:
1786 case 2:
1787 case 8:
1788 break;
1789 default:
1790 VM_Warning(prog, "PF_SV_AddStat: unrecognized type %i - supported types are 1 (string up to 16 bytes, takes 4 stat slots), 2 (truncate to int32), 8 (send as float)", type);
1791 return;
1792 }
1793
1794 if (i < 0)
1795 {
1796 VM_Warning(prog, "PF_SV_AddStat: index (%i) may not be less than %i\n", i, MIN_VM_STAT);
1797 return;
1798 }
1799
1800 if (i >= MAX_CL_STATS)
1801 {
1802 VM_Warning(prog, "PF_SV_AddStat: index (%i) >= MAX_CL_STATS (%i), not supported by protocol, and AddStat beyond MAX_VM_STAT (%i) conflicts with engine MOVEVARS\n", i, MAX_CL_STATS, MAX_VM_STAT);
1803 return;
1804 }
1805
1806 if (i > (MAX_CL_STATS - 4) && type == 1)
1807 {
1808 VM_Warning(prog, "PF_SV_AddStat: index (%i) > (MAX_CL_STATS (%i) - 4) with string type won't fit in the protocol, and AddStat beyond MAX_VM_STAT conflicts with engine MOVEVARS\n", i, MAX_CL_STATS);
1809 return;
1810 }
1811
1812 // these are hazardous to override but sort of allowed if one wants to be adventurous... and enjoys warnings.
1813 if (i < MIN_VM_STAT)
1814 VM_Warning(prog, "PF_SV_AddStat: index (%i) < MIN_VM_STAT (%i) may conflict with engine stats - allowed, but this may break things\n", i, MIN_VM_STAT);
1815 else if (i >= MAX_VM_STAT && !sv_qcstats.integer)
1816 VM_Warning(prog, "PF_SV_AddStat: index (%i) >= MAX_VM_STAT (%i) conflicts with engine stats - allowed, but this may break slowmo and stuff\n", i, MAX_VM_STAT);
1817 else if (i > (MAX_VM_STAT - 4) && type == 1 && !sv_qcstats.integer)
1818 VM_Warning(prog, "PF_SV_AddStat: index (%i) >= MAX_VM_STAT (%i) - 4 with string type won't fit within MAX_VM_STAT, thus conflicting with engine stats - allowed, but this may break slowmo and stuff\n", i, MAX_VM_STAT);
1819
1824}
GLenum type
Definition glquake.h:656
#define OFS_PARM2
Definition pr_comp.h:36
#define OFS_PARM0
Definition pr_comp.h:34
#define OFS_PARM1
Definition pr_comp.h:35
void VM_Warning(prvm_prog_t *prog, const char *fmt,...) DP_FUNC_PRINTF(2)
Definition prvm_cmds.c:25
#define PRVM_G_FLOAT(o)
Definition progsvm.h:882
#define PRVM_G_INT(o)
Definition progsvm.h:883
#define VM_SAFEPARMCOUNT(p, f)
Definition prvm_cmds.h:207
#define MAX_VM_STAT
stat range available to VM_SV_AddStat
Definition qstats.h:29
#define MIN_VM_STAT
stat range available to VM_SV_AddStat
Definition qstats.h:28
#define MAX_CL_STATS
Definition qstats.h:7
unsigned char type
Definition svvm_cmds.c:1710
int integer
Definition cvar.h:73
static void VM_SV_AddStat(prvm_prog_t *prog)
Definition svvm_cmds.c:1773
cvar_t sv_qcstats
Definition sv_main.c:148

References customstat_t::fieldoffset, i, int(), cvar_t::integer, MAX_CL_STATS, MAX_VM_STAT, MIN_VM_STAT, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_G_FLOAT, PRVM_G_INT, sv_qcstats, customstat_t::type, type, vm_customstats, vm_customstats_last, VM_SAFEPARMCOUNT, VM_SV_AddStat(), and VM_Warning().

Referenced by VM_SV_AddStat().

◆ VM_SV_aim()

static void VM_SV_aim ( prvm_prog_t * prog)
static

Definition at line 1351 of file svvm_cmds.c.

1352{
1353 prvm_edict_t *ent, *check, *bestent;
1354 vec3_t start, dir, end, bestdir;
1355 int i, j;
1356 trace_t tr;
1357 float dist, bestdist;
1358 //float speed;
1359
1361
1362 // assume failure if it returns early
1364 // if sv_aim is so high it can't possibly accept anything, skip out early
1365 if (sv_aim.value >= 1)
1366 return;
1367
1368 ent = PRVM_G_EDICT(OFS_PARM0);
1369 if (ent == prog->edicts)
1370 {
1371 VM_Warning(prog, "aim: can not use world entity\n");
1372 return;
1373 }
1374 if (ent->free)
1375 {
1376 VM_Warning(prog, "aim: can not use free entity\n");
1377 return;
1378 }
1379 //speed = PRVM_G_FLOAT(OFS_PARM1);
1380
1382 start[2] += 20;
1383
1384// try sending a trace straight
1386 VectorMA (start, 2048, dir, end);
1390 {
1392 return;
1393 }
1394
1395
1396// try all possible entities
1397 VectorCopy (dir, bestdir);
1398 bestdist = sv_aim.value;
1399 bestent = NULL;
1400
1401 check = PRVM_NEXT_EDICT(prog->edicts);
1402 for (i=1 ; i<prog->num_edicts ; i++, check = PRVM_NEXT_EDICT(check) )
1403 {
1404 prog->xfunction->builtinsprofile++;
1406 continue;
1407 if (check == ent)
1408 continue;
1409 if (teamplay.integer && PRVM_serveredictfloat(ent, team) > 0 && PRVM_serveredictfloat(ent, team) == PRVM_serveredictfloat(check, team))
1410 continue; // don't aim at teammate
1411 for (j=0 ; j<3 ; j++)
1412 end[j] = PRVM_serveredictvector(check, origin)[j]
1413 + 0.5*(PRVM_serveredictvector(check, mins)[j] + PRVM_serveredictvector(check, maxs)[j]);
1414 VectorSubtract (end, start, dir);
1417 if (dist < bestdist)
1418 continue; // to far to turn
1420 if (tr.ent == check)
1421 { // can shoot at this one
1422 bestdist = dist;
1423 bestent = check;
1424 }
1425 }
1426
1427 if (bestent)
1428 {
1432 end[2] = dir[2];
1433 VectorNormalize (end);
1435 }
1436 else
1437 {
1439 }
1440}
#define SUPERCONTENTS_BODY
Definition bspfile.h:201
#define SUPERCONTENTS_SOLID
Definition bspfile.h:196
vector v_forward
#define VectorNormalize(v)
Definition mathlib.h:104
#define DotProduct(a, b)
Definition mathlib.h:98
#define OFS_RETURN
Definition pr_comp.h:33
float team
Definition progsdefs.qc:172
float teamplay
Definition progsdefs.qc:31
float takedamage
Definition progsdefs.qc:147
#define PRVM_NEXT_EDICT(e)
Definition progsvm.h:873
#define PRVM_G_EDICT(o)
Definition progsvm.h:884
#define PRVM_serverglobalvector(fieldname)
Definition progsvm.h:178
#define PRVM_G_VECTOR(o)
Definition progsvm.h:886
#define DAMAGE_AIM
Definition server.h:354
cvar_t sv_aim
Definition sv_main.c:56
trace_t SV_TraceLine(const vec3_t start, const vec3_t end, int type, prvm_edict_t *passedict, int hitsupercontentsmask, int skipsupercontentsmask, int skipmaterialflagsmask, float extend)
Definition sv_phys.c:256
vec2 dir
double builtinsprofile
Definition pr_comp.h:452
int num_edicts
copies of some vars that were former read from sv
Definition progsvm.h:671
mfunction_t * xfunction
Definition progsvm.h:620
void * ent
Definition collision.h:47
static void VM_SV_aim(prvm_prog_t *prog)
Definition svvm_cmds.c:1351

References mfunction_t::builtinsprofile, collision_extendmovelength, DAMAGE_AIM, dir, DotProduct, prvm_prog_t::edicts, trace_t::ent, prvm_edict_t::free, i, maxs, mins, MOVE_NORMAL, NULL, prvm_prog_t::num_edicts, OFS_PARM0, OFS_RETURN, origin, PRVM_G_EDICT, PRVM_G_VECTOR, PRVM_NEXT_EDICT, PRVM_serveredictfloat, PRVM_serveredictvector, PRVM_serverglobalvector, SUPERCONTENTS_BODY, SUPERCONTENTS_SOLID, sv_aim, SV_TraceLine(), takedamage, team, teamplay, v_forward, cvar_t::value, VectorCopy, VectorMA, VectorNormalize, VectorScale, VectorSubtract, VM_SAFEPARMCOUNT, VM_SV_aim(), VM_Warning(), and prvm_prog_t::xfunction.

Referenced by VM_SV_aim().

◆ VM_SV_ambientsound()

static void VM_SV_ambientsound ( prvm_prog_t * prog)
static

Definition at line 470 of file svvm_cmds.c.

471{
472 const char *samp;
473 vec3_t pos;
474 prvm_vec_t vol, attenuation;
475 int soundnum, large;
476
478
480 samp = PRVM_G_STRING(OFS_PARM1);
481 vol = PRVM_G_FLOAT(OFS_PARM2);
482 attenuation = PRVM_G_FLOAT(OFS_PARM3);
483
484// check to see if samp was properly precached
485 soundnum = SV_SoundIndex(samp, 1);
486 if (!soundnum)
487 return;
488
489 large = false;
490 if (soundnum >= 256)
491 large = true;
492
494 large = false;
495
496 // add an svc_spawnambient command to the level signon packet
497
498 if (large)
500 else
502
504
506 MSG_WriteShort (&sv.signon, soundnum);
507 else
508 MSG_WriteByte (&sv.signon, soundnum);
509
510 MSG_WriteByte (&sv.signon, (int)(vol*255));
511 MSG_WriteByte (&sv.signon, (int)(attenuation*64));
512
513}
void MSG_WriteShort(sizebuf_t *sb, int c)
Definition com_msg.c:138
void MSG_WriteByte(sizebuf_t *sb, int c)
Definition com_msg.c:130
void MSG_WriteVector(sizebuf_t *sb, const vec3_t v, protocolversion_t protocol)
Definition com_msg.c:214
@ PROTOCOL_NEHAHRABJP2
same as NEHAHRABJP but with 16bit soundindex
Definition common.h:147
@ PROTOCOL_NEHAHRABJP
same as QUAKEDP but with 16bit modelindex
Definition common.h:146
@ PROTOCOL_NEHAHRABJP3
same as NEHAHRABJP2 but with some changes
Definition common.h:148
#define OFS_PARM3
Definition pr_comp.h:37
#define PRVM_G_STRING(o)
Definition progsvm.h:887
#define svc_spawnstaticsound2
Definition protocol.h:279
#define svc_spawnstaticsound
Definition protocol.h:254
float prvm_vec_t
Definition qtypes.h:55
int SV_SoundIndex(const char *s, int precachemode)
Definition sv_main.c:1474
sizebuf_t signon
Definition server.h:133
protocolversion_t protocol
one of the PROTOCOL_ values
Definition server.h:74
static void VM_SV_ambientsound(prvm_prog_t *prog)
Definition svvm_cmds.c:470

References MSG_WriteByte(), MSG_WriteShort(), MSG_WriteVector(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, server_t::protocol, PROTOCOL_NEHAHRABJP, PROTOCOL_NEHAHRABJP2, PROTOCOL_NEHAHRABJP3, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, server_t::signon, sv, SV_SoundIndex(), svc_spawnstaticsound, svc_spawnstaticsound2, VectorCopy, VM_SAFEPARMCOUNT, and VM_SV_ambientsound().

Referenced by VM_SV_ambientsound().

◆ VM_SV_centerprint()

static void VM_SV_centerprint ( prvm_prog_t * prog)
static

Definition at line 416 of file svvm_cmds.c.

417{
418 client_t *client;
419 int entnum;
420 char string[VM_TEMPSTRING_MAXSIZE];
421
423
425
427 {
428 VM_Warning(prog, "tried to centerprint to a non-client\n");
429 return;
430 }
431
432 client = svs.clients + entnum-1;
433 if (!client->netconnection)
434 return;
435
436 VM_VarString(prog, 1, string, sizeof(string));
438 MSG_WriteString(&client->netconnection->message, string);
439}
void MSG_WriteString(sizebuf_t *sb, const char *s)
Definition com_msg.c:173
void MSG_WriteChar(sizebuf_t *sb, int c)
Definition com_msg.c:122
float entnum
#define PRVM_G_EDICTNUM(o)
Definition progsvm.h:885
#define svc_centerprint
Definition protocol.h:249
size_t VM_VarString(prvm_prog_t *prog, int first, char *out, size_t outsize)
Returns the length of the *out string excluding the \0 terminator.
Definition prvm_cmds.c:280
#define VM_TEMPSTRING_MAXSIZE
Definition prvm_cmds.h:215
#define VM_SAFEPARMCOUNTRANGE(p1, p2, f)
Definition prvm_cmds.h:206
server_static_t svs
persistant server info
Definition sv_main.c:224
netconn_t * netconnection
communications handle
Definition server.h:210
sizebuf_t message
writing buffer to send to peer as the next reliable message can be added to at any time,...
Definition netconn.h:161
struct client_s * clients
client slots
Definition server.h:30
int maxclients
number of svs.clients slots (updated by maxplayers command)
Definition server.h:28
static void VM_SV_centerprint(prvm_prog_t *prog)
Definition svvm_cmds.c:416

References server_static_t::clients, entnum, server_static_t::maxclients, netconn_t::message, MSG_WriteChar(), MSG_WriteString(), client_t::netconnection, OFS_PARM0, PRVM_G_EDICTNUM, svc_centerprint, svs, VM_SAFEPARMCOUNTRANGE, VM_SV_centerprint(), VM_TEMPSTRING_MAXSIZE, VM_VarString(), and VM_Warning().

Referenced by VM_SV_centerprint().

◆ VM_SV_checkbottom()

static void VM_SV_checkbottom ( prvm_prog_t * prog)
static

Definition at line 1324 of file svvm_cmds.c.

1325{
1328}
qbool SV_CheckBottom(prvm_edict_t *ent)
Definition sv_move.c:36
static void VM_SV_checkbottom(prvm_prog_t *prog)
Definition svvm_cmds.c:1324

References OFS_PARM0, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, SV_CheckBottom(), VM_SAFEPARMCOUNT, and VM_SV_checkbottom().

Referenced by VM_SV_checkbottom().

◆ VM_SV_checkclient()

static void VM_SV_checkclient ( prvm_prog_t * prog)
static

Definition at line 842 of file svvm_cmds.c.

843{
844 prvm_edict_t *ent, *self;
845 vec3_t view;
846
848
849 // find a new check if on a new frame
850 if (sv.time - sv.lastchecktime >= 0.1)
851 {
854 }
855
856 // return check if it might be visible
858 if (ent->free || PRVM_serveredictfloat(ent, health) <= 0)
859 {
860 VM_RETURN_EDICT(prog->edicts);
861 return;
862 }
863
864 // if current entity can't possibly see the check entity, return 0
867 if (sv.worldmodel && checkpvs && !sv.worldmodel->brush.BoxTouchingPVS(sv.worldmodel, checkpvs, view, view))
868 {
869 c_notvis++;
870 VM_RETURN_EDICT(prog->edicts);
871 return;
872 }
873
874 // might be able to see it
875 c_invis++;
876 VM_RETURN_EDICT(ent);
877}
entity self
float health
Definition progsdefs.qc:137
#define PRVM_serverglobaledict(fieldname)
Definition progsvm.h:180
#define PRVM_PROG_TO_EDICT(n)
Definition progsvm.h:877
#define VM_RETURN_EDICT(e)
Definition prvm_cmds.h:213
double lastchecktime
Definition server.h:98
int lastcheck
Definition server.h:97
int c_notvis
Definition svvm_cmds.c:841
static int VM_SV_newcheckclient(prvm_prog_t *prog, int check)
Definition svvm_cmds.c:786
int c_invis
Definition svvm_cmds.c:841
static void VM_SV_checkclient(prvm_prog_t *prog)
Definition svvm_cmds.c:842
static unsigned char * checkpvs
Definition svvm_cmds.c:784

References c_invis, c_notvis, checkpvs, prvm_prog_t::edicts, prvm_edict_t::free, health, server_t::lastcheck, server_t::lastchecktime, origin, PRVM_EDICT_NUM, PRVM_PROG_TO_EDICT, PRVM_serveredictfloat, PRVM_serveredictvector, PRVM_serverglobaledict, self, sv, server_t::time, VectorAdd, view_ofs, VM_RETURN_EDICT, VM_SAFEPARMCOUNT, VM_SV_checkclient(), VM_SV_newcheckclient(), and server_t::worldmodel.

Referenced by VM_SV_checkclient().

◆ VM_SV_checkpvs()

static void VM_SV_checkpvs ( prvm_prog_t * prog)
static

Definition at line 891 of file svvm_cmds.c.

892{
893 vec3_t viewpos, absmin, absmax;
894 prvm_edict_t *viewee;
895#if 1
896 unsigned char *pvs;
897#else
898 unsigned char *fatpvs = NULL;
899#endif
900
903 viewee = PRVM_G_EDICT(OFS_PARM1);
904
905 if(viewee->free)
906 {
907 VM_Warning(prog, "checkpvs: can not check free entity\n");
909 return;
910 }
911
912#if 1
913 if(!sv.worldmodel || !sv.worldmodel->brush.GetPVS || !sv.worldmodel->brush.BoxTouchingPVS)
914 {
915 // no PVS support on this worldmodel... darn
917 return;
918 }
919 pvs = sv.worldmodel->brush.GetPVS(sv.worldmodel, viewpos);
920 if(!pvs)
921 {
922 // viewpos isn't in any PVS... darn
924 return;
925 }
928 PRVM_G_FLOAT(OFS_RETURN) = sv.worldmodel->brush.BoxTouchingPVS(sv.worldmodel, pvs, absmin, absmax);
929#else
930 // using fat PVS like FTEQW does (slow)
931 if(!sv.worldmodel || !sv.worldmodel->brush.FatPVS || !sv.worldmodel->brush.BoxTouchingPVS)
932 {
933 // no PVS support on this worldmodel... darn
935 return;
936 }
937 sv.worldmodel->brush.FatPVS(sv.worldmodel, viewpos, 8, &fatpvs, sv_mempool, false);
938 if(!fatpvs)
939 {
940 // viewpos isn't in any PVS... darn
942 return;
943 }
946 PRVM_G_FLOAT(OFS_RETURN) = sv.worldmodel->brush.BoxTouchingPVS(sv.worldmodel, fatpvs, absmin, absmax);
947#endif
948}
vector absmax
vector absmin
mempool_t * sv_mempool
Definition sv_main.c:226
static void VM_SV_checkpvs(prvm_prog_t *prog)
Definition svvm_cmds.c:891

References absmax, absmin, prvm_edict_t::free, NULL, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, PRVM_serveredictvector, sv, sv_mempool, VectorCopy, VM_SAFEPARMCOUNT, VM_SV_checkpvs(), VM_Warning(), and server_t::worldmodel.

Referenced by VM_SV_checkpvs().

◆ VM_SV_clientcommand()

static void VM_SV_clientcommand ( prvm_prog_t * prog)
static

Definition at line 2419 of file svvm_cmds.c.

2420{
2421 client_t *temp_client;
2422 int i;
2424
2425 //find client for this entity
2427 if (i < 0 || i >= svs.maxclients || !svs.clients[i].active)
2428 {
2429 Con_Print("PF_clientcommand: entity is not a client\n");
2430 return;
2431 }
2432
2433 temp_client = host_client;
2436 host_client = temp_client;
2437}
void Cmd_ExecuteString(cmd_state_t *cmd, const char *text, size_t textlen, cmd_source_t src, qbool lockmutex)
Parses a single line of text into arguments and tries to execute it.
Definition cmd.c:2068
cmd_state_t * cmd_serverfromclient
command interpreter for server commands received over network from clients uses cmddefs_null
Definition cmd.c:26
@ src_client
came in over a net connection as a clc_stringcmd host_client will be valid during this state.
Definition cmd.h:73
void Con_Print(const char *msg)
Prints to all appropriate console targets, and adds timestamps.
Definition console.c:1504
float strlen(string s)
#define PRVM_NUM_FOR_EDICT(e)
Definition progsvm.h:870
client_t * host_client
Definition sv_main.c:29
static void VM_SV_clientcommand(prvm_prog_t *prog)
Definition svvm_cmds.c:2419

References server_static_t::clients, Cmd_ExecuteString(), cmd_serverfromclient, Con_Print(), host_client, i, server_static_t::maxclients, OFS_PARM0, OFS_PARM1, PRVM_G_EDICT, PRVM_G_STRING, PRVM_NUM_FOR_EDICT, src_client, strlen(), svs, VM_SAFEPARMCOUNT, and VM_SV_clientcommand().

Referenced by VM_SV_clientcommand().

◆ VM_SV_clienttype()

static void VM_SV_clienttype ( prvm_prog_t * prog)
static

Definition at line 2762 of file svvm_cmds.c.

2763{
2764 int clientnum;
2766 clientnum = PRVM_G_EDICTNUM(OFS_PARM0) - 1;
2767 if (clientnum < 0 || clientnum >= svs.maxclients)
2768 PRVM_G_FLOAT(OFS_RETURN) = 3; // CLIENTTYPE_NOTACLIENT
2769 else if (!svs.clients[clientnum].active)
2770 PRVM_G_FLOAT(OFS_RETURN) = 0; // CLIENTTYPE_DISCONNECTED
2771 else if (svs.clients[clientnum].netconnection)
2772 PRVM_G_FLOAT(OFS_RETURN) = 1; // CLIENTTYPE_REAL
2773 else
2774 PRVM_G_FLOAT(OFS_RETURN) = 2; // CLIENTTYPE_BOT
2775}
static void VM_SV_clienttype(prvm_prog_t *prog)
Definition svvm_cmds.c:2762

References server_static_t::clients, server_static_t::maxclients, OFS_PARM0, OFS_RETURN, PRVM_G_EDICTNUM, PRVM_G_FLOAT, svs, VM_SAFEPARMCOUNT, and VM_SV_clienttype().

Referenced by VM_SV_clienttype().

◆ VM_SV_copyentity()

static void VM_SV_copyentity ( prvm_prog_t * prog)
static

Definition at line 1835 of file svvm_cmds.c.

1836{
1837 prvm_edict_t *in, *out;
1839 in = PRVM_G_EDICT(OFS_PARM0);
1840 if (in == prog->edicts)
1841 {
1842 VM_Warning(prog, "copyentity: can not read world entity\n");
1843 return;
1844 }
1845 if (in->free)
1846 {
1847 VM_Warning(prog, "copyentity: can not read free entity\n");
1848 return;
1849 }
1850 out = PRVM_G_EDICT(OFS_PARM1);
1851 if (out == prog->edicts)
1852 {
1853 VM_Warning(prog, "copyentity: can not modify world entity\n");
1854 return;
1855 }
1856 if (out->free)
1857 {
1858 VM_Warning(prog, "copyentity: can not modify free entity\n");
1859 return;
1860 }
1861 memcpy(out->fields.fp, in->fields.fp, prog->entityfields * sizeof(prvm_vec_t));
1862
1863 SV_LinkEdict(out);
1864}
prvm_vec_t * fp
Definition progsvm.h:102
union prvm_edict_t::@30 fields
int entityfields
number of vec_t fields in progs (some variables are 3)
Definition progsvm.h:548
static void VM_SV_copyentity(prvm_prog_t *prog)
Definition svvm_cmds.c:1835

References prvm_prog_t::edicts, prvm_prog_t::entityfields, prvm_edict_t::fields, prvm_edict_t::fp, prvm_edict_t::free, OFS_PARM0, OFS_PARM1, PRVM_G_EDICT, SV_LinkEdict(), VM_SAFEPARMCOUNT, VM_SV_copyentity(), and VM_Warning().

Referenced by VM_SV_copyentity().

◆ VM_SV_dropclient()

static void VM_SV_dropclient ( prvm_prog_t * prog)
static

Definition at line 2715 of file svvm_cmds.c.

2716{
2717 int clientnum;
2718 client_t *oldhostclient;
2720 clientnum = PRVM_G_EDICTNUM(OFS_PARM0) - 1;
2721 if (clientnum < 0 || clientnum >= svs.maxclients)
2722 {
2723 VM_Warning(prog, "dropclient: not a client\n");
2724 return;
2725 }
2726 if (!svs.clients[clientnum].active)
2727 {
2728 VM_Warning(prog, "dropclient: that client slot is not connected\n");
2729 return;
2730 }
2731 oldhostclient = host_client;
2732 host_client = svs.clients + clientnum;
2733 SV_DropClient(false, "Client dropped");
2734 host_client = oldhostclient;
2735}
void SV_DropClient(qbool leaving, const char *reason,...)
Definition sv_main.c:1018
static void VM_SV_dropclient(prvm_prog_t *prog)
Definition svvm_cmds.c:2715

References server_static_t::clients, host_client, server_static_t::maxclients, OFS_PARM0, PRVM_G_EDICTNUM, SV_DropClient(), svs, VM_SAFEPARMCOUNT, VM_SV_dropclient(), and VM_Warning().

Referenced by VM_SV_dropclient().

◆ VM_SV_droptofloor()

static void VM_SV_droptofloor ( prvm_prog_t * prog)
static

Definition at line 1188 of file svvm_cmds.c.

1189{
1190 prvm_edict_t *ent;
1191 vec3_t end;
1192 trace_t trace;
1193
1194 VM_SAFEPARMCOUNTRANGE(0, 2, VM_SV_droptofloor); // allow 2 parameters because the id1 defs.qc had an incorrect prototype
1195
1196 // assume failure if it returns early
1198
1200 if (ent == prog->edicts)
1201 {
1202 VM_Warning(prog, "droptofloor: can not modify world entity\n");
1203 return;
1204 }
1205 if (ent->free)
1206 {
1207 VM_Warning(prog, "droptofloor: can not modify free entity\n");
1208 return;
1209 }
1210
1212 {
1213 int n = PHYS_NudgeOutOfSolid(prog, ent);
1214 if (!n)
1215 VM_Warning(prog, "droptofloor at \"%f %f %f\": sv_gameplayfix_droptofloorstartsolid_nudgetocorrect COULD NOT FIX badly placed entity \"%s\" before drop\n", PRVM_gameedictvector(ent, origin)[0], PRVM_gameedictvector(ent, origin)[1], PRVM_gameedictvector(ent, origin)[2], PRVM_GetString(prog, PRVM_gameedictstring(ent, classname)));
1216 else if (n > 0)
1217 VM_Warning(prog, "droptofloor at \"%f %f %f\": sv_gameplayfix_droptofloorstartsolid_nudgetocorrect FIXED badly placed entity \"%s\" before drop\n", PRVM_gameedictvector(ent, origin)[0], PRVM_gameedictvector(ent, origin)[1], PRVM_gameedictvector(ent, origin)[2], PRVM_GetString(prog, PRVM_gameedictstring(ent, classname)));
1218 }
1219
1221 if (sv.worldmodel->brush.isq3bsp)
1222 end[2] -= 4096;
1223 else if (sv.worldmodel->brush.isq2bsp)
1224 end[2] -= 128;
1225 else
1226 end[2] -= 256; // Quake, QuakeWorld
1227
1228 /* bones_was_here: not using SV_GenericHitSuperContentsMask(ent) anymore because it was setting:
1229 * items: SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY
1230 * monsters: SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY | SUPERCONTENTS_PLAYERCLIP
1231 * explobox: SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY | SUPERCONTENTS_CORPSE
1232 * which caused (startsolid == true) when, for example, a health was touching a monster.
1233 * Changing MOVE_NORMAL also fixes that, but other engines are using MOVE_NORMAL here.
1234 */
1236 if (droptofloor_bsp_failcond(&trace))
1237 {
1239 {
1240 vec3_t offset, org;
1241
1242 offset[0] = 0.5f * (PRVM_serveredictvector(ent, mins)[0] + PRVM_serveredictvector(ent, maxs)[0]);
1243 offset[1] = 0.5f * (PRVM_serveredictvector(ent, mins)[1] + PRVM_serveredictvector(ent, maxs)[1]);
1244 offset[2] = PRVM_serveredictvector(ent, mins)[2];
1246 VectorAdd(end, offset, end);
1247
1249 if (droptofloor_bsp_failcond(&trace))
1250 {
1251 VM_Warning(prog, "droptofloor at \"%f %f %f\": sv_gameplayfix_droptofloorstartsolid COULD NOT FIX badly placed entity \"%s\"\n", PRVM_serveredictvector(ent, origin)[0], PRVM_serveredictvector(ent, origin)[1], PRVM_serveredictvector(ent, origin)[2], PRVM_GetString(prog, PRVM_gameedictstring(ent, classname)));
1252 return;
1253 }
1254 VM_Warning(prog, "droptofloor at \"%f %f %f\": sv_gameplayfix_droptofloorstartsolid FIXED badly placed entity \"%s\"\n", PRVM_serveredictvector(ent, origin)[0], PRVM_serveredictvector(ent, origin)[1], PRVM_serveredictvector(ent, origin)[2], PRVM_GetString(prog, PRVM_gameedictstring(ent, classname)));
1256
1257 // only because we dropped it without considering its bbox
1259 PHYS_NudgeOutOfSolid(prog, ent);
1260 }
1261 else
1262 {
1263 VM_Warning(prog, "droptofloor at \"%f %f %f\": badly placed entity \"%s\", startsolid: %d allsolid: %d\n", PRVM_serveredictvector(ent, origin)[0], PRVM_serveredictvector(ent, origin)[1], PRVM_serveredictvector(ent, origin)[2], PRVM_GetString(prog, PRVM_gameedictstring(ent, classname)), trace.startsolid, trace.allsolid);
1264 return;
1265 }
1266 }
1267 else
1269
1270 SV_LinkEdict(ent);
1274 // if support is destroyed, keep suspended (gross hack for floating items in various maps)
1275 ent->priv.server->suspendedinairflag = true;
1276}
string classname
float flags
#define n(x, y)
GLuint GLuint GLintptr offset
Definition glquake.h:632
unstickresult_t PHYS_NudgeOutOfSolid(prvm_prog_t *prog, prvm_edict_t *ent)
Definition phys.c:136
entity groundentity
Definition progsdefs.qc:134
#define PRVM_gameedictvector(ed, fieldname)
Definition progsvm.h:161
#define PRVM_gameedictstring(ed, fieldname)
Definition progsvm.h:162
const char * PRVM_GetString(prvm_prog_t *prog, int num)
cvar_t sv_gameplayfix_droptofloorstartsolid_nudgetocorrect
Definition sv_main.c:108
cvar_t sv_gameplayfix_droptofloorstartsolid
Definition sv_main.c:107
#define FL_ONGROUND
Definition server.h:366
static qbool droptofloor_bsp_failcond(trace_t *trace)
Definition svvm_cmds.c:1181
static void VM_SV_droptofloor(prvm_prog_t *prog)
Definition svvm_cmds.c:1188

References trace_t::allsolid, classname, collision_extendmovelength, droptofloor_bsp_failcond(), prvm_prog_t::edicts, trace_t::endpos, trace_t::ent, FL_ONGROUND, flags, prvm_edict_t::free, groundentity, int(), cvar_t::integer, maxs, mins, MOVE_NORMAL, n, offset, OFS_RETURN, origin, PHYS_NudgeOutOfSolid(), prvm_edict_t::priv, PRVM_EDICT_TO_PROG, PRVM_G_FLOAT, PRVM_gameedictstring, PRVM_gameedictvector, PRVM_GetString(), PRVM_PROG_TO_EDICT, PRVM_serveredictedict, PRVM_serveredictfloat, PRVM_serveredictvector, PRVM_serverglobaledict, self, prvm_edict_t::server, trace_t::startsolid, SUPERCONTENTS_SOLID, sv, sv_gameplayfix_droptofloorstartsolid, sv_gameplayfix_droptofloorstartsolid_nudgetocorrect, SV_LinkEdict(), SV_TraceBox(), SV_TraceLine(), cvar_t::value, VectorAdd, VectorCopy, VectorSubtract, VM_SAFEPARMCOUNTRANGE, VM_SV_droptofloor(), VM_Warning(), and server_t::worldmodel.

Referenced by VM_SV_droptofloor().

◆ VM_SV_effect()

static void VM_SV_effect ( prvm_prog_t * prog)
static

Definition at line 1915 of file svvm_cmds.c.

1916{
1917 int i;
1918 const char *s;
1919 vec3_t org;
1922 if (!s[0])
1923 {
1924 VM_Warning(prog, "effect: no model specified\n");
1925 return;
1926 }
1927
1928 i = SV_ModelIndex(s, 1);
1929 if (!i)
1930 {
1931 VM_Warning(prog, "effect: model not precached\n");
1932 return;
1933 }
1934
1935 if (PRVM_G_FLOAT(OFS_PARM3) < 1)
1936 {
1937 VM_Warning(prog, "effect: framecount < 1\n");
1938 return;
1939 }
1940
1941 if (PRVM_G_FLOAT(OFS_PARM4) < 1)
1942 {
1943 VM_Warning(prog, "effect: framerate < 1\n");
1944 return;
1945 }
1946
1949}
#define OFS_PARM4
Definition pr_comp.h:38
void SV_StartEffect(vec3_t org, int modelindex, int startframe, int framecount, int framerate)
Definition sv_send.c:182
int SV_ModelIndex(const char *s, int precachemode)
Definition sv_main.c:1411
static void VM_SV_effect(prvm_prog_t *prog)
Definition svvm_cmds.c:1915

References i, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, SV_ModelIndex(), SV_StartEffect(), VectorCopy, VM_SAFEPARMCOUNT, VM_SV_effect(), and VM_Warning().

Referenced by VM_SV_effect().

◆ VM_SV_findbox()

static void VM_SV_findbox ( prvm_prog_t * prog)
static

Definition at line 1069 of file svvm_cmds.c.

1070{
1072 int i, numtouchedicts;
1073 static prvm_edict_t *touchedicts[MAX_EDICTS];
1074 int chainfield;
1075
1077
1078 if(prog->argc == 3)
1079 chainfield = PRVM_G_INT(OFS_PARM2);
1080 else
1081 chainfield = prog->fieldoffsets.chain;
1082 if (chainfield < 0)
1083 prog->error_cmd("VM_SV_findbox: %s doesnt have the specified chain field !", prog->name);
1084
1085 chain = (prvm_edict_t *)prog->edicts;
1086
1087 numtouchedicts = SV_EntitiesInBox(PRVM_G_VECTOR(OFS_PARM0), PRVM_G_VECTOR(OFS_PARM1), MAX_EDICTS, touchedicts);
1088 if (numtouchedicts > MAX_EDICTS)
1089 {
1090 // this never happens
1091 Con_Printf("SV_EntitiesInBox returned %i edicts, max was %i\n", numtouchedicts, MAX_EDICTS);
1092 numtouchedicts = MAX_EDICTS;
1093 }
1094 for (i = 0; i < numtouchedicts; ++i)
1095 {
1096 prog->xfunction->builtinsprofile++;
1097 PRVM_EDICTFIELDEDICT(touchedicts[i], chainfield) = PRVM_EDICT_TO_PROG(chain);
1098 chain = touchedicts[i];
1099 }
1100
1102}
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
Definition console.c:1514
entity chain
#define PRVM_EDICTFIELDEDICT(ed, fieldoffset)
Definition progsvm.h:213
#define MAX_EDICTS
max number of objects in game world at once (32768 protocol limit)
Definition qdefs.h:105
int SV_EntitiesInBox(const vec3_t mins, const vec3_t maxs, int maxedicts, prvm_edict_t **resultedicts)
Definition sv_phys.c:673
const char * name
name of the prog, e.g. "Server", "Client" or "Menu" (used for text output)
Definition progsvm.h:700
prvm_prog_fieldoffsets_t fieldoffsets
Definition progsvm.h:691
static void VM_SV_findbox(prvm_prog_t *prog)
Definition svvm_cmds.c:1069

References prvm_prog_t::argc, mfunction_t::builtinsprofile, chain, Con_Printf(), prvm_prog_t::edicts, prvm_prog_t::error_cmd, prvm_prog_t::fieldoffsets, i, MAX_EDICTS, prvm_prog_t::name, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_EDICT_TO_PROG, PRVM_EDICTFIELDEDICT, PRVM_G_INT, PRVM_G_VECTOR, SV_EntitiesInBox(), VM_RETURN_EDICT, VM_SAFEPARMCOUNTRANGE, VM_SV_findbox(), and prvm_prog_t::xfunction.

Referenced by VM_SV_findbox().

◆ VM_SV_findradius()

static void VM_SV_findradius ( prvm_prog_t * prog)
static

Definition at line 992 of file svvm_cmds.c.

993{
994 prvm_edict_t *ent, *chain;
995 vec_t radius, radius2;
996 vec3_t org, eorg, mins, maxs;
997 int i;
998 int numtouchedicts;
999 static prvm_edict_t *touchedicts[MAX_EDICTS];
1000 int chainfield;
1001
1003
1004 if(prog->argc == 3)
1005 chainfield = PRVM_G_INT(OFS_PARM2);
1006 else
1007 chainfield = prog->fieldoffsets.chain;
1008 if (chainfield < 0)
1009 prog->error_cmd("VM_SV_findradius: %s doesnt have the specified chain field !", prog->name);
1010
1011 chain = (prvm_edict_t *)prog->edicts;
1012
1014 radius = PRVM_G_FLOAT(OFS_PARM1);
1015 radius2 = radius * radius;
1016
1017 mins[0] = org[0] - (radius + 1);
1018 mins[1] = org[1] - (radius + 1);
1019 mins[2] = org[2] - (radius + 1);
1020 maxs[0] = org[0] + (radius + 1);
1021 maxs[1] = org[1] + (radius + 1);
1022 maxs[2] = org[2] + (radius + 1);
1023 numtouchedicts = SV_EntitiesInBox(mins, maxs, MAX_EDICTS, touchedicts);
1024 if (numtouchedicts > MAX_EDICTS)
1025 {
1026 // this never happens
1027 Con_Printf("SV_EntitiesInBox returned %i edicts, max was %i\n", numtouchedicts, MAX_EDICTS);
1028 numtouchedicts = MAX_EDICTS;
1029 }
1030 for (i = 0;i < numtouchedicts;i++)
1031 {
1032 ent = touchedicts[i];
1033 prog->xfunction->builtinsprofile++;
1034 // Quake did not return non-solid entities but darkplaces does
1035 // (note: this is the reason you can't blow up fallen zombies)
1037 continue;
1038 // LadyHavoc: compare against bounding box rather than center so it
1039 // doesn't miss large objects, and use DotProduct instead of Length
1040 // for a major speedup
1043 {
1044 eorg[0] -= bound(PRVM_serveredictvector(ent, mins)[0], eorg[0], PRVM_serveredictvector(ent, maxs)[0]);
1045 eorg[1] -= bound(PRVM_serveredictvector(ent, mins)[1], eorg[1], PRVM_serveredictvector(ent, maxs)[1]);
1046 eorg[2] -= bound(PRVM_serveredictvector(ent, mins)[2], eorg[2], PRVM_serveredictvector(ent, maxs)[2]);
1047 }
1048 else
1049 VectorMAMAM(1, eorg, -0.5f, PRVM_serveredictvector(ent, mins), -0.5f, PRVM_serveredictvector(ent, maxs), eorg);
1050 if (DotProduct(eorg, eorg) < radius2)
1051 {
1053 chain = ent;
1054 }
1055 }
1056
1058}
float solid
#define bound(min, num, max)
Definition mathlib.h:34
#define VectorMAMAM(scale1, b1, scale2, b2, scale3, b3, out)
Definition mathlib.h:117
float vec_t
Definition qtypes.h:68
cvar_t sv_gameplayfix_findradiusdistancetobox
Definition sv_main.c:110
#define SOLID_NOT
no interaction with other objects
Definition server.h:332
cvar_t sv_gameplayfix_blowupfallenzombies
Definition sv_main.c:104
static void VM_SV_findradius(prvm_prog_t *prog)
Definition svvm_cmds.c:992

References prvm_prog_t::argc, bound, mfunction_t::builtinsprofile, chain, Con_Printf(), DotProduct, prvm_prog_t::edicts, prvm_prog_t::error_cmd, prvm_prog_t::fieldoffsets, i, cvar_t::integer, MAX_EDICTS, maxs, mins, prvm_prog_t::name, OFS_PARM0, OFS_PARM1, OFS_PARM2, origin, PRVM_EDICT_TO_PROG, PRVM_EDICTFIELDEDICT, PRVM_G_FLOAT, PRVM_G_INT, PRVM_G_VECTOR, PRVM_serveredictfloat, PRVM_serveredictvector, solid, SOLID_NOT, SV_EntitiesInBox(), sv_gameplayfix_blowupfallenzombies, sv_gameplayfix_findradiusdistancetobox, VectorCopy, VectorMAMAM, VectorSubtract, VM_RETURN_EDICT, VM_SAFEPARMCOUNTRANGE, VM_SV_findradius(), and prvm_prog_t::xfunction.

Referenced by VM_SV_findradius().

◆ VM_SV_frameduration()

static void VM_SV_frameduration ( prvm_prog_t * prog)
static

Definition at line 3252 of file svvm_cmds.c.

3253{
3256 int framenum = (int)PRVM_G_FLOAT(OFS_PARM1);
3258 if (!model || !model->animscenes || framenum < 0 || framenum >= model->numframes)
3259 return;
3260 if (model->animscenes[framenum].framerate)
3261 PRVM_G_FLOAT(OFS_RETURN) = model->animscenes[framenum].framecount / model->animscenes[framenum].framerate;
3262}

References int(), model, modelindex, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, and SV_GetModelByIndex().

◆ VM_SV_frameforname()

static void VM_SV_frameforname ( prvm_prog_t * prog)
static

Definition at line 3232 of file svvm_cmds.c.

3233{
3236 const char *name = PRVM_G_STRING(OFS_PARM1);
3237 int i;
3239 if (!model || !model->animscenes)
3240 return;
3241 for (i = 0;i < model->numframes;i++)
3242 {
3243 if (!strcasecmp(model->animscenes[i].name, name))
3244 {
3246 break;
3247 }
3248 }
3249}
const GLchar * name
Definition glquake.h:601

References i, int(), model, modelindex, name, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, and SV_GetModelByIndex().

◆ VM_SV_getlight()

static void VM_SV_getlight ( prvm_prog_t * prog)
static

Definition at line 1694 of file svvm_cmds.c.

1695{
1696 vec3_t ambientcolor, diffusecolor, diffusenormal;
1697 vec3_t p;
1700 VectorClear(ambientcolor);
1701 VectorClear(diffusecolor);
1702 VectorClear(diffusenormal);
1703 if (sv.worldmodel && sv.worldmodel->brush.LightPoint)
1704 sv.worldmodel->brush.LightPoint(sv.worldmodel, p, ambientcolor, diffusecolor, diffusenormal);
1705 VectorMA(ambientcolor, 0.5, diffusecolor, PRVM_G_VECTOR(OFS_RETURN));
1706}
#define VectorClear(a)
Definition mathlib.h:97
static void VM_SV_getlight(prvm_prog_t *prog)
Definition svvm_cmds.c:1694

References OFS_PARM0, OFS_RETURN, PRVM_G_VECTOR, sv, VectorClear, VectorCopy, VectorMA, VM_SAFEPARMCOUNT, VM_SV_getlight(), and server_t::worldmodel.

Referenced by VM_SV_getlight().

◆ VM_SV_gettagindex()

static void VM_SV_gettagindex ( prvm_prog_t * prog)
static

Definition at line 2621 of file svvm_cmds.c.

2622{
2623 prvm_edict_t *ent;
2624 const char *tag_name;
2625 int tag_index;
2626
2628
2629 ent = PRVM_G_EDICT(OFS_PARM0);
2630 tag_name = PRVM_G_STRING(OFS_PARM1);
2631
2632 if (ent == prog->edicts)
2633 {
2634 VM_Warning(prog, "VM_SV_gettagindex(entity #%i): can't affect world entity\n", PRVM_NUM_FOR_EDICT(ent));
2635 return;
2636 }
2637 if (ent->free)
2638 {
2639 VM_Warning(prog, "VM_SV_gettagindex(entity #%i): can't affect free entity\n", PRVM_NUM_FOR_EDICT(ent));
2640 return;
2641 }
2642
2643 tag_index = 0;
2644 if (!SV_GetModelFromEdict(ent))
2645 Con_DPrintf("VM_SV_gettagindex(entity #%i): null or non-precached model\n", PRVM_NUM_FOR_EDICT(ent));
2646 else
2647 {
2648 tag_index = SV_GetTagIndex(prog, ent, tag_name);
2649 if (tag_index == 0)
2651 Con_DPrintf("VM_SV_gettagindex(entity #%i): tag \"%s\" not found\n", PRVM_NUM_FOR_EDICT(ent), tag_name);
2652 }
2654}
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
Definition console.c:1544
cvar_t developer_extra
Definition host.c:49
static void VM_SV_gettagindex(prvm_prog_t *prog)
Definition svvm_cmds.c:2621
static int SV_GetTagIndex(prvm_prog_t *prog, prvm_edict_t *e, const char *tagname)
Definition svvm_cmds.c:2485

References Con_DPrintf(), developer_extra, prvm_prog_t::edicts, prvm_edict_t::free, cvar_t::integer, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_NUM_FOR_EDICT, SV_GetModelFromEdict(), SV_GetTagIndex(), tag_index, VM_SAFEPARMCOUNT, VM_SV_gettagindex(), and VM_Warning().

Referenced by VM_SV_gettagindex().

◆ VM_SV_gettaginfo()

static void VM_SV_gettaginfo ( prvm_prog_t * prog)
static

Definition at line 2657 of file svvm_cmds.c.

2658{
2659 prvm_edict_t *e;
2660 int tagindex;
2661 matrix4x4_t tag_matrix;
2662 matrix4x4_t tag_localmatrix;
2663 int parentindex;
2664 const char *tagname;
2665 int returncode;
2666 vec3_t forward, left, up, origin;
2667 const model_t *model;
2668
2670
2672 tagindex = (int)PRVM_G_FLOAT(OFS_PARM1);
2673
2674 returncode = SV_GetTagMatrix(prog, &tag_matrix, e, tagindex);
2675 Matrix4x4_ToVectors(&tag_matrix, forward, left, up, origin);
2681 VM_GenerateFrameGroupBlend(prog, e->priv.server->framegroupblend, e);
2682 VM_FrameBlendFromFrameGroupBlend(e->priv.server->frameblend, e->priv.server->framegroupblend, model, sv.time);
2683 VM_UpdateEdictSkeleton(prog, e, model, e->priv.server->frameblend);
2684 SV_GetExtendedTagInfo(prog, e, tagindex, &parentindex, &tagname, &tag_localmatrix);
2685 Matrix4x4_ToVectors(&tag_localmatrix, forward, left, up, origin);
2686
2688 PRVM_serverglobalstring(gettaginfo_name) = tagname ? PRVM_SetTempString(prog, tagname, strlen(tagname)) : 0;
2693
2694 switch(returncode)
2695 {
2696 case 1:
2697 VM_Warning(prog, "gettagindex: can't affect world entity\n");
2698 break;
2699 case 2:
2700 VM_Warning(prog, "gettagindex: can't affect free entity\n");
2701 break;
2702 case 3:
2703 Con_DPrintf("SV_GetTagMatrix(entity #%i): null or non-precached model\n", PRVM_NUM_FOR_EDICT(e));
2704 break;
2705 case 4:
2706 Con_DPrintf("SV_GetTagMatrix(entity #%i): model has no tag with requested index %i\n", PRVM_NUM_FOR_EDICT(e), tagindex);
2707 break;
2708 case 5:
2709 Con_DPrintf("SV_GetTagMatrix(entity #%i): runaway loop at attachment chain\n", PRVM_NUM_FOR_EDICT(e));
2710 break;
2711 }
2712}
vector v_up
float gettaginfo_parent
vector gettaginfo_forward
string gettaginfo_name
vector v_right
vector gettaginfo_right
vector gettaginfo_up
vector gettaginfo_offset
#define VectorNegate(a, b)
Definition mathlib.h:95
void Matrix4x4_ToVectors(const matrix4x4_t *in, float vx[3], float vy[3], float vz[3], float t[3])
Definition matrixlib.c:939
int PRVM_SetTempString(prvm_prog_t *prog, const char *s, size_t slen)
Takes an strlen (not a buffer size).
#define PRVM_serverglobalfloat(fieldname)
Definition progsvm.h:177
#define PRVM_serverglobalstring(fieldname)
Definition progsvm.h:179
static vec3_t forward
Definition sv_user.c:305
static vec3_t up
Definition sv_user.c:305
static int SV_GetTagMatrix(prvm_prog_t *prog, matrix4x4_t *out, prvm_edict_t *ent, int tagindex)
Definition svvm_cmds.c:2557
static void VM_SV_gettaginfo(prvm_prog_t *prog)
Definition svvm_cmds.c:2657
static int SV_GetExtendedTagInfo(prvm_prog_t *prog, prvm_edict_t *e, int tagindex, int *parentindex, const char **tagname, matrix4x4_t *tag_localmatrix)
Definition svvm_cmds.c:2496

References Con_DPrintf(), forward, gettaginfo_forward, gettaginfo_name, gettaginfo_offset, gettaginfo_parent, gettaginfo_right, gettaginfo_up, int(), Matrix4x4_ToVectors(), model, OFS_PARM0, OFS_PARM1, OFS_RETURN, origin, prvm_edict_t::priv, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, PRVM_NUM_FOR_EDICT, PRVM_serverglobalfloat, PRVM_serverglobalstring, PRVM_serverglobalvector, PRVM_SetTempString(), prvm_edict_t::server, strlen(), sv, SV_GetExtendedTagInfo(), SV_GetModelFromEdict(), SV_GetTagMatrix(), server_t::time, up, v_forward, v_right, v_up, VectorCopy, VectorNegate, VM_FrameBlendFromFrameGroupBlend(), VM_GenerateFrameGroupBlend(), VM_SAFEPARMCOUNT, VM_SV_gettaginfo(), VM_UpdateEdictSkeleton(), and VM_Warning().

Referenced by VM_SV_gettaginfo().

◆ VM_SV_lightstyle()

static void VM_SV_lightstyle ( prvm_prog_t * prog)
static

Definition at line 1285 of file svvm_cmds.c.

1286{
1287 int style;
1288 const char *val;
1289 client_t *client;
1290 int j;
1291
1293
1295 val = PRVM_G_STRING(OFS_PARM1);
1296
1297 if( (unsigned) style >= MAX_LIGHTSTYLES ) {
1298 prog->error_cmd( "PF_lightstyle: style: %i >= 64", style );
1299 }
1300
1301// change the string in sv
1303
1304// send message to all clients on this server
1305 if (sv.state != ss_active)
1306 return;
1307
1308 for (j = 0, client = svs.clients;j < svs.maxclients;j++, client++)
1309 {
1310 if (client->active && client->netconnection)
1311 {
1314 MSG_WriteString (&client->netconnection->message, val);
1315 }
1316 }
1317}
#define dp_strlcpy(dst, src, dsize)
Definition common.h:303
float style
#define svc_lightstyle
Definition protocol.h:231
#define MAX_LIGHTSTYLES
max flickering light styles in level (note: affects savegame format)
Definition qdefs.h:108
@ ss_active
Definition server.h:52
qbool active
false = empty client slot
Definition server.h:185
char lightstyles[MAX_LIGHTSTYLES][64]
Definition server.h:122
server_state_t state
some actions are only valid during load
Definition server.h:124
static void VM_SV_lightstyle(prvm_prog_t *prog)
Definition svvm_cmds.c:1285

References client_t::active, server_static_t::clients, dp_strlcpy, prvm_prog_t::error_cmd, int(), server_t::lightstyles, MAX_LIGHTSTYLES, server_static_t::maxclients, netconn_t::message, MSG_WriteChar(), MSG_WriteString(), client_t::netconnection, OFS_PARM0, OFS_PARM1, PRVM_G_FLOAT, PRVM_G_STRING, ss_active, server_t::state, style, sv, svc_lightstyle, svs, VM_SAFEPARMCOUNT, and VM_SV_lightstyle().

Referenced by VM_SV_lightstyle().

◆ VM_SV_makestatic()

static void VM_SV_makestatic ( prvm_prog_t * prog)
static

Definition at line 1594 of file svvm_cmds.c.

1595{
1596 prvm_edict_t *ent;
1597 int i, large;
1598
1599 // allow 0 parameters due to an id1 qc bug in which this function is used
1600 // with no parameters (but directly after setmodel with self in OFS_PARM0)
1602
1603 if (prog->argc >= 1)
1604 ent = PRVM_G_EDICT(OFS_PARM0);
1605 else
1607 if (ent == prog->edicts)
1608 {
1609 VM_Warning(prog, "makestatic: can not modify world entity\n");
1610 return;
1611 }
1612 if (ent->free)
1613 {
1614 VM_Warning(prog, "makestatic: can not modify free entity\n");
1615 return;
1616 }
1617
1618 large = false;
1619 if (PRVM_serveredictfloat(ent, modelindex) >= 256 || PRVM_serveredictfloat(ent, frame) >= 256)
1620 large = true;
1621
1623 {
1627 }
1628 else if (large)
1629 {
1633 }
1634 else
1635 {
1639 }
1640
1643 for (i=0 ; i<3 ; i++)
1644 {
1647 }
1648
1649// throw the entity away now
1650 PRVM_ED_Free(prog, ent);
1651}
void MSG_WriteCoord(sizebuf_t *sb, float f, protocolversion_t protocol)
Definition com_msg.c:202
void MSG_WriteAngle(sizebuf_t *sb, float f, protocolversion_t protocol)
Definition com_msg.c:237
float colormap
float frame
void PRVM_ED_Free(prvm_prog_t *prog, prvm_edict_t *ed)
Definition prvm_edict.c:314
#define svc_spawnstatic2
Definition protocol.h:276
#define svc_spawnstatic
Definition protocol.h:240
static void VM_SV_makestatic(prvm_prog_t *prog)
Definition svvm_cmds.c:1594

References angles, prvm_prog_t::argc, colormap, prvm_prog_t::edicts, frame, prvm_edict_t::free, i, modelindex, MSG_WriteAngle(), MSG_WriteByte(), MSG_WriteCoord(), MSG_WriteShort(), OFS_PARM0, origin, server_t::protocol, PROTOCOL_NEHAHRABJP, PROTOCOL_NEHAHRABJP2, PROTOCOL_NEHAHRABJP3, PRVM_ED_Free(), PRVM_G_EDICT, PRVM_PROG_TO_EDICT, PRVM_serveredictfloat, PRVM_serveredictvector, PRVM_serverglobaledict, self, server_t::signon, skin, sv, svc_spawnstatic, svc_spawnstatic2, VM_SAFEPARMCOUNTRANGE, VM_SV_makestatic(), and VM_Warning().

Referenced by VM_SV_makestatic().

◆ VM_SV_modelnameforindex()

static void VM_SV_modelnameforindex ( prvm_prog_t * prog)
static

Definition at line 2841 of file svvm_cmds.c.

2842{
2843 int i;
2845
2847
2850 {
2851 VM_Warning(prog, "modelnameforindex: invalid modelindex\n");
2852 return;
2853 }
2854 if (!sv.model_precache[i][0])
2855 {
2856 VM_Warning(prog, "modelnameforindex: model not precached\n");
2857 return;
2858 }
2859
2861}
#define OFS_NULL
Definition pr_comp.h:32
int PRVM_SetEngineString(prvm_prog_t *prog, const char *s)
char model_precache[MAX_MODELS][MAX_QPATH]
Definition server.h:116
static void VM_SV_modelnameforindex(prvm_prog_t *prog)
Definition svvm_cmds.c:2841

References i, int(), MAX_MODELS, server_t::model_precache, OFS_NULL, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetEngineString(), sv, VM_SAFEPARMCOUNT, VM_SV_modelnameforindex(), and VM_Warning().

Referenced by VM_SV_modelnameforindex().

◆ VM_SV_newcheckclient()

static int VM_SV_newcheckclient ( prvm_prog_t * prog,
int check )
static

Definition at line 786 of file svvm_cmds.c.

787{
788 int i;
789 prvm_edict_t *ent;
790 vec3_t org;
791
792// cycle to the next one
793
794 check = bound(1, check, svs.maxclients);
795 if (check == svs.maxclients)
796 i = 1;
797 else
798 i = check + 1;
799
800 for ( ; ; i++)
801 {
802 // count the cost
803 prog->xfunction->builtinsprofile++;
804 // wrap around
805 if (i == svs.maxclients+1)
806 i = 1;
807 // look up the client's edict
808 ent = PRVM_EDICT_NUM(i);
809 // check if it is to be ignored, but never ignore the one we started on (prevent infinite loop)
810 if (i != check && (ent->free || PRVM_serveredictfloat(ent, health) <= 0 || ((int)PRVM_serveredictfloat(ent, flags) & FL_NOTARGET)))
811 continue;
812 // found a valid client (possibly the same one again)
813 break;
814 }
815
816// get the PVS for the entity
818 if (sv.worldmodel && sv.worldmodel->brush.FatPVS)
819 sv.worldmodel->brush.FatPVS(sv.worldmodel, org, 0, &checkpvs, sv_mempool, false);
820 else
821 checkpvs = NULL;
822
823 return i;
824}
#define FL_NOTARGET
Definition server.h:364

References bound, mfunction_t::builtinsprofile, checkpvs, FL_NOTARGET, flags, prvm_edict_t::free, health, i, server_static_t::maxclients, NULL, origin, PRVM_EDICT_NUM, PRVM_serveredictfloat, PRVM_serveredictvector, sv, sv_mempool, svs, VectorAdd, view_ofs, server_t::worldmodel, and prvm_prog_t::xfunction.

Referenced by VM_SV_checkclient().

◆ VM_SV_particle()

static void VM_SV_particle ( prvm_prog_t * prog)
static

Definition at line 448 of file svvm_cmds.c.

449{
450 vec3_t org, dir;
451 int color;
452 int count;
453
455
461}
vector color
GLenum GLenum GLsizei count
Definition glquake.h:656
void SV_StartParticle(vec3_t org, vec3_t dir, int color, int count)
Definition sv_send.c:158
static void VM_SV_particle(prvm_prog_t *prog)
Definition svvm_cmds.c:448

References color, count, dir, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, PRVM_G_FLOAT, PRVM_G_VECTOR, SV_StartParticle(), VectorCopy, VM_SAFEPARMCOUNT, and VM_SV_particle().

Referenced by VM_SV_particle().

◆ VM_SV_particleeffectnum()

static void VM_SV_particleeffectnum ( prvm_prog_t * prog)
static

Definition at line 2864 of file svvm_cmds.c.

2865{
2866 int i;
2869 if (i == 0)
2870 i = -1;
2872}
int SV_ParticleEffectIndex(const char *name)
Definition sv_main.c:1522
static void VM_SV_particleeffectnum(prvm_prog_t *prog)
Definition svvm_cmds.c:2864

References i, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, SV_ParticleEffectIndex(), VM_SAFEPARMCOUNT, and VM_SV_particleeffectnum().

Referenced by VM_SV_particleeffectnum().

◆ VM_SV_pointcontents()

static void VM_SV_pointcontents ( prvm_prog_t * prog)
static

Definition at line 1335 of file svvm_cmds.c.

1336{
1337 vec3_t point;
1341}
int Mod_Q1BSP_NativeContentsFromSuperContents(int supercontents)
int SV_PointSuperContents(const vec3_t point)
Definition sv_phys.c:611
static void VM_SV_pointcontents(prvm_prog_t *prog)
Definition svvm_cmds.c:1335

References Mod_Q1BSP_NativeContentsFromSuperContents(), OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_VECTOR, SV_PointSuperContents(), VectorCopy, VM_SAFEPARMCOUNT, and VM_SV_pointcontents().

Referenced by VM_SV_pointcontents().

◆ VM_SV_pointparticles()

static void VM_SV_pointparticles ( prvm_prog_t * prog)
static

Definition at line 2894 of file svvm_cmds.c.

2895{
2896 int effectnum, count;
2897 vec3_t org, vel;
2899
2900 if ((int)PRVM_G_FLOAT(OFS_PARM0) < 0)
2901 return;
2902
2903 effectnum = (int)PRVM_G_FLOAT(OFS_PARM0);
2906 count = bound(0, (int)PRVM_G_FLOAT(OFS_PARM3), 65535);
2907 if (count == 1 && !VectorLength2(vel))
2908 {
2909 // 1+2+12=15 bytes
2911 MSG_WriteShort(&sv.datagram, effectnum);
2913 }
2914 else
2915 {
2916 // 1+2+12+12+2=29 bytes
2918 MSG_WriteShort(&sv.datagram, effectnum);
2922 }
2923
2925}
#define VectorLength2(a)
Definition mathlib.h:110
#define svc_pointparticles1
Definition protocol.h:282
#define svc_pointparticles
Definition protocol.h:281
void SV_FlushBroadcastMessages(void)
Definition sv_send.c:1371
sizebuf_t datagram
Definition server.h:126
static void VM_SV_pointparticles(prvm_prog_t *prog)
Definition svvm_cmds.c:2894

References bound, count, server_t::datagram, int(), MSG_WriteByte(), MSG_WriteShort(), MSG_WriteVector(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, server_t::protocol, PRVM_G_FLOAT, PRVM_G_VECTOR, sv, SV_FlushBroadcastMessages(), svc_pointparticles, svc_pointparticles1, VectorCopy, VectorLength2, VM_SAFEPARMCOUNTRANGE, and VM_SV_pointparticles().

Referenced by VM_SV_pointparticles().

◆ VM_SV_pointsound()

static void VM_SV_pointsound ( prvm_prog_t * prog)
static

Definition at line 607 of file svvm_cmds.c.

608{
609 const char *sample;
610 int nvolume;
611 float attenuation;
612 float pitchchange;
613 vec3_t org;
614
616
618 sample = PRVM_G_STRING(OFS_PARM1);
619 nvolume = (int)(PRVM_G_FLOAT(OFS_PARM2) * 255);
620 attenuation = PRVM_G_FLOAT(OFS_PARM3);
621 pitchchange = prog->argc < 5 ? 0 : PRVM_G_FLOAT(OFS_PARM4) * 0.01f;
622
623 if (nvolume < 0 || nvolume > 255)
624 {
625 VM_Warning(prog, "SV_StartPointSound: volume must be in range 0-1\n");
626 return;
627 }
628
629 if (attenuation < 0 || attenuation > 4)
630 {
631 VM_Warning(prog, "SV_StartPointSound: attenuation must be in range 0-4\n");
632 return;
633 }
634
635 SV_StartPointSound (org, sample, nvolume, attenuation, pitchchange);
636}
void SV_StartPointSound(vec3_t origin, const char *sample, int volume, float attenuation, float speed)
Definition sv_send.c:320
static void VM_SV_pointsound(prvm_prog_t *prog)
Definition svvm_cmds.c:607

References prvm_prog_t::argc, int(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, PRVM_G_FLOAT, PRVM_G_STRING, PRVM_G_VECTOR, SV_StartPointSound(), VectorCopy, VM_SAFEPARMCOUNTRANGE, VM_SV_pointsound(), and VM_Warning().

Referenced by VM_SV_pointsound().

◆ VM_SV_precache_model()

static void VM_SV_precache_model ( prvm_prog_t * prog)
static

Definition at line 1110 of file svvm_cmds.c.

1111{
1115}
static void VM_SV_precache_model(prvm_prog_t *prog)
Definition svvm_cmds.c:1110

References OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, SV_ModelIndex(), VM_SAFEPARMCOUNT, and VM_SV_precache_model().

Referenced by VM_SV_precache_model().

◆ VM_SV_precache_sound()

static void VM_SV_precache_sound ( prvm_prog_t * prog)
static

Definition at line 1104 of file svvm_cmds.c.

1105{
1108}
static void VM_SV_precache_sound(prvm_prog_t *prog)
Definition svvm_cmds.c:1104

References OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, SV_SoundIndex(), VM_SAFEPARMCOUNT, and VM_SV_precache_sound().

Referenced by VM_SV_precache_sound().

◆ VM_SV_registercommand()

static void VM_SV_registercommand ( prvm_prog_t * prog)
static

Definition at line 2934 of file svvm_cmds.c.

2935{
2936 VM_SAFEPARMCOUNT(1, VM_SV_registercmd);
2937 Cmd_AddCommand(CF_SERVER, PRVM_G_STRING(OFS_PARM0), NULL, "console command created by QuakeC");
2938}
void Cmd_AddCommand(unsigned flags, const char *cmd_name, xcommand_t function, const char *description)
called by the init functions of other parts of the program to register commands and functions to call...
Definition cmd.c:1661
#define CF_SERVER
cvar/command that only the server can change/execute
Definition cmd.h:49

References CF_SERVER, Cmd_AddCommand(), NULL, OFS_PARM0, PRVM_G_STRING, and VM_SAFEPARMCOUNT.

◆ VM_SV_serverkey()

static void VM_SV_serverkey ( prvm_prog_t * prog)
static

Definition at line 2784 of file svvm_cmds.c.

2785{
2786 char string[VM_TEMPSTRING_MAXSIZE];
2787
2789 InfoString_GetValue(svs.serverinfo, PRVM_G_STRING(OFS_PARM0), string, sizeof(string));
2790 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, string, strlen(string));
2791}
size_t InfoString_GetValue(const char *buffer, const char *key, char *value, size_t valuesize)
Returns the number of bytes written to *value excluding the \0 terminator.
char serverinfo[MAX_SERVERINFO_STRING]
server infostring
Definition server.h:36
static void VM_SV_serverkey(prvm_prog_t *prog)
Definition svvm_cmds.c:2784

References InfoString_GetValue(), OFS_PARM0, OFS_RETURN, PRVM_G_INT, PRVM_G_STRING, PRVM_SetTempString(), server_static_t::serverinfo, strlen(), svs, VM_SAFEPARMCOUNT, VM_SV_serverkey(), and VM_TEMPSTRING_MAXSIZE.

Referenced by VM_SV_serverkey().

◆ VM_SV_setattachment()

static void VM_SV_setattachment ( prvm_prog_t * prog)
static

Definition at line 2440 of file svvm_cmds.c.

2441{
2443 prvm_edict_t *tagentity = PRVM_G_EDICT(OFS_PARM1);
2444 const char *tagname = PRVM_G_STRING(OFS_PARM2);
2445 model_t *model;
2446 int tagindex;
2448
2449 if (e == prog->edicts)
2450 {
2451 VM_Warning(prog, "setattachment: can not modify world entity\n");
2452 return;
2453 }
2454 if (e->free)
2455 {
2456 VM_Warning(prog, "setattachment: can not modify free entity\n");
2457 return;
2458 }
2459
2460 if (tagentity == NULL)
2461 tagentity = prog->edicts;
2462
2463 tagindex = 0;
2464
2465 if (tagentity != NULL && tagentity != prog->edicts && tagname && tagname[0])
2466 {
2467 model = SV_GetModelFromEdict(tagentity);
2468 if (model)
2469 {
2470 tagindex = Mod_Alias_GetTagIndexForName(model, (int)PRVM_serveredictfloat(tagentity, skin), tagname);
2471 if (tagindex == 0)
2472 Con_DPrintf("setattachment(edict %i, edict %i, string \"%s\"): tried to find tag named \"%s\" on entity %i (model \"%s\") but could not find it\n", PRVM_NUM_FOR_EDICT(e), PRVM_NUM_FOR_EDICT(tagentity), tagname, tagname, PRVM_NUM_FOR_EDICT(tagentity), model->name);
2473 }
2474 else
2475 Con_DPrintf("setattachment(edict %i, edict %i, string \"%s\"): tried to find tag named \"%s\" on entity %i but it has no model\n", PRVM_NUM_FOR_EDICT(e), PRVM_NUM_FOR_EDICT(tagentity), tagname, tagname, PRVM_NUM_FOR_EDICT(tagentity));
2476 }
2477
2479 PRVM_serveredictfloat(e, tag_index) = tagindex;
2480}
static void VM_SV_setattachment(prvm_prog_t *prog)
Definition svvm_cmds.c:2440

References Con_DPrintf(), prvm_prog_t::edicts, prvm_edict_t::free, Mod_Alias_GetTagIndexForName(), model, NULL, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_EDICT_TO_PROG, PRVM_G_EDICT, PRVM_G_STRING, PRVM_NUM_FOR_EDICT, PRVM_serveredictedict, PRVM_serveredictfloat, skin, SV_GetModelFromEdict(), tag_entity, tag_index, VM_SAFEPARMCOUNT, VM_SV_setattachment(), and VM_Warning().

Referenced by VM_SV_setattachment().

◆ VM_SV_setcolor()

static void VM_SV_setcolor ( prvm_prog_t * prog)
static

Definition at line 1876 of file svvm_cmds.c.

1877{
1878 client_t *client;
1879 int entnum, i;
1880
1884
1886 {
1887 Con_Print("tried to setcolor a non-client\n");
1888 return;
1889 }
1890
1891 client = svs.clients + entnum-1;
1892 if (client->edict)
1893 {
1895 PRVM_serveredictfloat(client->edict, team) = (i & 15) + 1;
1896 }
1897 client->colors = i;
1898 if (client->old_colors != client->colors)
1899 {
1900 client->old_colors = client->colors;
1901 // send notification to all clients
1905 }
1906}
float clientcolors
#define svc_updatecolors
Definition protocol.h:236
int colors
Definition server.h:236
int old_colors
Definition server.h:236
prvm_edict_t * edict
PRVM_EDICT_NUM(clientnum+1)
Definition server.h:221
sizebuf_t reliable_datagram
Definition server.h:130
static void VM_SV_setcolor(prvm_prog_t *prog)
Definition svvm_cmds.c:1876

References clientcolors, server_static_t::clients, client_t::colors, Con_Print(), client_t::edict, entnum, i, int(), server_static_t::maxclients, MSG_WriteByte(), OFS_PARM0, OFS_PARM1, client_t::old_colors, PRVM_G_EDICTNUM, PRVM_G_FLOAT, PRVM_serveredictfloat, server_t::reliable_datagram, sv, svc_updatecolors, svs, team, VM_SAFEPARMCOUNT, and VM_SV_setcolor().

Referenced by VM_SV_setcolor().

◆ VM_SV_setmodel()

static void VM_SV_setmodel ( prvm_prog_t * prog)
static

Definition at line 329 of file svvm_cmds.c.

330{
331 prvm_edict_t *e;
332 model_t *mod;
333 int i;
334
336
338 if (e == prog->edicts)
339 {
340 VM_Warning(prog, "setmodel: can not modify world entity\n");
341 return;
342 }
343 if (e->free)
344 {
345 VM_Warning(prog, "setmodel: can not modify free entity\n");
346 return;
347 }
351
353
354 if (mod)
355 {
357 SetMinMaxSize(prog, e, mod->normalmins, mod->normalmaxs, true);
358 else
359 SetMinMaxSize(prog, e, quakemins, quakemaxs, true);
360 }
361 else
362 SetMinMaxSize(prog, e, vec3_origin, vec3_origin, true);
363}
float mod(float dividend, float divisor)
vec3_t vec3_origin
Definition mathlib.c:26
@ mod_alias
#define PRVM_serveredictstring(ed, fieldname)
Definition progsvm.h:174
cvar_t sv_gameplayfix_setmodelrealbox
Definition sv_main.c:121
static void VM_SV_setmodel(prvm_prog_t *prog)
Definition svvm_cmds.c:329
static vec3_t quakemins
Definition svvm_cmds.c:328
static void SetMinMaxSize(prvm_prog_t *prog, prvm_edict_t *e, float *min, float *max, qbool rotate)
Definition svvm_cmds.c:271
static vec3_t quakemaxs
Definition svvm_cmds.c:328

References prvm_prog_t::edicts, prvm_edict_t::free, i, cvar_t::integer, mod(), mod_alias, model, server_t::model_precache, modelindex, OFS_PARM0, OFS_PARM1, PRVM_G_EDICT, PRVM_G_STRING, PRVM_serveredictfloat, PRVM_serveredictstring, PRVM_SetEngineString(), quakemaxs, quakemins, SetMinMaxSize(), sv, sv_gameplayfix_setmodelrealbox, SV_GetModelByIndex(), SV_ModelIndex(), vec3_origin, VM_SAFEPARMCOUNT, VM_SV_setmodel(), and VM_Warning().

Referenced by VM_SV_setmodel().

◆ VM_SV_setmodelindex()

static void VM_SV_setmodelindex ( prvm_prog_t * prog)
static

Definition at line 2794 of file svvm_cmds.c.

2795{
2796 prvm_edict_t *e;
2797 model_t *mod;
2798 int i;
2800
2802 if (e == prog->edicts)
2803 {
2804 VM_Warning(prog, "setmodelindex: can not modify world entity\n");
2805 return;
2806 }
2807 if (e->free)
2808 {
2809 VM_Warning(prog, "setmodelindex: can not modify free entity\n");
2810 return;
2811 }
2814 {
2815 VM_Warning(prog, "setmodelindex: invalid modelindex\n");
2816 return;
2817 }
2818 if (!sv.model_precache[i][0])
2819 {
2820 VM_Warning(prog, "setmodelindex: model not precached\n");
2821 return;
2822 }
2823
2826
2828
2829 if (mod)
2830 {
2832 SetMinMaxSize(prog, e, mod->normalmins, mod->normalmaxs, true);
2833 else
2834 SetMinMaxSize(prog, e, quakemins, quakemaxs, true);
2835 }
2836 else
2837 SetMinMaxSize(prog, e, vec3_origin, vec3_origin, true);
2838}
static void VM_SV_setmodelindex(prvm_prog_t *prog)
Definition svvm_cmds.c:2794

References prvm_prog_t::edicts, prvm_edict_t::free, i, int(), cvar_t::integer, MAX_MODELS, mod(), mod_alias, model, server_t::model_precache, modelindex, OFS_PARM0, OFS_PARM1, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_serveredictfloat, PRVM_serveredictstring, PRVM_SetEngineString(), quakemaxs, quakemins, SetMinMaxSize(), sv, sv_gameplayfix_setmodelrealbox, SV_GetModelByIndex(), vec3_origin, VM_SAFEPARMCOUNT, VM_SV_setmodelindex(), and VM_Warning().

Referenced by VM_SV_setmodelindex().

◆ VM_SV_setorigin()

static void VM_SV_setorigin ( prvm_prog_t * prog)
static

Definition at line 247 of file svvm_cmds.c.

248{
249 prvm_edict_t *e;
250
252
254 if (e == prog->edicts)
255 {
256 VM_Warning(prog, "setorigin: can not modify world entity\n");
257 return;
258 }
259 if (e->free)
260 {
261 VM_Warning(prog, "setorigin: can not modify free entity\n");
262 return;
263 }
267 SV_LinkEdict(e);
268}
#define PRVM_EDICT_MARK_SETORIGIN_CAUGHT
Definition progsvm.h:79
#define PRVM_EDICT_MARK_WAIT_FOR_SETORIGIN
Definition progsvm.h:78
int mark
mark for the leak detector
Definition progsvm.h:85
prvm_edict_private_t * required
Definition progsvm.h:101
static void VM_SV_setorigin(prvm_prog_t *prog)
Definition svvm_cmds.c:247

References prvm_prog_t::edicts, prvm_edict_t::free, prvm_edict_private_t::mark, OFS_PARM0, OFS_PARM1, origin, prvm_edict_t::priv, PRVM_EDICT_MARK_SETORIGIN_CAUGHT, PRVM_EDICT_MARK_WAIT_FOR_SETORIGIN, PRVM_G_EDICT, PRVM_G_VECTOR, PRVM_serveredictvector, prvm_edict_t::required, SV_LinkEdict(), VectorCopy, VM_SAFEPARMCOUNT, VM_SV_setorigin(), and VM_Warning().

Referenced by VM_SV_setorigin().

◆ VM_SV_setpause()

static void VM_SV_setpause ( prvm_prog_t * prog)
static

Definition at line 2941 of file svvm_cmds.c.

2941 {
2942 int pauseValue;
2943 pauseValue = (int)PRVM_G_FLOAT(OFS_PARM0);
2944 if (pauseValue != 0) { //pause the game
2945 sv.paused = 1;
2947 } else { //disable pause, in case it was enabled
2948 if (sv.paused != 0) {
2949 sv.paused = 0;
2950 sv.pausedstart = 0;
2951 }
2952 }
2953 // send notification to all clients
2956}
host_static_t host
Definition host.c:41
#define svc_setpause
Definition protocol.h:246
double realtime
the accumulated mainloop time since application started (with filtering), without any slowmo or clamp...
Definition host.h:46
double pausedstart
Definition server.h:69
qbool paused
Definition server.h:68

References host, int(), MSG_WriteByte(), OFS_PARM0, server_t::paused, server_t::pausedstart, PRVM_G_FLOAT, host_static_t::realtime, server_t::reliable_datagram, sv, and svc_setpause.

◆ VM_SV_setsize()

static void VM_SV_setsize ( prvm_prog_t * prog)
static

Definition at line 297 of file svvm_cmds.c.

298{
299 prvm_edict_t *e;
301
303
305 if (e == prog->edicts)
306 {
307 VM_Warning(prog, "setsize: can not modify world entity\n");
308 return;
309 }
310 if (e->free)
311 {
312 VM_Warning(prog, "setsize: can not modify free entity\n");
313 return;
314 }
317 SetMinMaxSize(prog, e, mins, maxs, false);
318}
static void VM_SV_setsize(prvm_prog_t *prog)
Definition svvm_cmds.c:297

References prvm_prog_t::edicts, prvm_edict_t::free, maxs, mins, OFS_PARM0, OFS_PARM1, OFS_PARM2, PRVM_G_EDICT, PRVM_G_VECTOR, SetMinMaxSize(), VectorCopy, VM_SAFEPARMCOUNT, VM_SV_setsize(), and VM_Warning().

Referenced by VM_SV_setsize().

◆ VM_SV_setspawnparms()

static void VM_SV_setspawnparms ( prvm_prog_t * prog)
static

Definition at line 1660 of file svvm_cmds.c.

1661{
1662 prvm_edict_t *ent;
1663 int i;
1664 client_t *client;
1665
1667
1668 ent = PRVM_G_EDICT(OFS_PARM0);
1669 i = PRVM_NUM_FOR_EDICT(ent);
1670 if (i < 1 || i > svs.maxclients || !svs.clients[i-1].active)
1671 {
1672 Con_Print("tried to setspawnparms on a non-client\n");
1673 return;
1674 }
1675
1676 // copy spawn parms out of the client_t
1677 client = svs.clients + i-1;
1678 for (i=0 ; i< NUM_SPAWN_PARMS ; i++)
1679 (&PRVM_serverglobalfloat(parm1))[i] = client->spawn_parms[i];
1680}
float parm1
Definition progsdefs.qc:45
#define NUM_SPAWN_PARMS
Definition server.h:180
prvm_vec_t spawn_parms[NUM_SPAWN_PARMS]
spawn parms are carried from level to level
Definition server.h:232
static void VM_SV_setspawnparms(prvm_prog_t *prog)
Definition svvm_cmds.c:1660

References server_static_t::clients, Con_Print(), i, server_static_t::maxclients, NUM_SPAWN_PARMS, OFS_PARM0, parm1, PRVM_G_EDICT, PRVM_NUM_FOR_EDICT, PRVM_serverglobalfloat, client_t::spawn_parms, svs, VM_SAFEPARMCOUNT, and VM_SV_setspawnparms().

Referenced by VM_SV_setspawnparms().

◆ VM_SV_skel_build()

static void VM_SV_skel_build ( prvm_prog_t * prog)
static

Definition at line 2983 of file svvm_cmds.c.

2984{
2986 skeleton_t *skeleton;
2989 float retainfrac = PRVM_G_FLOAT(OFS_PARM3);
2990 int firstbone = PRVM_G_FLOAT(OFS_PARM4) - 1;
2991 int lastbone = PRVM_G_FLOAT(OFS_PARM5) - 1;
2993 int numblends;
2994 int bonenum;
2995 int blendindex;
2996 framegroupblend_t framegroupblend[MAX_FRAMEGROUPBLENDS];
2997 frameblend_t frameblend[MAX_FRAMEBLENDS];
2998 matrix4x4_t bonematrix;
2999 matrix4x4_t matrix;
3002 return;
3003 firstbone = max(0, firstbone);
3004 lastbone = min(lastbone, model->num_bones - 1);
3005 lastbone = min(lastbone, skeleton->model->num_bones - 1);
3006 VM_GenerateFrameGroupBlend(prog, framegroupblend, ed);
3007 VM_FrameBlendFromFrameGroupBlend(frameblend, framegroupblend, model, sv.time);
3008 for (numblends = 0;numblends < MAX_FRAMEBLENDS && frameblend[numblends].lerp;numblends++)
3009 ;
3010 for (bonenum = firstbone;bonenum <= lastbone;bonenum++)
3011 {
3012 memset(&bonematrix, 0, sizeof(bonematrix));
3013 for (blendindex = 0;blendindex < numblends;blendindex++)
3014 {
3015 Matrix4x4_FromBonePose7s(&matrix, model->num_posescale, model->data_poses7s + 7 * (frameblend[blendindex].subframe * model->num_bones + bonenum));
3016 Matrix4x4_Accumulate(&bonematrix, &matrix, frameblend[blendindex].lerp);
3017 }
3018 Matrix4x4_Normalize3(&bonematrix, &bonematrix);
3019 Matrix4x4_Interpolate(&skeleton->relativetransforms[bonenum], &bonematrix, &skeleton->relativetransforms[bonenum], retainfrac);
3020 }
3022}
#define MAX_FRAMEBLENDS
Definition client.h:309
float skeletonindex
void Matrix4x4_FromBonePose7s(matrix4x4_t *m, float originscale, const short *pose7s)
Definition matrixlib.c:1599
void Matrix4x4_Normalize3(matrix4x4_t *out, matrix4x4_t *in1)
Definition matrixlib.c:508
void Matrix4x4_Interpolate(matrix4x4_t *out, matrix4x4_t *in1, matrix4x4_t *in2, double frac)
Definition matrixlib.c:475
void Matrix4x4_Accumulate(matrix4x4_t *out, matrix4x4_t *in, double weight)
Definition matrixlib.c:491
#define OFS_PARM5
Definition pr_comp.h:39
#define MAX_FRAMEGROUPBLENDS
Definition protocol.h:408
float lerp
Definition client.h:313
struct skeleton_s * skeletons[MAX_EDICTS]
Definition progsvm.h:640
const struct model_s * model
Definition protocol.h:425
struct matrix4x4_s * relativetransforms
Definition protocol.h:426

References int(), frameblend_t::lerp, Matrix4x4_Accumulate(), Matrix4x4_FromBonePose7s(), Matrix4x4_Interpolate(), Matrix4x4_Normalize3(), max, MAX_EDICTS, MAX_FRAMEBLENDS, MAX_FRAMEGROUPBLENDS, min, model, skeleton_t::model, modelindex, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_RETURN, PRVM_G_EDICT, PRVM_G_FLOAT, skeleton_t::relativetransforms, skeletonindex, prvm_prog_t::skeletons, frameblend_t::subframe, sv, SV_GetModelByIndex(), server_t::time, VM_FrameBlendFromFrameGroupBlend(), and VM_GenerateFrameGroupBlend().

◆ VM_SV_skel_copybones()

static void VM_SV_skel_copybones ( prvm_prog_t * prog)
static

Definition at line 3200 of file svvm_cmds.c.

3201{
3202 int skeletonindexdst = (int)PRVM_G_FLOAT(OFS_PARM0) - 1;
3203 int skeletonindexsrc = (int)PRVM_G_FLOAT(OFS_PARM1) - 1;
3204 int firstbone = PRVM_G_FLOAT(OFS_PARM2) - 1;
3205 int lastbone = PRVM_G_FLOAT(OFS_PARM3) - 1;
3206 int bonenum;
3207 skeleton_t *skeletondst;
3208 skeleton_t *skeletonsrc;
3209 if (skeletonindexdst < 0 || skeletonindexdst >= MAX_EDICTS || !(skeletondst = prog->skeletons[skeletonindexdst]))
3210 return;
3211 if (skeletonindexsrc < 0 || skeletonindexsrc >= MAX_EDICTS || !(skeletonsrc = prog->skeletons[skeletonindexsrc]))
3212 return;
3213 firstbone = max(0, firstbone);
3214 lastbone = min(lastbone, skeletondst->model->num_bones - 1);
3215 lastbone = min(lastbone, skeletonsrc->model->num_bones - 1);
3216 for (bonenum = firstbone;bonenum <= lastbone;bonenum++)
3217 skeletondst->relativetransforms[bonenum] = skeletonsrc->relativetransforms[bonenum];
3218}

References int(), max, MAX_EDICTS, min, skeleton_t::model, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, PRVM_G_FLOAT, skeleton_t::relativetransforms, and prvm_prog_t::skeletons.

◆ VM_SV_skel_create()

static void VM_SV_skel_create ( prvm_prog_t * prog)
static

Definition at line 2959 of file svvm_cmds.c.

2960{
2963 skeleton_t *skeleton;
2964 int i;
2966 if (!model || !model->num_bones)
2967 return;
2968 for (i = 0;i < MAX_EDICTS;i++)
2969 if (!prog->skeletons[i])
2970 break;
2971 if (i == MAX_EDICTS)
2972 return;
2973 prog->skeletons[i] = skeleton = (skeleton_t *)Mem_Alloc(prog->progs_mempool, sizeof(skeleton_t) + model->num_bones * sizeof(matrix4x4_t));
2974 PRVM_G_FLOAT(OFS_RETURN) = i + 1;
2975 skeleton->model = model;
2976 skeleton->relativetransforms = (matrix4x4_t *)(skeleton+1);
2977 // initialize to identity matrices
2978 for (i = 0;i < skeleton->model->num_bones;i++)
2979 skeleton->relativetransforms[i] = identitymatrix;
2980}
mempool_t * progs_mempool
all memory allocations related to this vm_prog (code, edicts, strings)
Definition progsvm.h:602
#define Mem_Alloc(pool, size)
Definition zone.h:92

References i, identitymatrix, int(), MAX_EDICTS, Mem_Alloc, model, skeleton_t::model, modelindex, OFS_PARM0, OFS_RETURN, prvm_prog_t::progs_mempool, PRVM_G_FLOAT, skeleton_t::relativetransforms, prvm_prog_t::skeletons, and SV_GetModelByIndex().

◆ VM_SV_skel_delete()

static void VM_SV_skel_delete ( prvm_prog_t * prog)
static

Definition at line 3221 of file svvm_cmds.c.

3222{
3224 skeleton_t *skeleton;
3226 return;
3227 Mem_Free(skeleton);
3228 prog->skeletons[skeletonindex] = NULL;
3229}
#define Mem_Free(mem)
Definition zone.h:96

References int(), MAX_EDICTS, Mem_Free, NULL, OFS_PARM0, PRVM_G_FLOAT, skeletonindex, and prvm_prog_t::skeletons.

◆ VM_SV_skel_find_bone()

static void VM_SV_skel_find_bone ( prvm_prog_t * prog)
static

Definition at line 3064 of file svvm_cmds.c.

3065{
3067 const char *tagname = PRVM_G_STRING(OFS_PARM1);
3068 skeleton_t *skeleton;
3071 return;
3072 PRVM_G_FLOAT(OFS_RETURN) = Mod_Alias_GetTagIndexForName(skeleton->model, 0, tagname) + 1;
3073}

References int(), MAX_EDICTS, Mod_Alias_GetTagIndexForName(), skeleton_t::model, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_STRING, skeletonindex, and prvm_prog_t::skeletons.

◆ VM_SV_skel_get_boneabs()

static void VM_SV_skel_get_boneabs ( prvm_prog_t * prog)
static

Definition at line 3100 of file svvm_cmds.c.

3101{
3103 int bonenum = (int)PRVM_G_FLOAT(OFS_PARM1) - 1;
3104 skeleton_t *skeleton;
3105 matrix4x4_t matrix;
3106 matrix4x4_t temp;
3107 vec3_t forward, left, up, origin;
3113 return;
3114 if (bonenum < 0 || bonenum >= skeleton->model->num_bones)
3115 return;
3116 matrix = skeleton->relativetransforms[bonenum];
3117 // convert to absolute
3118 while ((bonenum = skeleton->model->data_bones[bonenum].parent) >= 0)
3119 {
3120 temp = matrix;
3121 Matrix4x4_Concat(&matrix, &skeleton->relativetransforms[bonenum], &temp);
3122 }
3123 Matrix4x4_ToVectors(&matrix, forward, left, up, origin);
3128}
#define PRVM_clientglobalvector(fieldname)
Definition progsvm.h:190

References forward, int(), Matrix4x4_Concat(), Matrix4x4_ToVectors(), MAX_EDICTS, skeleton_t::model, OFS_PARM0, OFS_PARM1, OFS_RETURN, origin, PRVM_clientglobalvector, PRVM_G_FLOAT, PRVM_G_VECTOR, skeleton_t::relativetransforms, skeletonindex, prvm_prog_t::skeletons, up, v_forward, v_right, v_up, VectorClear, VectorCopy, and VectorNegate.

◆ VM_SV_skel_get_bonename()

static void VM_SV_skel_get_bonename ( prvm_prog_t * prog)
static

Definition at line 3036 of file svvm_cmds.c.

3037{
3039 int bonenum = (int)PRVM_G_FLOAT(OFS_PARM1) - 1;
3040 skeleton_t *skeleton;
3043 return;
3044 if (bonenum < 0 || bonenum >= skeleton->model->num_bones)
3045 return;
3046 PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, skeleton->model->data_bones[bonenum].name, strlen(skeleton->model->data_bones[bonenum].name));
3047}

References int(), MAX_EDICTS, skeleton_t::model, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, PRVM_G_INT, PRVM_SetTempString(), skeletonindex, prvm_prog_t::skeletons, and strlen().

◆ VM_SV_skel_get_boneparent()

static void VM_SV_skel_get_boneparent ( prvm_prog_t * prog)
static

Definition at line 3050 of file svvm_cmds.c.

3051{
3053 int bonenum = (int)PRVM_G_FLOAT(OFS_PARM1) - 1;
3054 skeleton_t *skeleton;
3057 return;
3058 if (bonenum < 0 || bonenum >= skeleton->model->num_bones)
3059 return;
3060 PRVM_G_FLOAT(OFS_RETURN) = skeleton->model->data_bones[bonenum].parent + 1;
3061}

References int(), MAX_EDICTS, skeleton_t::model, OFS_PARM0, OFS_PARM1, OFS_RETURN, PRVM_G_FLOAT, skeletonindex, and prvm_prog_t::skeletons.

◆ VM_SV_skel_get_bonerel()

◆ VM_SV_skel_get_numbones()

static void VM_SV_skel_get_numbones ( prvm_prog_t * prog)
static

Definition at line 3025 of file svvm_cmds.c.

3026{
3028 skeleton_t *skeleton;
3031 return;
3032 PRVM_G_FLOAT(OFS_RETURN) = skeleton->model->num_bones;
3033}

References int(), MAX_EDICTS, skeleton_t::model, OFS_PARM0, OFS_RETURN, PRVM_G_FLOAT, skeletonindex, and prvm_prog_t::skeletons.

◆ VM_SV_skel_mul_bone()

static void VM_SV_skel_mul_bone ( prvm_prog_t * prog)
static

Definition at line 3151 of file svvm_cmds.c.

3152{
3154 int bonenum = (int)PRVM_G_FLOAT(OFS_PARM1) - 1;
3155 vec3_t forward, left, up, origin;
3156 skeleton_t *skeleton;
3157 matrix4x4_t matrix;
3158 matrix4x4_t temp;
3160 return;
3161 if (bonenum < 0 || bonenum >= skeleton->model->num_bones)
3162 return;
3167 Matrix4x4_FromVectors(&matrix, forward, left, up, origin);
3168 temp = skeleton->relativetransforms[bonenum];
3169 Matrix4x4_Concat(&skeleton->relativetransforms[bonenum], &matrix, &temp);
3170}
void Matrix4x4_FromVectors(matrix4x4_t *out, const float vx[3], const float vy[3], const float vz[3], const float t[3])
Definition matrixlib.c:970

References forward, int(), Matrix4x4_Concat(), Matrix4x4_FromVectors(), MAX_EDICTS, skeleton_t::model, OFS_PARM0, OFS_PARM1, OFS_PARM2, origin, PRVM_clientglobalvector, PRVM_G_FLOAT, PRVM_G_VECTOR, skeleton_t::relativetransforms, skeletonindex, prvm_prog_t::skeletons, up, v_forward, v_right, v_up, VectorCopy, and VectorNegate.

◆ VM_SV_skel_mul_bones()

static void VM_SV_skel_mul_bones ( prvm_prog_t * prog)
static

Definition at line 3173 of file svvm_cmds.c.

3174{
3176 int firstbone = PRVM_G_FLOAT(OFS_PARM1) - 1;
3177 int lastbone = PRVM_G_FLOAT(OFS_PARM2) - 1;
3178 int bonenum;
3179 vec3_t forward, left, up, origin;
3180 skeleton_t *skeleton;
3181 matrix4x4_t matrix;
3182 matrix4x4_t temp;
3184 return;
3189 Matrix4x4_FromVectors(&matrix, forward, left, up, origin);
3190 firstbone = max(0, firstbone);
3191 lastbone = min(lastbone, skeleton->model->num_bones - 1);
3192 for (bonenum = firstbone;bonenum <= lastbone;bonenum++)
3193 {
3194 temp = skeleton->relativetransforms[bonenum];
3195 Matrix4x4_Concat(&skeleton->relativetransforms[bonenum], &matrix, &temp);
3196 }
3197}

References forward, int(), Matrix4x4_Concat(), Matrix4x4_FromVectors(), max, MAX_EDICTS, min, skeleton_t::model, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, origin, PRVM_clientglobalvector, PRVM_G_FLOAT, PRVM_G_VECTOR, skeleton_t::relativetransforms, skeletonindex, prvm_prog_t::skeletons, up, v_forward, v_right, v_up, VectorCopy, and VectorNegate.

◆ VM_SV_skel_set_bone()

static void VM_SV_skel_set_bone ( prvm_prog_t * prog)
static

◆ VM_SV_sound()

static void VM_SV_sound ( prvm_prog_t * prog)
static

Definition at line 531 of file svvm_cmds.c.

532{
533 const char *sample;
534 int channel;
536 int nvolume;
537 int flags;
538 float attenuation;
539 float pitchchange;
540
542
544 channel = (int)PRVM_G_FLOAT(OFS_PARM1);
545 sample = PRVM_G_STRING(OFS_PARM2);
546 nvolume = (int)(PRVM_G_FLOAT(OFS_PARM3) * 255);
547 if (prog->argc < 5)
548 {
549 Con_DPrintf("VM_SV_sound: given only 4 parameters, expected 5, assuming attenuation = ATTN_NORMAL\n");
550 attenuation = 1;
551 }
552 else
553 attenuation = PRVM_G_FLOAT(OFS_PARM4);
554 if (prog->argc < 6)
555 pitchchange = 0;
556 else
557 pitchchange = PRVM_G_FLOAT(OFS_PARM5) * 0.01f;
558
559 if (prog->argc < 7)
560 {
561 flags = 0;
562 if(channel >= 8 && channel <= 15) // weird QW feature
563 {
565 channel -= 8;
566 }
567 }
568 else
569 {
570 // LadyHavoc: we only let the qc set certain flags, others are off-limits
572 }
573
574 if (nvolume < 0 || nvolume > 255)
575 {
576 VM_Warning(prog, "SV_StartSound: volume must be in range 0-1\n");
577 return;
578 }
579
580 if (attenuation < 0 || attenuation > 4)
581 {
582 VM_Warning(prog, "SV_StartSound: attenuation must be in range 0-4\n");
583 return;
584 }
585
586 channel = CHAN_USER2ENGINE(channel);
587
588 if (!IS_CHAN(channel))
589 {
590 VM_Warning(prog, "SV_StartSound: channel must be in range 0-127\n");
591 return;
592 }
593
594 SV_StartSound (entity, channel, sample, nvolume, attenuation, flags & CHANNELFLAG_RELIABLE, pitchchange);
595}
entity() spawn
#define OFS_PARM6
Definition pr_comp.h:40
void SV_StartSound(prvm_edict_t *entity, int channel, const char *sample, int volume, float attenuation, qbool reliable, float speed)
Definition sv_send.c:228
#define CHANNELFLAG_FORCELOOP
Definition sound.h:39
#define CHANNELFLAG_RELIABLE
Definition sound.h:38
#define CHANNELFLAG_FULLVOLUME
Definition sound.h:42
#define CHANNELFLAG_PAUSED
Definition sound.h:41
#define CHAN_USER2ENGINE(c)
Definition sound.h:90
#define IS_CHAN(n)
Definition sound.h:82
static void VM_SV_sound(prvm_prog_t *prog)
Definition svvm_cmds.c:531

References prvm_prog_t::argc, CHAN_USER2ENGINE, CHANNELFLAG_FORCELOOP, CHANNELFLAG_FULLVOLUME, CHANNELFLAG_PAUSED, CHANNELFLAG_RELIABLE, Con_DPrintf(), entity(), flags, int(), IS_CHAN, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_PARM6, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_STRING, SV_StartSound(), VM_SAFEPARMCOUNTRANGE, VM_SV_sound(), and VM_Warning().

Referenced by VM_SV_sound().

◆ VM_SV_spawnclient()

static void VM_SV_spawnclient ( prvm_prog_t * prog)
static

Definition at line 2738 of file svvm_cmds.c.

2739{
2740 int i;
2741 prvm_edict_t *ed;
2743 prog->xfunction->builtinsprofile += 2;
2744 ed = prog->edicts;
2745 for (i = 0;i < svs.maxclients;i++)
2746 {
2747 if (!svs.clients[i].active)
2748 {
2749 prog->xfunction->builtinsprofile += 100;
2751 // this has to be set or else ClientDisconnect won't be called
2752 // we assume the qc will call ClientConnect...
2753 svs.clients[i].clientconnectcalled = true;
2754 ed = PRVM_EDICT_NUM(i + 1);
2755 break;
2756 }
2757 }
2758 VM_RETURN_EDICT(ed);
2759}
void SV_ConnectClient(int clientnum, netconn_t *netconnection)
Definition sv_main.c:936
static void VM_SV_spawnclient(prvm_prog_t *prog)
Definition svvm_cmds.c:2738

References mfunction_t::builtinsprofile, server_static_t::clients, prvm_prog_t::edicts, i, server_static_t::maxclients, NULL, PRVM_EDICT_NUM, SV_ConnectClient(), svs, VM_RETURN_EDICT, VM_SAFEPARMCOUNT, VM_SV_spawnclient(), and prvm_prog_t::xfunction.

Referenced by VM_SV_spawnclient().

◆ VM_SV_sprint()

static void VM_SV_sprint ( prvm_prog_t * prog)
static

Definition at line 374 of file svvm_cmds.c.

375{
376 client_t *client;
377 int entnum;
378 char string[VM_TEMPSTRING_MAXSIZE];
379
381
382 VM_VarString(prog, 1, string, sizeof(string));
383
385 // LadyHavoc: div0 requested that sprintto world operate like print
386 if (entnum == 0)
387 {
388 Con_Print(string);
389 return;
390 }
391
393 {
394 VM_Warning(prog, "tried to centerprint to a non-client\n");
395 return;
396 }
397
398 client = svs.clients + entnum-1;
399 if (!client->netconnection)
400 return;
401
403 MSG_WriteString(&client->netconnection->message, string);
404}
#define svc_print
Definition protocol.h:222
static void VM_SV_sprint(prvm_prog_t *prog)
Definition svvm_cmds.c:374

References server_static_t::clients, Con_Print(), entnum, server_static_t::maxclients, netconn_t::message, MSG_WriteChar(), MSG_WriteString(), client_t::netconnection, OFS_PARM0, PRVM_G_EDICTNUM, svc_print, svs, VM_SAFEPARMCOUNTRANGE, VM_SV_sprint(), VM_TEMPSTRING_MAXSIZE, VM_VarString(), and VM_Warning().

Referenced by VM_SV_sprint().

◆ VM_SV_stuffcmd()

static void VM_SV_stuffcmd ( prvm_prog_t * prog)
static

Definition at line 960 of file svvm_cmds.c.

961{
962 int entnum;
963 client_t *old;
964 char string[VM_TEMPSTRING_MAXSIZE];
965
967
970 {
971 VM_Warning(prog, "Can't stuffcmd to a non-client\n");
972 return;
973 }
974
975 VM_VarString(prog, 1, string, sizeof(string));
976
977 old = host_client;
979 SV_ClientCommands ("%s", string);
980 host_client = old;
981}
void SV_ClientCommands(const char *fmt,...) DP_FUNC_PRINTF(1)
Definition sv_send.c:135
static void VM_SV_stuffcmd(prvm_prog_t *prog)
Definition svvm_cmds.c:960

References server_static_t::clients, entnum, host_client, server_static_t::maxclients, OFS_PARM0, PRVM_G_EDICTNUM, SV_ClientCommands(), svs, VM_SAFEPARMCOUNTRANGE, VM_SV_stuffcmd(), VM_TEMPSTRING_MAXSIZE, VM_VarString(), and VM_Warning().

Referenced by VM_SV_stuffcmd().

◆ VM_SV_te_beam()

◆ VM_SV_te_blood()

static void VM_SV_te_blood ( prvm_prog_t * prog)
static

◆ VM_SV_te_bloodshower()

static void VM_SV_te_bloodshower ( prvm_prog_t * prog)
static

◆ VM_SV_te_customflash()

static void VM_SV_te_customflash ( prvm_prog_t * prog)
static

Definition at line 2171 of file svvm_cmds.c.

2172{
2174 if (PRVM_G_FLOAT(OFS_PARM1) < 8 || PRVM_G_FLOAT(OFS_PARM2) < (1.0 / 256.0))
2175 return;
2178 // origin
2182 // radius
2183 MSG_WriteByte(&sv.datagram, (int)bound(0, PRVM_G_FLOAT(OFS_PARM1) / 8 - 1, 255));
2184 // lifetime
2185 MSG_WriteByte(&sv.datagram, (int)bound(0, PRVM_G_FLOAT(OFS_PARM2) * 256 - 1, 255));
2186 // color
2187 MSG_WriteByte(&sv.datagram, (int)bound(0, PRVM_G_VECTOR(OFS_PARM3)[0] * 255, 255));
2188 MSG_WriteByte(&sv.datagram, (int)bound(0, PRVM_G_VECTOR(OFS_PARM3)[1] * 255, 255));
2189 MSG_WriteByte(&sv.datagram, (int)bound(0, PRVM_G_VECTOR(OFS_PARM3)[2] * 255, 255));
2191}
#define TE_CUSTOMFLASH
Definition protocol.h:345
static void VM_SV_te_customflash(prvm_prog_t *prog)
Definition svvm_cmds.c:2171

References bound, server_t::datagram, MSG_WriteByte(), MSG_WriteCoord(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, server_t::protocol, PRVM_G_FLOAT, PRVM_G_VECTOR, sv, SV_FlushBroadcastMessages(), svc_temp_entity, TE_CUSTOMFLASH, VM_SAFEPARMCOUNT, and VM_SV_te_customflash().

Referenced by VM_SV_te_customflash().

◆ VM_SV_te_explosion()

◆ VM_SV_te_explosion2()

◆ VM_SV_te_explosionquad()

◆ VM_SV_te_explosionrgb()

◆ VM_SV_te_flamejet()

◆ VM_SV_te_gunshot()

◆ VM_SV_te_gunshotquad()

◆ VM_SV_te_knightspike()

◆ VM_SV_te_lavasplash()

◆ VM_SV_te_lightning1()

◆ VM_SV_te_lightning2()

◆ VM_SV_te_lightning3()

◆ VM_SV_te_particlecube()

static void VM_SV_te_particlecube ( prvm_prog_t * prog)
static

Definition at line 2009 of file svvm_cmds.c.

2010{
2012 if (PRVM_G_FLOAT(OFS_PARM3) < 1)
2013 return;
2016 // min
2020 // max
2024 // velocity
2028 // count
2030 // color
2032 // gravity true/false
2034 // randomvel
2037}
#define TE_PARTICLECUBE
Definition protocol.h:335
static void VM_SV_te_particlecube(prvm_prog_t *prog)
Definition svvm_cmds.c:2009

References bound, server_t::datagram, MSG_WriteByte(), MSG_WriteCoord(), MSG_WriteShort(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, OFS_PARM6, server_t::protocol, PRVM_G_FLOAT, PRVM_G_VECTOR, sv, SV_FlushBroadcastMessages(), svc_temp_entity, TE_PARTICLECUBE, VM_SAFEPARMCOUNT, and VM_SV_te_particlecube().

Referenced by VM_SV_te_particlecube().

◆ VM_SV_te_particlerain()

static void VM_SV_te_particlerain ( prvm_prog_t * prog)
static

Definition at line 2039 of file svvm_cmds.c.

References bound, server_t::datagram, MSG_WriteByte(), MSG_WriteCoord(), MSG_WriteShort(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, server_t::protocol, PRVM_G_FLOAT, PRVM_G_VECTOR, sv, SV_FlushBroadcastMessages(), svc_temp_entity, TE_PARTICLERAIN, VM_SAFEPARMCOUNT, and VM_SV_te_particlerain().

Referenced by VM_SV_te_particlerain().

◆ VM_SV_te_particlesnow()

static void VM_SV_te_particlesnow ( prvm_prog_t * prog)
static

Definition at line 2065 of file svvm_cmds.c.

References bound, server_t::datagram, MSG_WriteByte(), MSG_WriteCoord(), MSG_WriteShort(), OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, server_t::protocol, PRVM_G_FLOAT, PRVM_G_VECTOR, sv, SV_FlushBroadcastMessages(), svc_temp_entity, TE_PARTICLESNOW, VM_SAFEPARMCOUNT, and VM_SV_te_particlesnow().

Referenced by VM_SV_te_particlesnow().

◆ VM_SV_te_plasmaburn()

◆ VM_SV_te_smallflash()

◆ VM_SV_te_spark()

static void VM_SV_te_spark ( prvm_prog_t * prog)
static

◆ VM_SV_te_spike()

◆ VM_SV_te_spikequad()

◆ VM_SV_te_superspike()

◆ VM_SV_te_superspikequad()

◆ VM_SV_te_tarexplosion()

◆ VM_SV_te_teleport()

◆ VM_SV_te_wizspike()

◆ VM_SV_tracebox()

static void VM_SV_tracebox ( prvm_prog_t * prog)
static

Definition at line 686 of file svvm_cmds.c.

687{
688 vec3_t v1, v2, m1, m2;
689 trace_t trace;
690 int move;
691 prvm_edict_t *ent;
692
693 VM_SAFEPARMCOUNTRANGE(6, 8, VM_SV_tracebox); // allow more parameters for future expansion
694
695 prog->xfunction->builtinsprofile += 30;
696
701 move = (int)PRVM_G_FLOAT(OFS_PARM4);
702 ent = PRVM_G_EDICT(OFS_PARM5);
703
704 if (isnan(v1[0]) || isnan(v1[1]) || isnan(v1[2]) || isnan(v2[0]) || isnan(v2[1]) || isnan(v2[2]))
705 prog->error_cmd("%s: NAN errors detected in tracebox('%f %f %f', '%f %f %f', '%f %f %f', '%f %f %f', %i, entity %i)\n", prog->name, v1[0], v1[1], v1[2], m1[0], m1[1], m1[2], m2[0], m2[1], m2[2], v2[0], v2[1], v2[2], move, PRVM_EDICT_TO_PROG(ent));
706
708
709 VM_SetTraceGlobals(prog, &trace);
710}
cvar_t collision_extendtraceboxlength
Definition collision.c:15
GLfloat GLfloat GLfloat v2
Definition glquake.h:747
GLfloat GLfloat v1
Definition glquake.h:743
void VM_SetTraceGlobals(prvm_prog_t *prog, const trace_t *trace)
Definition prvm_cmds.c:5228
static void VM_SV_tracebox(prvm_prog_t *prog)
Definition svvm_cmds.c:686

References mfunction_t::builtinsprofile, collision_extendtraceboxlength, prvm_prog_t::error_cmd, int(), prvm_prog_t::name, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, OFS_PARM4, OFS_PARM5, PRVM_EDICT_TO_PROG, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, SV_GenericHitSuperContentsMask(), SV_TraceBox(), v1, v2, cvar_t::value, VectorCopy, VM_SAFEPARMCOUNTRANGE, VM_SetTraceGlobals(), VM_SV_tracebox(), and prvm_prog_t::xfunction.

Referenced by VM_SV_tracebox().

◆ VM_SV_traceline()

static void VM_SV_traceline ( prvm_prog_t * prog)
static

Definition at line 649 of file svvm_cmds.c.

650{
651 vec3_t v1, v2;
652 trace_t trace;
653 int move;
654 prvm_edict_t *ent;
655
656 VM_SAFEPARMCOUNTRANGE(4, 8, VM_SV_traceline); // allow more parameters for future expansion
657
658 prog->xfunction->builtinsprofile += 30;
659
662 move = (int)PRVM_G_FLOAT(OFS_PARM2);
663 ent = PRVM_G_EDICT(OFS_PARM3);
664
665 if (isnan(v1[0]) || isnan(v1[1]) || isnan(v1[2]) || isnan(v2[0]) || isnan(v2[1]) || isnan(v2[2]))
666 prog->error_cmd("%s: NAN errors detected in traceline('%f %f %f', '%f %f %f', %i, entity %i)\n", prog->name, v1[0], v1[1], v1[2], v2[0], v2[1], v2[2], move, PRVM_EDICT_TO_PROG(ent));
667
669
670 VM_SetTraceGlobals(prog, &trace);
671}
cvar_t collision_extendtracelinelength
Definition collision.c:16
static void VM_SV_traceline(prvm_prog_t *prog)
Definition svvm_cmds.c:649

References mfunction_t::builtinsprofile, collision_extendtracelinelength, prvm_prog_t::error_cmd, int(), prvm_prog_t::name, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_PARM3, PRVM_EDICT_TO_PROG, PRVM_G_EDICT, PRVM_G_FLOAT, PRVM_G_VECTOR, SV_GenericHitSuperContentsMask(), SV_TraceLine(), v1, v2, cvar_t::value, VectorCopy, VM_SAFEPARMCOUNTRANGE, VM_SetTraceGlobals(), VM_SV_traceline(), and prvm_prog_t::xfunction.

Referenced by VM_SV_traceline().

◆ VM_SV_tracetoss()

static void VM_SV_tracetoss ( prvm_prog_t * prog)
static

Definition at line 759 of file svvm_cmds.c.

760{
761 trace_t trace;
762 prvm_edict_t *ent;
763 prvm_edict_t *ignore;
764
766
767 prog->xfunction->builtinsprofile += 600;
768
769 ent = PRVM_G_EDICT(OFS_PARM0);
770 if (ent == prog->edicts)
771 {
772 VM_Warning(prog, "tracetoss: can not use world entity\n");
773 return;
774 }
775 ignore = PRVM_G_EDICT(OFS_PARM1);
776
777 trace = SV_Trace_Toss(prog, ent, ignore);
778
779 VM_SetTraceGlobals(prog, &trace);
780}
static trace_t SV_Trace_Toss(prvm_prog_t *prog, prvm_edict_t *tossent, prvm_edict_t *ignore)
Definition svvm_cmds.c:712
static void VM_SV_tracetoss(prvm_prog_t *prog)
Definition svvm_cmds.c:759

References mfunction_t::builtinsprofile, prvm_prog_t::edicts, OFS_PARM0, OFS_PARM1, PRVM_G_EDICT, SV_Trace_Toss(), VM_SAFEPARMCOUNT, VM_SetTraceGlobals(), VM_SV_tracetoss(), VM_Warning(), and prvm_prog_t::xfunction.

Referenced by VM_SV_tracetoss().

◆ VM_SV_trailparticles()

◆ VM_SV_UpdateCustomStats()

void VM_SV_UpdateCustomStats ( client_t * client,
prvm_edict_t * ent,
sizebuf_t * msg,
int * stats )

Definition at line 1723 of file svvm_cmds.c.

1724{
1725 prvm_prog_t *prog = SVVM_prog;
1726 int i;
1727 char s[17];
1728 union {
1729 int i;
1730 float f;
1731 } u;
1732
1734 {
1735 if(!vm_customstats[i].type)
1736 continue;
1737 switch(vm_customstats[i].type)
1738 {
1739 //string as 16 bytes
1740 case 1:
1741 memset(s, 0, 17);
1742 dp_strlcpy(s, PRVM_E_STRING(ent, vm_customstats[i].fieldoffset), 16);
1743 stats[i] = s[ 0] + s[ 1] * 256 + s[ 2] * 65536 + s[ 3] * 16777216;
1744 stats[i+1] = s[ 4] + s[ 5] * 256 + s[ 6] * 65536 + s[ 7] * 16777216;
1745 stats[i+2] = s[ 8] + s[ 9] * 256 + s[10] * 65536 + s[11] * 16777216;
1746 stats[i+3] = s[12] + s[13] * 256 + s[14] * 65536 + s[15] * 16777216;
1747 break;
1748 //float field sent as-is
1749 case 8:
1750 // can't directly use PRVM_E_INT on the field because it may be PRVM_64 and a double is not the representation we want to send
1751 u.f = PRVM_E_FLOAT(ent, vm_customstats[i].fieldoffset);
1752 stats[i] = u.i;
1753 break;
1754 //integer value of float field
1755 case 2:
1756 stats[i] = (int)PRVM_E_FLOAT(ent, vm_customstats[i].fieldoffset);
1757 break;
1758 default:
1759 break;
1760 }
1761 }
1762}
#define PRVM_E_FLOAT(e, o)
Definition progsvm.h:891
#define PRVM_E_STRING(e, o)
Definition progsvm.h:894
float f

References dp_strlcpy, f, i, int(), MIN_VM_STAT, PRVM_E_FLOAT, PRVM_E_STRING, SVVM_prog, type, vm_customstats, and vm_customstats_last.

Referenced by SV_SendClientDatagram().

◆ VM_SV_walkmove()

static void VM_SV_walkmove ( prvm_prog_t * prog)
static

Definition at line 1124 of file svvm_cmds.c.

1125{
1126 prvm_edict_t *ent;
1127 float yaw, dist;
1128 vec3_t move;
1129 mfunction_t *oldf;
1130 int oldself;
1131 qbool settrace;
1132
1134
1135 // assume failure if it returns early
1137
1139 if (ent == prog->edicts)
1140 {
1141 VM_Warning(prog, "walkmove: can not modify world entity\n");
1142 return;
1143 }
1144 if (ent->free)
1145 {
1146 VM_Warning(prog, "walkmove: can not modify free entity\n");
1147 return;
1148 }
1149 yaw = PRVM_G_FLOAT(OFS_PARM0);
1150 dist = PRVM_G_FLOAT(OFS_PARM1);
1151 settrace = prog->argc >= 3 && PRVM_G_FLOAT(OFS_PARM2);
1152
1153 if ( !( (int)PRVM_serveredictfloat(ent, flags) & (FL_ONGROUND|FL_FLY|FL_SWIM) ) )
1154 return;
1155
1156 yaw = yaw*M_PI*2 / 360;
1157
1158 move[0] = cos(yaw)*dist;
1159 move[1] = sin(yaw)*dist;
1160 move[2] = 0;
1161
1162// save program state, because SV_movestep may call other progs
1163 oldf = prog->xfunction;
1164 oldself = PRVM_serverglobaledict(self);
1165
1166 PRVM_G_FLOAT(OFS_RETURN) = SV_movestep(ent, move, true, false, settrace);
1167
1168
1169// restore program state
1170 prog->xfunction = oldf;
1171 PRVM_serverglobaledict(self) = oldself;
1172}
#define M_PI
Definition mathlib.h:28
float cos(float f)
float sin(float f)
bool qbool
Definition qtypes.h:9
#define FL_FLY
Definition server.h:357
qbool SV_movestep(prvm_edict_t *ent, vec3_t move, qbool relink, qbool noenemy, qbool settrace)
Definition sv_move.c:109
#define FL_SWIM
Definition server.h:358
static void VM_SV_walkmove(prvm_prog_t *prog)
Definition svvm_cmds.c:1124

References prvm_prog_t::argc, cos(), prvm_prog_t::edicts, FL_FLY, FL_ONGROUND, FL_SWIM, flags, prvm_edict_t::free, M_PI, OFS_PARM0, OFS_PARM1, OFS_PARM2, OFS_RETURN, PRVM_G_FLOAT, PRVM_PROG_TO_EDICT, PRVM_serveredictfloat, PRVM_serverglobaledict, self, sin(), SV_movestep(), VM_SAFEPARMCOUNTRANGE, VM_SV_walkmove(), VM_Warning(), and prvm_prog_t::xfunction.

Referenced by VM_SV_walkmove().

◆ VM_SV_WriteAngle()

static void VM_SV_WriteAngle ( prvm_prog_t * prog)
static

Definition at line 1528 of file svvm_cmds.c.

1529{
1532}
static sizebuf_t * WriteDest(prvm_prog_t *prog)
Definition svvm_cmds.c:1456
static void VM_SV_WriteAngle(prvm_prog_t *prog)
Definition svvm_cmds.c:1528

References MSG_WriteAngle(), OFS_PARM1, server_t::protocol, PRVM_G_FLOAT, sv, VM_SAFEPARMCOUNT, VM_SV_WriteAngle(), and WriteDest().

Referenced by VM_SV_WriteAngle().

◆ VM_SV_WriteByte()

static void VM_SV_WriteByte ( prvm_prog_t * prog)
static

Definition at line 1504 of file svvm_cmds.c.

1505{
1508}
static void VM_SV_WriteByte(prvm_prog_t *prog)
Definition svvm_cmds.c:1504

References MSG_WriteByte(), OFS_PARM1, PRVM_G_FLOAT, VM_SAFEPARMCOUNT, VM_SV_WriteByte(), and WriteDest().

Referenced by VM_SV_WriteByte().

◆ VM_SV_WriteChar()

static void VM_SV_WriteChar ( prvm_prog_t * prog)
static

Definition at line 1510 of file svvm_cmds.c.

1511{
1514}
static void VM_SV_WriteChar(prvm_prog_t *prog)
Definition svvm_cmds.c:1510

References MSG_WriteChar(), OFS_PARM1, PRVM_G_FLOAT, VM_SAFEPARMCOUNT, VM_SV_WriteChar(), and WriteDest().

Referenced by VM_SV_WriteChar().

◆ VM_SV_WriteCoord()

static void VM_SV_WriteCoord ( prvm_prog_t * prog)
static

Definition at line 1534 of file svvm_cmds.c.

1535{
1538}
static void VM_SV_WriteCoord(prvm_prog_t *prog)
Definition svvm_cmds.c:1534

References MSG_WriteCoord(), OFS_PARM1, server_t::protocol, PRVM_G_FLOAT, sv, VM_SAFEPARMCOUNT, VM_SV_WriteCoord(), and WriteDest().

Referenced by VM_SV_WriteCoord().

◆ VM_SV_WriteEntity()

static void VM_SV_WriteEntity ( prvm_prog_t * prog)
static

Definition at line 1553 of file svvm_cmds.c.

1554{
1557}
static void VM_SV_WriteEntity(prvm_prog_t *prog)
Definition svvm_cmds.c:1553

References MSG_WriteShort(), OFS_PARM1, PRVM_G_EDICTNUM, VM_SAFEPARMCOUNT, VM_SV_WriteEntity(), and WriteDest().

Referenced by VM_SV_WriteEntity().

◆ VM_SV_WriteLong()

static void VM_SV_WriteLong ( prvm_prog_t * prog)
static

Definition at line 1522 of file svvm_cmds.c.

1523{
1526}
void MSG_WriteLong(sizebuf_t *sb, int c)
Definition com_msg.c:147
static void VM_SV_WriteLong(prvm_prog_t *prog)
Definition svvm_cmds.c:1522

References MSG_WriteLong(), OFS_PARM1, PRVM_G_FLOAT, VM_SAFEPARMCOUNT, VM_SV_WriteLong(), and WriteDest().

Referenced by VM_SV_WriteLong().

◆ VM_SV_WritePicture()

static void VM_SV_WritePicture ( prvm_prog_t * prog)
static

Definition at line 1565 of file svvm_cmds.c.

1566{
1567 const char *imgname;
1568 void *buf;
1569 size_t size;
1570
1572
1573 imgname = PRVM_G_STRING(OFS_PARM1);
1574 size = (size_t) PRVM_G_FLOAT(OFS_PARM2);
1575 if(size > 65535)
1576 size = 65535;
1577
1578 MSG_WriteString(WriteDest(prog), imgname);
1579 if(Image_Compress(imgname, size, &buf, &size))
1580 {
1581 // actual picture
1582 MSG_WriteShort(WriteDest(prog), (int)size);
1583 SZ_Write(WriteDest(prog), (unsigned char *) buf, (int)size);
1584 }
1585 else
1586 {
1587 // placeholder
1588 MSG_WriteShort(WriteDest(prog), 0);
1589 }
1590}
void SZ_Write(sizebuf_t *buf, const unsigned char *data, int length)
Definition common.c:72
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition glquake.h:657
qbool Image_Compress(const char *imagename, size_t maxsize, void **buf, size_t *size)
Definition jpeg.c:1047
static void VM_SV_WritePicture(prvm_prog_t *prog)
Definition svvm_cmds.c:1565

References buf, Image_Compress(), MSG_WriteShort(), MSG_WriteString(), OFS_PARM1, OFS_PARM2, PRVM_G_FLOAT, PRVM_G_STRING, size, SZ_Write(), VM_SAFEPARMCOUNT, VM_SV_WritePicture(), and WriteDest().

Referenced by VM_SV_WritePicture().

◆ VM_SV_WriteShort()

static void VM_SV_WriteShort ( prvm_prog_t * prog)
static

Definition at line 1516 of file svvm_cmds.c.

1517{
1520}
static void VM_SV_WriteShort(prvm_prog_t *prog)
Definition svvm_cmds.c:1516

References MSG_WriteShort(), OFS_PARM1, PRVM_G_FLOAT, VM_SAFEPARMCOUNT, VM_SV_WriteShort(), and WriteDest().

Referenced by VM_SV_WriteShort().

◆ VM_SV_WriteString()

static void VM_SV_WriteString ( prvm_prog_t * prog)
static

Definition at line 1540 of file svvm_cmds.c.

1541{
1544}
static void VM_SV_WriteString(prvm_prog_t *prog)
Definition svvm_cmds.c:1540

References MSG_WriteString(), OFS_PARM1, PRVM_G_STRING, VM_SAFEPARMCOUNT, VM_SV_WriteString(), and WriteDest().

Referenced by VM_SV_WriteString().

◆ VM_SV_WriteUnterminatedString()

static void VM_SV_WriteUnterminatedString ( prvm_prog_t * prog)
static

Definition at line 1546 of file svvm_cmds.c.

1547{
1550}
void MSG_WriteUnterminatedString(sizebuf_t *sb, const char *s)
Definition com_msg.c:181
static void VM_SV_WriteUnterminatedString(prvm_prog_t *prog)
Definition svvm_cmds.c:1546

References MSG_WriteUnterminatedString(), OFS_PARM1, PRVM_G_STRING, VM_SAFEPARMCOUNT, VM_SV_WriteUnterminatedString(), and WriteDest().

Referenced by VM_SV_WriteUnterminatedString().

◆ WriteDest()

static sizebuf_t * WriteDest ( prvm_prog_t * prog)
static

Definition at line 1456 of file svvm_cmds.c.

1457{
1458 int entnum;
1459 int dest;
1460 prvm_edict_t *ent;
1461
1462 dest = (int)PRVM_G_FLOAT(OFS_PARM0);
1463 switch (dest)
1464 {
1465 case MSG_BROADCAST:
1466 return &sv.datagram;
1467
1468 case MSG_ONE:
1472 {
1473 VM_Warning(prog, "WriteDest: tried to write to non-client\n");
1474 return &sv.reliable_datagram;
1475 }
1476 else if (!svs.clients[entnum-1].active)
1477 {
1478 VM_Warning(prog, "WriteDest: tried to write to a disconnected client\n");
1479 return &sv.reliable_datagram;
1480 }
1481 else if (!svs.clients[entnum-1].netconnection)
1482 {
1483 VM_Warning(prog, "WriteDest: tried to write to a bot client\n");
1484 return &sv.reliable_datagram;
1485 }
1486 else
1487 return &svs.clients[entnum-1].netconnection->message;
1488
1489 default:
1490 VM_Warning(prog, "WriteDest: bad destination\n");
1491 case MSG_ALL:
1492 return &sv.reliable_datagram;
1493
1494 case MSG_INIT:
1495 return &sv.signon;
1496
1497 case MSG_ENTITY:
1499 }
1500
1501 //return NULL;
1502}
entity msg_entity
Definition progsdefs.qc:63
sizebuf_t * writeentitiestoclient_msg
Definition server.h:152
#define MSG_ALL
Definition svvm_cmds.c:1452
#define MSG_INIT
Definition svvm_cmds.c:1453
#define MSG_ONE
Definition svvm_cmds.c:1451
#define MSG_BROADCAST
Definition svvm_cmds.c:1450
#define MSG_ENTITY
Definition svvm_cmds.c:1454

References server_static_t::clients, server_t::datagram, entnum, int(), server_static_t::maxclients, MSG_ALL, MSG_BROADCAST, MSG_ENTITY, msg_entity, MSG_INIT, MSG_ONE, OFS_PARM0, PRVM_G_FLOAT, PRVM_NUM_FOR_EDICT, PRVM_PROG_TO_EDICT, PRVM_serverglobaledict, server_t::reliable_datagram, server_t::signon, sv, svs, VM_Warning(), and server_t::writeentitiestoclient_msg.

Referenced by VM_SV_WriteAngle(), VM_SV_WriteByte(), VM_SV_WriteChar(), VM_SV_WriteCoord(), VM_SV_WriteEntity(), VM_SV_WriteLong(), VM_SV_WritePicture(), VM_SV_WriteShort(), VM_SV_WriteString(), and VM_SV_WriteUnterminatedString().

Variable Documentation

◆ c_invis

int c_invis

Definition at line 841 of file svvm_cmds.c.

Referenced by VM_SV_checkclient().

◆ c_notvis

int c_notvis

Definition at line 841 of file svvm_cmds.c.

Referenced by VM_SV_checkclient().

◆ checkpvs

unsigned char* checkpvs
static

Definition at line 784 of file svvm_cmds.c.

Referenced by VM_SV_checkclient(), and VM_SV_newcheckclient().

◆ quakemaxs

vec3_t quakemaxs = {16, 16, 16}
static

Definition at line 328 of file svvm_cmds.c.

328{-16, -16, -16}, quakemaxs = {16, 16, 16};

Referenced by VM_SV_setmodel(), and VM_SV_setmodelindex().

◆ quakemins

vec3_t quakemins = {-16, -16, -16}
static

Definition at line 328 of file svvm_cmds.c.

328{-16, -16, -16}, quakemaxs = {16, 16, 16};

Referenced by VM_SV_setmodel(), and VM_SV_setmodelindex().

◆ sv_qcstats

cvar_t sv_qcstats
extern

Definition at line 148 of file sv_main.c.

148{CF_SERVER, "sv_qcstats", "0", "Disables engine sending of stats 220 and above, for use by certain games such as Xonotic, NOTE: it's strongly recommended that SVQC send correct STAT_MOVEVARS_TICRATE and STAT_MOVEVARS_TIMESCALE"};

Referenced by SV_Init(), and VM_SV_AddStat().

◆ vm_customstats

customstat_t vm_customstats[MAX_CL_STATS]
static

Definition at line 1714 of file svvm_cmds.c.

Referenced by VM_CustomStats_Clear(), VM_SV_AddStat(), and VM_SV_UpdateCustomStats().

◆ vm_customstats_last

int vm_customstats_last
static

Definition at line 1715 of file svvm_cmds.c.

Referenced by VM_CustomStats_Clear(), VM_SV_AddStat(), and VM_SV_UpdateCustomStats().

◆ vm_sv_builtins

prvm_builtin_t vm_sv_builtins[]

Definition at line 3265 of file svvm_cmds.c.

3265 {
3266NULL, // #0 NULL function (not callable) (QUAKE)
3267VM_makevectors, // #1 void(vector ang) makevectors (QUAKE)
3268VM_SV_setorigin, // #2 void(entity e, vector o) setorigin (QUAKE)
3269VM_SV_setmodel, // #3 void(entity e, string m) setmodel (QUAKE)
3270VM_SV_setsize, // #4 void(entity e, vector min, vector max) setsize (QUAKE)
3271NULL, // #5 void(entity e, vector min, vector max) setabssize (QUAKE)
3272VM_break, // #6 void() break (QUAKE)
3273VM_random, // #7 float() random (QUAKE)
3274VM_SV_sound, // #8 void(entity e, float chan, string samp, float volume[, float atten[, float pitchchange[, float flags]]]) sound (QUAKE)
3275VM_normalize, // #9 vector(vector v) normalize (QUAKE)
3276VM_error, // #10 void(string e) error (QUAKE)
3277VM_objerror, // #11 void(string e) objerror (QUAKE)
3278VM_vlen, // #12 float(vector v) vlen (QUAKE)
3279VM_vectoyaw, // #13 float(vector v) vectoyaw (QUAKE)
3280VM_spawn, // #14 entity() spawn (QUAKE)
3281VM_remove, // #15 void(entity e) remove (QUAKE)
3282VM_SV_traceline, // #16 void(vector v1, vector v2, float tryents) traceline (QUAKE)
3283VM_SV_checkclient, // #17 entity() checkclient (QUAKE)
3284VM_find, // #18 entity(entity start, .string fld, string match) find (QUAKE)
3285VM_SV_precache_sound, // #19 void(string s) precache_sound (QUAKE)
3286VM_SV_precache_model, // #20 void(string s) precache_model (QUAKE)
3287VM_SV_stuffcmd, // #21 void(entity client, string s, ...) stuffcmd (QUAKE)
3288VM_SV_findradius, // #22 entity(vector org, float rad) findradius (QUAKE)
3289VM_bprint, // #23 void(string s, ...) bprint (QUAKE)
3290VM_SV_sprint, // #24 void(entity client, string s, ...) sprint (QUAKE)
3291VM_dprint, // #25 void(string s, ...) dprint (QUAKE)
3292VM_ftos, // #26 string(float f) ftos (QUAKE)
3293VM_vtos, // #27 string(vector v) vtos (QUAKE)
3294VM_coredump, // #28 void() coredump (QUAKE)
3295VM_traceon, // #29 void() traceon (QUAKE)
3296VM_traceoff, // #30 void() traceoff (QUAKE)
3297VM_eprint, // #31 void(entity e) eprint (QUAKE)
3298VM_SV_walkmove, // #32 float(float yaw, float dist) walkmove (QUAKE)
3299NULL, // #33 (QUAKE)
3300VM_SV_droptofloor, // #34 float() droptofloor (QUAKE)
3301VM_SV_lightstyle, // #35 void(float style, string value) lightstyle (QUAKE)
3302VM_rint, // #36 float(float v) rint (QUAKE)
3303VM_floor, // #37 float(float v) floor (QUAKE)
3304VM_ceil, // #38 float(float v) ceil (QUAKE)
3305NULL, // #39 (QUAKE)
3306VM_SV_checkbottom, // #40 float(entity e) checkbottom (QUAKE)
3307VM_SV_pointcontents, // #41 float(vector v) pointcontents (QUAKE)
3308NULL, // #42 (QUAKE)
3309VM_fabs, // #43 float(float f) fabs (QUAKE)
3310VM_SV_aim, // #44 vector(entity e, float speed) aim (QUAKE)
3311VM_cvar, // #45 float(string s) cvar (QUAKE)
3312VM_localcmd, // #46 void(string s) localcmd (QUAKE)
3313VM_nextent, // #47 entity(entity e) nextent (QUAKE)
3314VM_SV_particle, // #48 void(vector o, vector d, float color, float count) particle (QUAKE)
3315VM_changeyaw, // #49 void() ChangeYaw (QUAKE)
3316NULL, // #50 (QUAKE)
3317VM_vectoangles, // #51 vector(vector v) vectoangles (QUAKE)
3318VM_SV_WriteByte, // #52 void(float to, float f) WriteByte (QUAKE)
3319VM_SV_WriteChar, // #53 void(float to, float f) WriteChar (QUAKE)
3320VM_SV_WriteShort, // #54 void(float to, float f) WriteShort (QUAKE)
3321VM_SV_WriteLong, // #55 void(float to, float f) WriteLong (QUAKE)
3322VM_SV_WriteCoord, // #56 void(float to, float f) WriteCoord (QUAKE)
3323VM_SV_WriteAngle, // #57 void(float to, float f) WriteAngle (QUAKE)
3324VM_SV_WriteString, // #58 void(float to, string s) WriteString (QUAKE)
3325VM_SV_WriteEntity, // #59 void(float to, entity e) WriteEntity (QUAKE)
3326VM_sin, // #60 float(float f) sin (DP_QC_SINCOSSQRTPOW) (QUAKE)
3327VM_cos, // #61 float(float f) cos (DP_QC_SINCOSSQRTPOW) (QUAKE)
3328VM_sqrt, // #62 float(float f) sqrt (DP_QC_SINCOSSQRTPOW) (QUAKE)
3329VM_changepitch, // #63 void(entity ent) changepitch (DP_QC_CHANGEPITCH) (QUAKE)
3330VM_SV_tracetoss, // #64 void(entity e, entity ignore) tracetoss (DP_QC_TRACETOSS) (QUAKE)
3331VM_etos, // #65 string(entity ent) etos (DP_QC_ETOS) (QUAKE)
3332NULL, // #66 (QUAKE)
3333VM_SV_MoveToGoal, // #67 void(float step) movetogoal (QUAKE)
3334VM_precache_file, // #68 string(string s) precache_file (QUAKE)
3335VM_SV_makestatic, // #69 void(entity e) makestatic (QUAKE)
3336VM_changelevel, // #70 void(string s) changelevel (QUAKE)
3337NULL, // #71 (QUAKE)
3338VM_cvar_set, // #72 void(string var, string val) cvar_set (QUAKE)
3339VM_SV_centerprint, // #73 void(entity client, strings) centerprint (QUAKE)
3340VM_SV_ambientsound, // #74 void(vector pos, string samp, float vol, float atten) ambientsound (QUAKE)
3341VM_SV_precache_model, // #75 string(string s) precache_model2 (QUAKE)
3342VM_SV_precache_sound, // #76 string(string s) precache_sound2 (QUAKE)
3343VM_precache_file, // #77 string(string s) precache_file2 (QUAKE)
3344VM_SV_setspawnparms, // #78 void(entity e) setspawnparms (QUAKE)
3345NULL, // #79 void(entity killer, entity killee) logfrag (QUAKEWORLD)
3346NULL, // #80 string(entity e, string keyname) infokey (QUAKEWORLD)
3347VM_stof, // #81 float(string s) stof (FRIK_FILE)
3348NULL, // #82 void(vector where, float set) multicast (QUAKEWORLD)
3349NULL, // #83 (QUAKE)
3350NULL, // #84 (QUAKE)
3351NULL, // #85 (QUAKE)
3352NULL, // #86 (QUAKE)
3353NULL, // #87 (QUAKE)
3354NULL, // #88 (QUAKE)
3355NULL, // #89 (QUAKE)
3356VM_SV_tracebox, // #90 void(vector v1, vector min, vector max, vector v2, float nomonsters, entity forent) tracebox (DP_QC_TRACEBOX)
3357VM_randomvec, // #91 vector() randomvec (DP_QC_RANDOMVEC)
3358VM_SV_getlight, // #92 vector(vector org) getlight (DP_QC_GETLIGHT)
3359VM_registercvar, // #93 float(string name, string value) registercvar (DP_REGISTERCVAR)
3360VM_min, // #94 float(float a, floats) min (DP_QC_MINMAXBOUND)
3361VM_max, // #95 float(float a, floats) max (DP_QC_MINMAXBOUND)
3362VM_bound, // #96 float(float minimum, float val, float maximum) bound (DP_QC_MINMAXBOUND)
3363VM_pow, // #97 float(float f, float f) pow (DP_QC_SINCOSSQRTPOW)
3364VM_findfloat, // #98 entity(entity start, .float fld, float match) findfloat (DP_QC_FINDFLOAT)
3365VM_checkextension, // #99 float(string s) checkextension (the basis of the extension system)
3366// FrikaC and Telejano range #100-#199
3367NULL, // #100
3368NULL, // #101
3369NULL, // #102
3370NULL, // #103
3371NULL, // #104
3372NULL, // #105
3373NULL, // #106
3374NULL, // #107
3375NULL, // #108
3376NULL, // #109
3377VM_fopen, // #110 float(string filename, float mode) fopen (FRIK_FILE)
3378VM_fclose, // #111 void(float fhandle) fclose (FRIK_FILE)
3379VM_fgets, // #112 string(float fhandle) fgets (FRIK_FILE)
3380VM_fputs, // #113 void(float fhandle, string s) fputs (FRIK_FILE)
3381VM_strlen, // #114 float(string s) strlen (FRIK_FILE)
3382VM_strcat, // #115 string(string s, string...) strcat (FRIK_FILE)
3383VM_substring, // #116 string(string s, float start, float length) substring (FRIK_FILE)
3384VM_stov, // #117 vector(string) stov (FRIK_FILE)
3385VM_strzone, // #118 string(string s) strzone (FRIK_FILE)
3386VM_strunzone, // #119 void(string s) strunzone (FRIK_FILE)
3387NULL, // #120
3388NULL, // #121
3389NULL, // #122
3390NULL, // #123
3391NULL, // #124
3392NULL, // #125
3393NULL, // #126
3394NULL, // #127
3395NULL, // #128
3396NULL, // #129
3397NULL, // #130
3398NULL, // #131
3399NULL, // #132
3400NULL, // #133
3401NULL, // #134
3402NULL, // #135
3403NULL, // #136
3404NULL, // #137
3405NULL, // #138
3406NULL, // #139
3407NULL, // #140
3408NULL, // #141
3409NULL, // #142
3410NULL, // #143
3411NULL, // #144
3412NULL, // #145
3413NULL, // #146
3414NULL, // #147
3415NULL, // #148
3416NULL, // #149
3417NULL, // #150
3418NULL, // #151
3419NULL, // #152
3420NULL, // #153
3421NULL, // #154
3422NULL, // #155
3423NULL, // #156
3424NULL, // #157
3425NULL, // #158
3426NULL, // #159
3427NULL, // #160
3428NULL, // #161
3429NULL, // #162
3430NULL, // #163
3431NULL, // #164
3432NULL, // #165
3433NULL, // #166
3434NULL, // #167
3435NULL, // #168
3436NULL, // #169
3437NULL, // #170
3438NULL, // #171
3439NULL, // #172
3440NULL, // #173
3441NULL, // #174
3442NULL, // #175
3443NULL, // #176
3444NULL, // #177
3445NULL, // #178
3446NULL, // #179
3447NULL, // #180
3448NULL, // #181
3449NULL, // #182
3450NULL, // #183
3451NULL, // #184
3452NULL, // #185
3453NULL, // #186
3454NULL, // #187
3455NULL, // #188
3456NULL, // #189
3457NULL, // #190
3458NULL, // #191
3459NULL, // #192
3460NULL, // #193
3461NULL, // #194
3462NULL, // #195
3463NULL, // #196
3464NULL, // #197
3465NULL, // #198
3466NULL, // #199
3467// FTEQW range #200-#299
3468NULL, // #200
3469NULL, // #201
3470NULL, // #202
3471NULL, // #203
3472NULL, // #204
3473NULL, // #205
3474NULL, // #206
3475NULL, // #207
3476NULL, // #208
3477NULL, // #209
3478NULL, // #210
3479NULL, // #211
3480NULL, // #212
3481NULL, // #213
3482NULL, // #214
3483NULL, // #215
3484NULL, // #216
3485NULL, // #217
3486VM_bitshift, // #218 float(float number, float quantity) bitshift (EXT_BITSHIFT)
3487NULL, // #219
3488NULL, // #220
3489VM_strstrofs, // #221 float(string str, string sub[, float startpos]) strstrofs (FTE_STRINGS)
3490VM_str2chr, // #222 float(string str, float ofs) str2chr (FTE_STRINGS)
3491VM_chr2str, // #223 string(float c, ...) chr2str (FTE_STRINGS)
3492VM_strconv, // #224 string(float ccase, float calpha, float cnum, string s, ...) strconv (FTE_STRINGS)
3493VM_strpad, // #225 string(float chars, string s, ...) strpad (FTE_STRINGS)
3494VM_infoadd, // #226 string(string info, string key, string value, ...) infoadd (FTE_STRINGS)
3495VM_infoget, // #227 string(string info, string key) infoget (FTE_STRINGS)
3496VM_strncmp, // #228 float(string s1, string s2, float len) strncmp (FTE_STRINGS)
3497VM_strncasecmp, // #229 float(string s1, string s2) strcasecmp (FTE_STRINGS)
3498VM_strncasecmp, // #230 float(string s1, string s2, float len) strncasecmp (FTE_STRINGS)
3499NULL, // #231
3500VM_SV_AddStat, // #232 void(float index, float type, .void field) SV_AddStat (EXT_CSQC)
3501NULL, // #233
3502NULL, // #234
3503NULL, // #235
3504NULL, // #236
3505NULL, // #237
3506NULL, // #238
3507NULL, // #239
3508VM_SV_checkpvs, // #240 float(vector viewpos, entity viewee) checkpvs;
3509NULL, // #241
3510NULL, // #242
3511NULL, // #243
3512NULL, // #244
3513VM_modulo, // #245
3514NULL, // #246
3515NULL, // #247
3516NULL, // #248
3517NULL, // #249
3518NULL, // #250
3519NULL, // #251
3520NULL, // #252
3521NULL, // #253
3522NULL, // #254
3523NULL, // #255
3524NULL, // #256
3525NULL, // #257
3526NULL, // #258
3527NULL, // #259
3528NULL, // #260
3529NULL, // #261
3530NULL, // #262
3531VM_SV_skel_create, // #263 float(float modlindex) skel_create = #263; // (DP_SKELETONOBJECTS) create a skeleton (be sure to assign this value into .skeletonindex for use), returns skeleton index (1 or higher) on success, returns 0 on failure (for example if the modelindex is not skeletal), it is recommended that you create a new skeleton if you change modelindex.
3532VM_SV_skel_build, // #264 float(float skel, entity ent, float modlindex, float retainfrac, float firstbone, float lastbone) skel_build = #264; // (DP_SKELETONOBJECTS) blend in a percentage of standard animation, 0 replaces entirely, 1 does nothing, 0.5 blends half, etc, and this only alters the bones in the specified range for which out of bounds values like 0,100000 are safe (uses .frame, .frame2, .frame3, .frame4, .lerpfrac, .lerpfrac3, .lerpfrac4, .frame1time, .frame2time, .frame3time, .frame4time), returns skel on success, 0 on failure
3533VM_SV_skel_get_numbones, // #265 float(float skel) skel_get_numbones = #265; // (DP_SKELETONOBJECTS) returns how many bones exist in the created skeleton
3534VM_SV_skel_get_bonename, // #266 string(float skel, float bonenum) skel_get_bonename = #266; // (DP_SKELETONOBJECTS) returns name of bone (as a tempstring)
3535VM_SV_skel_get_boneparent, // #267 float(float skel, float bonenum) skel_get_boneparent = #267; // (DP_SKELETONOBJECTS) returns parent num for supplied bonenum, -1 if bonenum has no parent or bone does not exist (returned value is always less than bonenum, you can loop on this)
3536VM_SV_skel_find_bone, // #268 float(float skel, string tagname) skel_find_bone = #268; // (DP_SKELETONOBJECTS) get number of bone with specified name, 0 on failure, tagindex (bonenum+1) on success, same as using gettagindex on the modelindex
3537VM_SV_skel_get_bonerel, // #269 vector(float skel, float bonenum) skel_get_bonerel = #269; // (DP_SKELETONOBJECTS) get matrix of bone in skeleton relative to its parent - sets v_forward, v_right, v_up, returns origin (relative to parent bone)
3538VM_SV_skel_get_boneabs, // #270 vector(float skel, float bonenum) skel_get_boneabs = #270; // (DP_SKELETONOBJECTS) get matrix of bone in skeleton in model space - sets v_forward, v_right, v_up, returns origin (relative to entity)
3539VM_SV_skel_set_bone, // #271 void(float skel, float bonenum, vector org) skel_set_bone = #271; // (DP_SKELETONOBJECTS) set matrix of bone relative to its parent, reads v_forward, v_right, v_up, takes origin as parameter (relative to parent bone)
3540VM_SV_skel_mul_bone, // #272 void(float skel, float bonenum, vector org) skel_mul_bone = #272; // (DP_SKELETONOBJECTS) transform bone matrix (relative to its parent) by the supplied matrix in v_forward, v_right, v_up, takes origin as parameter (relative to parent bone)
3541VM_SV_skel_mul_bones, // #273 void(float skel, float startbone, float endbone, vector org) skel_mul_bones = #273; // (DP_SKELETONOBJECTS) transform bone matrices (relative to their parents) by the supplied matrix in v_forward, v_right, v_up, takes origin as parameter (relative to parent bones)
3542VM_SV_skel_copybones, // #274 void(float skeldst, float skelsrc, float startbone, float endbone) skel_copybones = #274; // (DP_SKELETONOBJECTS) copy bone matrices (relative to their parents) from one skeleton to another, useful for copying a skeleton to a corpse
3543VM_SV_skel_delete, // #275 void(float skel) skel_delete = #275; // (DP_SKELETONOBJECTS) deletes skeleton at the beginning of the next frame (you can add the entity, delete the skeleton, renderscene, and it will still work)
3544VM_SV_frameforname, // #276 float(float modlindex, string framename) frameforname = #276; // (DP_SKELETONOBJECTS) finds number of a specified frame in the animation, returns -1 if no match found
3545VM_SV_frameduration, // #277 float(float modlindex, float framenum) frameduration = #277; // (DP_SKELETONOBJECTS) returns the intended play time (in seconds) of the specified framegroup, if it does not exist the result is 0, if it is a single frame it may be a small value around 0.1 or 0.
3546NULL, // #278
3547NULL, // #279
3548NULL, // #280
3549NULL, // #281
3550NULL, // #282
3551NULL, // #283
3552NULL, // #284
3553NULL, // #285
3554NULL, // #286
3555NULL, // #287
3556NULL, // #288
3557NULL, // #289
3558NULL, // #290
3559NULL, // #291
3560NULL, // #292
3561NULL, // #293
3562NULL, // #294
3563NULL, // #295
3564NULL, // #296
3565NULL, // #297
3566NULL, // #298
3567NULL, // #299
3568// CSQC range #300-#399
3569NULL, // #300 void() clearscene (EXT_CSQC)
3570NULL, // #301 void(float mask) addentities (EXT_CSQC)
3571NULL, // #302 void(entity ent) addentity (EXT_CSQC)
3572NULL, // #303 float(float property, ...) setproperty (EXT_CSQC)
3573NULL, // #304 void() renderscene (EXT_CSQC)
3574NULL, // #305 void(vector org, float radius, vector lightcolours) adddynamiclight (EXT_CSQC)
3575NULL, // #306 void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon
3576NULL, // #307 void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex
3577NULL, // #308 void() R_EndPolygon
3578NULL, // #309
3579NULL, // #310 vector (vector v) cs_unproject (EXT_CSQC)
3580NULL, // #311 vector (vector v) cs_project (EXT_CSQC)
3581NULL, // #312
3582NULL, // #313
3583NULL, // #314
3584NULL, // #315 void(float width, vector pos1, vector pos2, float flag) drawline (EXT_CSQC)
3585NULL, // #316 float(string name) iscachedpic (EXT_CSQC)
3586NULL, // #317 string(string name, float trywad) precache_pic (EXT_CSQC)
3587NULL, // #318 vector(string picname) draw_getimagesize (EXT_CSQC)
3588NULL, // #319 void(string name) freepic (EXT_CSQC)
3589NULL, // #320 float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter (EXT_CSQC)
3590NULL, // #321 float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring (EXT_CSQC)
3591NULL, // #322 float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic (EXT_CSQC)
3592NULL, // #323 float(vector position, vector size, vector rgb, float alpha, float flag) drawfill (EXT_CSQC)
3593NULL, // #324 void(float x, float y, float width, float height) drawsetcliparea
3594NULL, // #325 void(void) drawresetcliparea
3595NULL, // #326
3596NULL, // #327
3597NULL, // #328
3598NULL, // #329
3599NULL, // #330 float(float stnum) getstatf (EXT_CSQC)
3600NULL, // #331 float(float stnum) getstati (EXT_CSQC)
3601NULL, // #332 string(float firststnum) getstats (EXT_CSQC)
3602VM_SV_setmodelindex, // #333 void(entity e, float mdlindex) setmodelindex (EXT_CSQC)
3603VM_SV_modelnameforindex, // #334 string(float mdlindex) modelnameforindex (EXT_CSQC)
3604VM_SV_particleeffectnum, // #335 float(string effectname) particleeffectnum (EXT_CSQC)
3605VM_SV_trailparticles, // #336 void(entity ent, float effectnum, vector start, vector end) trailparticles (EXT_CSQC)
3606VM_SV_pointparticles, // #337 void(float effectnum, vector origin [, vector dir, float count]) pointparticles (EXT_CSQC)
3607NULL, // #338 void(string s, ...) centerprint (EXT_CSQC)
3608VM_print, // #339 void(string s, ...) print (EXT_CSQC, DP_SV_PRINT)
3609NULL, // #340 string(float keynum) keynumtostring (EXT_CSQC)
3610NULL, // #341 float(string keyname) stringtokeynum (EXT_CSQC)
3611NULL, // #342 string(float keynum) getkeybind (EXT_CSQC)
3612NULL, // #343 void(float usecursor) setcursormode (EXT_CSQC)
3613NULL, // #344 vector() getmousepos (EXT_CSQC)
3614NULL, // #345 float(float framenum) getinputstate (EXT_CSQC)
3615NULL, // #346 void(float sens) setsensitivityscaler (EXT_CSQC)
3616NULL, // #347 void() runstandardplayerphysics (EXT_CSQC)
3617NULL, // #348 string(float playernum, string keyname) getplayerkeyvalue (EXT_CSQC)
3618NULL, // #349 float() isdemo (EXT_CSQC)
3619VM_isserver, // #350 float() isserver (EXT_CSQC)
3620NULL, // #351 void(vector origin, vector forward, vector right, vector up) SetListener (EXT_CSQC)
3621VM_SV_registercommand, // #352 void(string cmdname) registercommand (EXT_CSQC)
3622VM_wasfreed, // #353 float(entity ent) wasfreed (EXT_CSQC) (should be availabe on server too)
3623VM_SV_serverkey, // #354 string(string key) serverkey (EXT_CSQC)
3624NULL, // #355
3625NULL, // #356
3626NULL, // #357
3627NULL, // #358
3628NULL, // #359
3629NULL, // #360 float() readbyte (EXT_CSQC)
3630NULL, // #361 float() readchar (EXT_CSQC)
3631NULL, // #362 float() readshort (EXT_CSQC)
3632NULL, // #363 float() readlong (EXT_CSQC)
3633NULL, // #364 float() readcoord (EXT_CSQC)
3634NULL, // #365 float() readangle (EXT_CSQC)
3635NULL, // #366 string() readstring (EXT_CSQC)
3636NULL, // #367 float() readfloat (EXT_CSQC)
3637NULL, // #368
3638NULL, // #369
3639NULL, // #370
3640NULL, // #371
3641NULL, // #372
3642NULL, // #373
3643NULL, // #374
3644NULL, // #375
3645NULL, // #376
3646NULL, // #377
3647NULL, // #378
3648NULL, // #379
3649NULL, // #380
3650NULL, // #381
3651NULL, // #382
3652NULL, // #383
3653NULL, // #384
3654NULL, // #385
3655NULL, // #386
3656NULL, // #387
3657NULL, // #388
3658NULL, // #389
3659NULL, // #390
3660NULL, // #391
3661NULL, // #392
3662NULL, // #393
3663NULL, // #394
3664NULL, // #395
3665NULL, // #396
3666NULL, // #397
3667NULL, // #398
3668NULL, // #399
3669// LadyHavoc's range #400-#499
3670VM_SV_copyentity, // #400 void(entity from, entity to) copyentity (DP_QC_COPYENTITY)
3671VM_SV_setcolor, // #401 void(entity ent, float colors) setcolor (DP_QC_SETCOLOR)
3672VM_findchain, // #402 entity(.string fld, string match) findchain (DP_QC_FINDCHAIN)
3673VM_findchainfloat, // #403 entity(.float fld, float match) findchainfloat (DP_QC_FINDCHAINFLOAT)
3674VM_SV_effect, // #404 void(vector org, string modelname, float startframe, float endframe, float framerate) effect (DP_SV_EFFECT)
3675VM_SV_te_blood, // #405 void(vector org, vector velocity, float howmany) te_blood (DP_TE_BLOOD)
3676VM_SV_te_bloodshower, // #406 void(vector mincorner, vector maxcorner, float explosionspeed, float howmany) te_bloodshower (DP_TE_BLOODSHOWER)
3677VM_SV_te_explosionrgb, // #407 void(vector org, vector color) te_explosionrgb (DP_TE_EXPLOSIONRGB)
3678VM_SV_te_particlecube, // #408 void(vector mincorner, vector maxcorner, vector vel, float howmany, float color, float gravityflag, float randomveljitter) te_particlecube (DP_TE_PARTICLECUBE)
3679VM_SV_te_particlerain, // #409 void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlerain (DP_TE_PARTICLERAIN)
3680VM_SV_te_particlesnow, // #410 void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlesnow (DP_TE_PARTICLESNOW)
3681VM_SV_te_spark, // #411 void(vector org, vector vel, float howmany) te_spark (DP_TE_SPARK)
3682VM_SV_te_gunshotquad, // #412 void(vector org) te_gunshotquad (DP_QUADEFFECTS1)
3683VM_SV_te_spikequad, // #413 void(vector org) te_spikequad (DP_QUADEFFECTS1)
3684VM_SV_te_superspikequad, // #414 void(vector org) te_superspikequad (DP_QUADEFFECTS1)
3685VM_SV_te_explosionquad, // #415 void(vector org) te_explosionquad (DP_QUADEFFECTS1)
3686VM_SV_te_smallflash, // #416 void(vector org) te_smallflash (DP_TE_SMALLFLASH)
3687VM_SV_te_customflash, // #417 void(vector org, float radius, float lifetime, vector color) te_customflash (DP_TE_CUSTOMFLASH)
3688VM_SV_te_gunshot, // #418 void(vector org) te_gunshot (DP_TE_STANDARDEFFECTBUILTINS)
3689VM_SV_te_spike, // #419 void(vector org) te_spike (DP_TE_STANDARDEFFECTBUILTINS)
3690VM_SV_te_superspike, // #420 void(vector org) te_superspike (DP_TE_STANDARDEFFECTBUILTINS)
3691VM_SV_te_explosion, // #421 void(vector org) te_explosion (DP_TE_STANDARDEFFECTBUILTINS)
3692VM_SV_te_tarexplosion, // #422 void(vector org) te_tarexplosion (DP_TE_STANDARDEFFECTBUILTINS)
3693VM_SV_te_wizspike, // #423 void(vector org) te_wizspike (DP_TE_STANDARDEFFECTBUILTINS)
3694VM_SV_te_knightspike, // #424 void(vector org) te_knightspike (DP_TE_STANDARDEFFECTBUILTINS)
3695VM_SV_te_lavasplash, // #425 void(vector org) te_lavasplash (DP_TE_STANDARDEFFECTBUILTINS)
3696VM_SV_te_teleport, // #426 void(vector org) te_teleport (DP_TE_STANDARDEFFECTBUILTINS)
3697VM_SV_te_explosion2, // #427 void(vector org, float colorstart, float colorlength) te_explosion2 (DP_TE_STANDARDEFFECTBUILTINS)
3698VM_SV_te_lightning1, // #428 void(entity own, vector start, vector end) te_lightning1 (DP_TE_STANDARDEFFECTBUILTINS)
3699VM_SV_te_lightning2, // #429 void(entity own, vector start, vector end) te_lightning2 (DP_TE_STANDARDEFFECTBUILTINS)
3700VM_SV_te_lightning3, // #430 void(entity own, vector start, vector end) te_lightning3 (DP_TE_STANDARDEFFECTBUILTINS)
3701VM_SV_te_beam, // #431 void(entity own, vector start, vector end) te_beam (DP_TE_STANDARDEFFECTBUILTINS)
3702VM_vectorvectors, // #432 void(vector dir) vectorvectors (DP_QC_VECTORVECTORS)
3703VM_SV_te_plasmaburn, // #433 void(vector org) te_plasmaburn (DP_TE_PLASMABURN)
3704VM_getsurfacenumpoints, // #434 float(entity e, float s) getsurfacenumpoints (DP_QC_GETSURFACE)
3705VM_getsurfacepoint, // #435 vector(entity e, float s, float n) getsurfacepoint (DP_QC_GETSURFACE)
3706VM_getsurfacenormal, // #436 vector(entity e, float s) getsurfacenormal (DP_QC_GETSURFACE)
3707VM_getsurfacetexture, // #437 string(entity e, float s) getsurfacetexture (DP_QC_GETSURFACE)
3708VM_getsurfacenearpoint, // #438 float(entity e, vector p) getsurfacenearpoint (DP_QC_GETSURFACE)
3709VM_getsurfaceclippedpoint, // #439 vector(entity e, float s, vector p) getsurfaceclippedpoint (DP_QC_GETSURFACE)
3710VM_SV_clientcommand, // #440 void(entity e, string s) clientcommand (KRIMZON_SV_PARSECLIENTCOMMAND)
3711VM_tokenize, // #441 float(string s) tokenize (KRIMZON_SV_PARSECLIENTCOMMAND)
3712VM_argv, // #442 string(float n) argv (KRIMZON_SV_PARSECLIENTCOMMAND)
3713VM_SV_setattachment, // #443 void(entity e, entity tagentity, string tagname) setattachment (DP_GFX_QUAKE3MODELTAGS)
3714VM_search_begin, // #444 float(string pattern, float caseinsensitive, float quiet) search_begin (DP_QC_FS_SEARCH)
3715VM_search_end, // #445 void(float handle) search_end (DP_QC_FS_SEARCH)
3716VM_search_getsize, // #446 float(float handle) search_getsize (DP_QC_FS_SEARCH)
3717VM_search_getfilename, // #447 string(float handle, float num) search_getfilename (DP_QC_FS_SEARCH)
3718VM_cvar_string, // #448 string(string s) cvar_string (DP_QC_CVAR_STRING)
3719VM_findflags, // #449 entity(entity start, .float fld, float match) findflags (DP_QC_FINDFLAGS)
3720VM_findchainflags, // #450 entity(.float fld, float match) findchainflags (DP_QC_FINDCHAINFLAGS)
3721VM_SV_gettagindex, // #451 float(entity ent, string tagname) gettagindex (DP_QC_GETTAGINFO)
3722VM_SV_gettaginfo, // #452 vector(entity ent, float tagindex) gettaginfo (DP_QC_GETTAGINFO)
3723VM_SV_dropclient, // #453 void(entity clent) dropclient (DP_SV_DROPCLIENT)
3724VM_SV_spawnclient, // #454 entity() spawnclient (DP_SV_BOTCLIENT)
3725VM_SV_clienttype, // #455 float(entity clent) clienttype (DP_SV_BOTCLIENT)
3726VM_SV_WriteUnterminatedString, // #456 void(float to, string s) WriteUnterminatedString (DP_SV_WRITEUNTERMINATEDSTRING)
3727VM_SV_te_flamejet, // #457 void(vector org, vector vel, float howmany) te_flamejet = #457 (DP_TE_FLAMEJET)
3728NULL, // #458
3729VM_ftoe, // #459 entity(float num) entitybyindex (DP_QC_EDICT_NUM)
3730VM_buf_create, // #460 float() buf_create (DP_QC_STRINGBUFFERS)
3731VM_buf_del, // #461 void(float bufhandle) buf_del (DP_QC_STRINGBUFFERS)
3732VM_buf_getsize, // #462 float(float bufhandle) buf_getsize (DP_QC_STRINGBUFFERS)
3733VM_buf_copy, // #463 void(float bufhandle_from, float bufhandle_to) buf_copy (DP_QC_STRINGBUFFERS)
3734VM_buf_sort, // #464 void(float bufhandle, float sortpower, float backward) buf_sort (DP_QC_STRINGBUFFERS)
3735VM_buf_implode, // #465 string(float bufhandle, string glue) buf_implode (DP_QC_STRINGBUFFERS)
3736VM_bufstr_get, // #466 string(float bufhandle, float string_index) bufstr_get (DP_QC_STRINGBUFFERS)
3737VM_bufstr_set, // #467 void(float bufhandle, float string_index, string str) bufstr_set (DP_QC_STRINGBUFFERS)
3738VM_bufstr_add, // #468 float(float bufhandle, string str, float order) bufstr_add (DP_QC_STRINGBUFFERS)
3739VM_bufstr_free, // #469 void(float bufhandle, float string_index) bufstr_free (DP_QC_STRINGBUFFERS)
3740NULL, // #470
3741VM_asin, // #471 float(float s) VM_asin (DP_QC_ASINACOSATANATAN2TAN)
3742VM_acos, // #472 float(float c) VM_acos (DP_QC_ASINACOSATANATAN2TAN)
3743VM_atan, // #473 float(float t) VM_atan (DP_QC_ASINACOSATANATAN2TAN)
3744VM_atan2, // #474 float(float c, float s) VM_atan2 (DP_QC_ASINACOSATANATAN2TAN)
3745VM_tan, // #475 float(float a) VM_tan (DP_QC_ASINACOSATANATAN2TAN)
3746VM_strlennocol, // #476 float(string s) : DRESK - String Length (not counting color codes) (DP_QC_STRINGCOLORFUNCTIONS)
3747VM_strdecolorize, // #477 string(string s) : DRESK - Decolorized String (DP_SV_STRINGCOLORFUNCTIONS)
3748VM_strftime, // #478 string(float uselocaltime, string format, ...) (DP_QC_STRFTIME)
3749VM_tokenizebyseparator, // #479 float(string s) tokenizebyseparator (DP_QC_TOKENIZEBYSEPARATOR)
3750VM_strtolower, // #480 string(string s) VM_strtolower (DP_QC_STRING_CASE_FUNCTIONS)
3751VM_strtoupper, // #481 string(string s) VM_strtoupper (DP_QC_STRING_CASE_FUNCTIONS)
3752VM_cvar_defstring, // #482 string(string s) cvar_defstring (DP_QC_CVAR_DEFSTRING)
3753VM_SV_pointsound, // #483 void(vector origin, string sample, float volume, float attenuation) (DP_SV_POINTSOUND)
3754VM_strreplace, // #484 string(string search, string replace, string subject) strreplace (DP_QC_STRREPLACE)
3755VM_strireplace, // #485 string(string search, string replace, string subject) strireplace (DP_QC_STRREPLACE)
3756VM_getsurfacepointattribute,// #486 vector(entity e, float s, float n, float a) getsurfacepointattribute = #486;
3757NULL, // #487
3758NULL, // #488
3759NULL, // #489
3760NULL, // #490
3761NULL, // #491
3762NULL, // #492
3763NULL, // #493
3764VM_crc16, // #494 float(float caseinsensitive, string s, ...) crc16 = #494 (DP_QC_CRC16)
3765VM_cvar_type, // #495 float(string name) cvar_type = #495; (DP_QC_CVAR_TYPE)
3766VM_numentityfields, // #496 float() numentityfields = #496; (DP_QC_ENTITYDATA)
3767VM_entityfieldname, // #497 string(float fieldnum) entityfieldname = #497; (DP_QC_ENTITYDATA)
3768VM_entityfieldtype, // #498 float(float fieldnum) entityfieldtype = #498; (DP_QC_ENTITYDATA)
3769VM_getentityfieldstring, // #499 string(float fieldnum, entity ent) getentityfieldstring = #499; (DP_QC_ENTITYDATA)
3770VM_putentityfieldstring, // #500 float(float fieldnum, entity ent, string s) putentityfieldstring = #500; (DP_QC_ENTITYDATA)
3771VM_SV_WritePicture, // #501
3772NULL, // #502
3773VM_whichpack, // #503 string(string) whichpack = #503;
3774NULL, // #504
3775NULL, // #505
3776NULL, // #506
3777NULL, // #507
3778NULL, // #508
3779NULL, // #509
3780VM_uri_escape, // #510 string(string in) uri_escape = #510;
3781VM_uri_unescape, // #511 string(string in) uri_unescape = #511;
3782VM_etof, // #512 float(entity ent) num_for_edict = #512 (DP_QC_NUM_FOR_EDICT)
3783VM_uri_get, // #513 float(string uri, float id, [string post_contenttype, string post_delim, [float buf]]) uri_get = #513; (DP_QC_URI_GET, DP_QC_URI_POST)
3784VM_tokenize_console, // #514 float(string str) tokenize_console = #514; (DP_QC_TOKENIZE_CONSOLE)
3785VM_argv_start_index, // #515 float(float idx) argv_start_index = #515; (DP_QC_TOKENIZE_CONSOLE)
3786VM_argv_end_index, // #516 float(float idx) argv_end_index = #516; (DP_QC_TOKENIZE_CONSOLE)
3787VM_buf_cvarlist, // #517 void(float buf, string prefix, string antiprefix) buf_cvarlist = #517; (DP_QC_STRINGBUFFERS_CVARLIST)
3788VM_cvar_description, // #518 float(string name) cvar_description = #518; (DP_QC_CVAR_DESCRIPTION)
3789VM_gettime, // #519 float(float timer) gettime = #519; (DP_QC_GETTIME)
3790NULL, // #520
3791NULL, // #521
3792NULL, // #522
3793NULL, // #523
3794NULL, // #524
3795NULL, // #525
3796NULL, // #526
3797NULL, // #527
3798NULL, // #528
3799VM_loadfromdata, // #529
3800VM_loadfromfile, // #530
3801VM_SV_setpause, // #531 void(float pause) setpause = #531;
3802VM_log, // #532
3803VM_getsoundtime, // #533 float(entity e, float channel) getsoundtime = #533; (DP_SND_GETSOUNDTIME)
3804VM_soundlength, // #534 float(string sample) soundlength = #534; (DP_SND_GETSOUNDTIME)
3805VM_buf_loadfile, // #535 float(string filename, float bufhandle) buf_loadfile (DP_QC_STRINGBUFFERS_EXT_WIP)
3806VM_buf_writefile, // #536 float(float filehandle, float bufhandle, float startpos, float numstrings) buf_writefile (DP_QC_STRINGBUFFERS_EXT_WIP)
3807VM_bufstr_find, // #537 float(float bufhandle, string match, float matchrule, float startpos) bufstr_find (DP_QC_STRINGBUFFERS_EXT_WIP)
3808VM_matchpattern, // #538 float(string s, string pattern, float matchrule) matchpattern (DP_QC_STRINGBUFFERS_EXT_WIP)
3809NULL, // #539
3810VM_physics_enable, // #540 void(entity e, float physics_enabled) physics_enable = #540; (DP_PHYSICS_ODE)
3811VM_physics_addforce, // #541 void(entity e, vector force, vector relative_ofs) physics_addforce = #541; (DP_PHYSICS_ODE)
3812VM_physics_addtorque, // #542 void(entity e, vector torque) physics_addtorque = #542; (DP_PHYSICS_ODE)
3813NULL, // #543
3814NULL, // #544
3815NULL, // #545
3816NULL, // #546
3817NULL, // #547
3818NULL, // #548
3819NULL, // #549
3820NULL, // #550
3821NULL, // #551
3822NULL, // #552
3823NULL, // #553
3824NULL, // #554
3825NULL, // #555
3826NULL, // #556
3827NULL, // #557
3828NULL, // #558
3829NULL, // #559
3830NULL, // #560
3831NULL, // #561
3832NULL, // #562
3833NULL, // #563
3834NULL, // #564
3835NULL, // #565
3836VM_SV_findbox, // #566 entity(vector mins, vector maxs) findbox = #566; (DP_QC_FINDBOX)
3837VM_nudgeoutofsolid, // #567 float(entity ent) nudgeoutofsolid = #567; (DP_QC_NUDGEOUTOFSOLID)
3838NULL, // #568
3839NULL, // #569
3840NULL, // #570
3841NULL, // #571
3842NULL, // #572
3843NULL, // #573
3844NULL, // #574
3845NULL, // #575
3846NULL, // #576
3847NULL, // #577
3848NULL, // #578
3849NULL, // #579
3850NULL, // #580
3851NULL, // #581
3852NULL, // #582
3853NULL, // #583
3854NULL, // #584
3855NULL, // #585
3856NULL, // #586
3857NULL, // #587
3858NULL, // #588
3859NULL, // #589
3860NULL, // #590
3861NULL, // #591
3862NULL, // #592
3863NULL, // #593
3864NULL, // #594
3865NULL, // #595
3866NULL, // #596
3867NULL, // #597
3868NULL, // #598
3869NULL, // #599
3870NULL, // #600
3871NULL, // #601
3872NULL, // #602
3873NULL, // #603
3874NULL, // #604
3875VM_callfunction, // #605
3876VM_writetofile, // #606
3877VM_isfunction, // #607
3878NULL, // #608
3879NULL, // #609
3880NULL, // #610
3881NULL, // #611
3882NULL, // #612
3883VM_parseentitydata, // #613
3884NULL, // #614
3885NULL, // #615
3886NULL, // #616
3887NULL, // #617
3888NULL, // #618
3889NULL, // #619
3890NULL, // #620
3891NULL, // #621
3892NULL, // #622
3893NULL, // #623
3894VM_SV_getextresponse, // #624 string getextresponse(void)
3895NULL, // #625
3896NULL, // #626
3897VM_sprintf, // #627 string sprintf(string format, ...)
3898VM_getsurfacenumtriangles, // #628 float(entity e, float s) getsurfacenumpoints (DP_QC_GETSURFACETRIANGLE)
3899VM_getsurfacetriangle, // #629 vector(entity e, float s, float n) getsurfacepoint (DP_QC_GETSURFACETRIANGLE)
3900NULL, // #630
3901NULL, // #631
3902NULL, // #632
3903NULL, // #633
3904NULL, // #634
3905NULL, // #635
3906NULL, // #636
3907NULL, // #637
3908NULL, // #638
3909VM_digest_hex, // #639
3910NULL, // #640
3911NULL, // #641
3912VM_coverage, // #642
3913NULL, // #643
3914};
void VM_strunzone(prvm_prog_t *prog)
Definition prvm_cmds.c:2642
void VM_vectorvectors(prvm_prog_t *prog)
Definition prvm_cmds.c:3582
void VM_substring(prvm_prog_t *prog)
Definition prvm_cmds.c:2397
void VM_entityfieldname(prvm_prog_t *prog)
Definition prvm_cmds.c:2129
void VM_buf_writefile(prvm_prog_t *prog)
Definition prvm_cmds.c:4401
void VM_getsoundtime(prvm_prog_t *prog)
Definition prvm_cmds.c:2994
void VM_objerror(prvm_prog_t *prog)
Definition prvm_cmds.c:403
void VM_fabs(prvm_prog_t *prog)
Definition prvm_cmds.c:899
void VM_isserver(prvm_prog_t *prog)
Definition prvm_cmds.c:2864
void VM_nudgeoutofsolid(prvm_prog_t *prog)
Definition prvm_cmds.c:5644
void VM_dprint(prvm_prog_t *prog)
Definition prvm_cmds.c:854
void VM_uri_get(prvm_prog_t *prog)
Definition prvm_cmds.c:5427
void VM_chr2str(prvm_prog_t *prog)
Definition prvm_cmds.c:4918
void VM_digest_hex(prvm_prog_t *prog)
Definition prvm_cmds.c:5175
void VM_soundlength(prvm_prog_t *prog)
Definition prvm_cmds.c:3023
void VM_strncmp(prvm_prog_t *prog)
Definition prvm_cmds.c:5127
void VM_strtolower(prvm_prog_t *prog)
Definition prvm_cmds.c:2329
void VM_fgets(prvm_prog_t *prog)
Definition prvm_cmds.c:1996
void VM_physics_addtorque(prvm_prog_t *prog)
Definition prvm_cmds.c:6613
void VM_search_getsize(prvm_prog_t *prog)
Definition prvm_cmds.c:3238
void VM_tan(prvm_prog_t *prog)
Definition prvm_cmds.c:1704
void VM_modulo(prvm_prog_t *prog)
Definition prvm_cmds.c:3116
void VM_sqrt(prvm_prog_t *prog)
Definition prvm_cmds.c:1643
void VM_stov(prvm_prog_t *prog)
Definition prvm_cmds.c:2603
void VM_random(prvm_prog_t *prog)
Definition prvm_cmds.c:611
void VM_eprint(prvm_prog_t *prog)
Definition prvm_cmds.c:1494
void VM_bitshift(prvm_prog_t *prog)
Definition prvm_cmds.c:3594
void VM_buf_getsize(prvm_prog_t *prog)
Definition prvm_cmds.c:4016
void VM_getsurfacetexture(prvm_prog_t *prog)
Definition prvm_cmds.c:6416
void VM_search_end(prvm_prog_t *prog)
Definition prvm_cmds.c:3207
void VM_getentityfieldstring(prvm_prog_t *prog)
Definition prvm_cmds.c:2177
void VM_bufstr_get(prvm_prog_t *prog)
Definition prvm_cmds.c:4172
void VM_cvar_type(prvm_prog_t *prog)
Definition prvm_cmds.c:722
void VM_makevectors(prvm_prog_t *prog)
Definition prvm_cmds.c:3563
void VM_vlen(prvm_prog_t *prog)
Definition prvm_cmds.c:544
void VM_physics_addforce(prvm_prog_t *prog)
Definition prvm_cmds.c:6584
void VM_search_getfilename(prvm_prog_t *prog)
Definition prvm_cmds.c:3266
void VM_coverage(prvm_prog_t *prog)
Definition prvm_cmds.c:6641
void VM_break(prvm_prog_t *prog)
Definition prvm_cmds.c:661
void VM_strlennocol(prvm_prog_t *prog)
Definition prvm_cmds.c:2305
void VM_tokenize(prvm_prog_t *prog)
Definition prvm_cmds.c:2663
void VM_numentityfields(prvm_prog_t *prog)
Definition prvm_cmds.c:2115
void VM_vtos(prvm_prog_t *prog)
Definition prvm_cmds.c:917
void VM_getsurfacenumpoints(prvm_prog_t *prog)
Definition prvm_cmds.c:6282
void VM_argv_start_index(prvm_prog_t *prog)
Definition prvm_cmds.c:2822
void VM_getsurfacepointattribute(prvm_prog_t *prog)
Definition prvm_cmds.c:6326
void VM_registercvar(prvm_prog_t *prog)
Definition prvm_cmds.c:1736
void VM_uri_unescape(prvm_prog_t *prog)
Definition prvm_cmds.c:5317
void VM_infoget(prvm_prog_t *prog)
Definition prvm_cmds.c:5110
void VM_randomvec(prvm_prog_t *prog)
Definition prvm_cmds.c:1719
void VM_matchpattern(prvm_prog_t *prog)
Definition prvm_cmds.c:4619
void VM_atan2(prvm_prog_t *prog)
Definition prvm_cmds.c:1692
void VM_etos(prvm_prog_t *prog)
Definition prvm_cmds.c:936
void VM_cvar_defstring(prvm_prog_t *prog)
Definition prvm_cmds.c:786
void VM_asin(prvm_prog_t *prog)
Definition prvm_cmds.c:1656
void VM_vectoyaw(prvm_prog_t *prog)
Definition prvm_cmds.c:557
void VM_strlen(prvm_prog_t *prog)
Definition prvm_cmds.c:2265
void VM_strconv(prvm_prog_t *prog)
Definition prvm_cmds.c:5022
void VM_rint(prvm_prog_t *prog)
Definition prvm_cmds.c:1508
void VM_bound(prvm_prog_t *prog)
Definition prvm_cmds.c:1829
void VM_argv_end_index(prvm_prog_t *prog)
Definition prvm_cmds.c:2840
void VM_buf_implode(prvm_prog_t *prog)
Definition prvm_cmds.c:4128
void VM_precache_file(prvm_prog_t *prog)
Definition prvm_cmds.c:1407
void VM_spawn(prvm_prog_t *prog)
Definition prvm_cmds.c:1063
void VM_tokenize_console(prvm_prog_t *prog)
Definition prvm_cmds.c:2694
void VM_sprintf(prvm_prog_t *prog)
Definition prvm_cmds.c:5772
void VM_buf_cvarlist(prvm_prog_t *prog)
Definition prvm_cmds.c:4659
void VM_find(prvm_prog_t *prog)
Definition prvm_cmds.c:1110
void VM_stof(prvm_prog_t *prog)
Definition prvm_cmds.c:954
void VM_getsurfacetriangle(prvm_prog_t *prog)
Definition prvm_cmds.c:6512
void VM_fputs(prvm_prog_t *prog)
Definition prvm_cmds.c:2049
void VM_bufstr_add(prvm_prog_t *prog)
Definition prvm_cmds.c:4235
void VM_strdecolorize(prvm_prog_t *prog)
Definition prvm_cmds.c:2282
void VM_uri_escape(prvm_prog_t *prog)
Definition prvm_cmds.c:5284
void VM_findchainflags(prvm_prog_t *prog)
Definition prvm_cmds.c:1334
void VM_writetofile(prvm_prog_t *prog)
Definition prvm_cmds.c:2082
void VM_physics_enable(prvm_prog_t *prog)
Definition prvm_cmds.c:6557
void VM_putentityfieldstring(prvm_prog_t *prog)
Definition prvm_cmds.c:2229
void VM_etof(prvm_prog_t *prog)
Definition prvm_cmds.c:1001
void VM_nextent(prvm_prog_t *prog)
Definition prvm_cmds.c:1556
void VM_parseentitydata(prvm_prog_t *prog)
Definition prvm_cmds.c:3054
void VM_fclose(prvm_prog_t *prog)
Definition prvm_cmds.c:1963
void VM_ftoe(prvm_prog_t *prog)
Definition prvm_cmds.c:982
void VM_findfloat(prvm_prog_t *prog)
Definition prvm_cmds.c:1155
void VM_strcat(prvm_prog_t *prog)
Definition prvm_cmds.c:2377
void VM_atan(prvm_prog_t *prog)
Definition prvm_cmds.c:1680
void VM_ceil(prvm_prog_t *prog)
Definition prvm_cmds.c:1541
void VM_buf_del(prvm_prog_t *prog)
Definition prvm_cmds.c:3995
void VM_strpad(prvm_prog_t *prog)
Definition prvm_cmds.c:5070
void VM_strtoupper(prvm_prog_t *prog)
Definition prvm_cmds.c:2352
void VM_normalize(prvm_prog_t *prog)
Definition prvm_cmds.c:515
void VM_changeyaw(prvm_prog_t *prog)
Definition prvm_cmds.c:4747
void VM_tokenizebyseparator(prvm_prog_t *prog)
Definition prvm_cmds.c:2738
void VM_strftime(prvm_prog_t *prog)
Definition prvm_cmds.c:1014
void VM_floor(prvm_prog_t *prog)
Definition prvm_cmds.c:1527
void VM_cos(prvm_prog_t *prog)
Definition prvm_cmds.c:1630
void VM_whichpack(prvm_prog_t *prog)
Definition prvm_cmds.c:5364
void VM_buf_sort(prvm_prog_t *prog)
Definition prvm_cmds.c:4093
void VM_bufstr_find(prvm_prog_t *prog)
Definition prvm_cmds.c:4564
void VM_strzone(prvm_prog_t *prog)
Definition prvm_cmds.c:2621
void VM_cvar_set(prvm_prog_t *prog)
Definition prvm_cmds.c:823
void VM_isfunction(prvm_prog_t *prog)
Definition prvm_cmds.c:5745
void VM_bprint(prvm_prog_t *prog)
Definition prvm_cmds.c:442
void VM_argv(prvm_prog_t *prog)
Definition prvm_cmds.c:2804
void VM_strreplace(prvm_prog_t *prog)
Definition prvm_cmds.c:2469
void VM_min(prvm_prog_t *prog)
Definition prvm_cmds.c:1777
void VM_changepitch(prvm_prog_t *prog)
Definition prvm_cmds.c:4805
void VM_checkextension(prvm_prog_t *prog)
Definition prvm_cmds.c:363
void VM_ftos(prvm_prog_t *prog)
Definition prvm_cmds.c:874
void VM_bufstr_set(prvm_prog_t *prog)
Definition prvm_cmds.c:4202
void VM_findflags(prvm_prog_t *prog)
Definition prvm_cmds.c:1294
void VM_getsurfacenumtriangles(prvm_prog_t *prog)
Definition prvm_cmds.c:6497
void VM_acos(prvm_prog_t *prog)
Definition prvm_cmds.c:1668
void VM_loadfromfile(prvm_prog_t *prog)
Definition prvm_cmds.c:3082
void VM_gettime(prvm_prog_t *prog)
Definition prvm_cmds.c:2948
void VM_findchainfloat(prvm_prog_t *prog)
Definition prvm_cmds.c:1248
void VM_findchain(prvm_prog_t *prog)
Definition prvm_cmds.c:1193
void VM_getsurfaceclippedpoint(prvm_prog_t *prog)
Definition prvm_cmds.c:6478
void VM_traceon(prvm_prog_t *prog)
Definition prvm_cmds.c:1466
void VM_strstrofs(prvm_prog_t *prog)
Definition prvm_cmds.c:4872
void VM_fopen(prvm_prog_t *prog)
Definition prvm_cmds.c:1899
void VM_max(prvm_prog_t *prog)
Definition prvm_cmds.c:1803
void VM_bufstr_free(prvm_prog_t *prog)
Definition prvm_cmds.c:4282
void VM_getsurfacepoint(prvm_prog_t *prog)
Definition prvm_cmds.c:6298
void VM_getsurfacenearpoint(prvm_prog_t *prog)
Definition prvm_cmds.c:6428
void VM_buf_copy(prvm_prog_t *prog)
Definition prvm_cmds.c:4039
void VM_cvar_description(prvm_prog_t *prog)
Definition prvm_cmds.c:805
void VM_search_begin(prvm_prog_t *prog)
Definition prvm_cmds.c:3161
void VM_crc16(prvm_prog_t *prog)
Definition prvm_cmds.c:5162
void VM_remove(prvm_prog_t *prog)
Definition prvm_cmds.c:1080
void VM_error(prvm_prog_t *prog)
Definition prvm_cmds.c:380
void VM_buf_create(prvm_prog_t *prog)
Definition prvm_cmds.c:3964
void VM_str2chr(prvm_prog_t *prog)
Definition prvm_cmds.c:4896
void VM_print(prvm_prog_t *prog)
Definition prvm_cmds.c:425
void VM_cvar(prvm_prog_t *prog)
Definition prvm_cmds.c:700
void VM_cvar_string(prvm_prog_t *prog)
Definition prvm_cmds.c:762
void VM_changelevel(prvm_prog_t *prog)
Definition prvm_cmds.c:1592
void VM_SV_getextresponse(prvm_prog_t *prog)
Definition prvm_cmds.c:5627
void VM_traceoff(prvm_prog_t *prog)
Definition prvm_cmds.c:1480
void VM_callfunction(prvm_prog_t *prog)
Definition prvm_cmds.c:5705
void VM_infoadd(prvm_prog_t *prog)
Definition prvm_cmds.c:5090
void VM_wasfreed(prvm_prog_t *prog)
Definition prvm_cmds.c:5222
void VM_buf_loadfile(prvm_prog_t *prog)
Definition prvm_cmds.c:4318
void VM_localcmd(prvm_prog_t *prog)
Definition prvm_cmds.c:678
void VM_sin(prvm_prog_t *prog)
Definition prvm_cmds.c:1618
void VM_getsurfacenormal(prvm_prog_t *prog)
Definition prvm_cmds.c:6397
void VM_pow(prvm_prog_t *prog)
Definition prvm_cmds.c:1844
void VM_log(prvm_prog_t *prog)
Definition prvm_cmds.c:1850
void VM_coredump(prvm_prog_t *prog)
Definition prvm_cmds.c:1421
void VM_strireplace(prvm_prog_t *prog)
Definition prvm_cmds.c:2536
void VM_strncasecmp(prvm_prog_t *prog)
Definition prvm_cmds.c:5145
void VM_loadfromdata(prvm_prog_t *prog)
Definition prvm_cmds.c:3040
void VM_vectoangles(prvm_prog_t *prog)
Definition prvm_cmds.c:586
void VM_entityfieldtype(prvm_prog_t *prog)
Definition prvm_cmds.c:2153
void VM_SV_MoveToGoal(prvm_prog_t *prog)
Definition sv_move.c:420
static void VM_SV_skel_get_boneabs(prvm_prog_t *prog)
Definition svvm_cmds.c:3100
static void VM_SV_skel_find_bone(prvm_prog_t *prog)
Definition svvm_cmds.c:3064
static void VM_SV_setpause(prvm_prog_t *prog)
Definition svvm_cmds.c:2941
static void VM_SV_skel_set_bone(prvm_prog_t *prog)
Definition svvm_cmds.c:3131
static void VM_SV_frameduration(prvm_prog_t *prog)
Definition svvm_cmds.c:3252
static void VM_SV_skel_mul_bones(prvm_prog_t *prog)
Definition svvm_cmds.c:3173
static void VM_SV_skel_get_numbones(prvm_prog_t *prog)
Definition svvm_cmds.c:3025
static void VM_SV_frameforname(prvm_prog_t *prog)
Definition svvm_cmds.c:3232
static void VM_SV_skel_copybones(prvm_prog_t *prog)
Definition svvm_cmds.c:3200
static void VM_SV_skel_mul_bone(prvm_prog_t *prog)
Definition svvm_cmds.c:3151
static void VM_SV_skel_get_boneparent(prvm_prog_t *prog)
Definition svvm_cmds.c:3050
static void VM_SV_skel_get_bonerel(prvm_prog_t *prog)
Definition svvm_cmds.c:3076
static void VM_SV_skel_get_bonename(prvm_prog_t *prog)
Definition svvm_cmds.c:3036
static void VM_SV_skel_create(prvm_prog_t *prog)
Definition svvm_cmds.c:2959
static void VM_SV_skel_build(prvm_prog_t *prog)
Definition svvm_cmds.c:2983
static void VM_SV_skel_delete(prvm_prog_t *prog)
Definition svvm_cmds.c:3221
static void VM_SV_registercommand(prvm_prog_t *prog)
Definition svvm_cmds.c:2934

Referenced by SV_VM_Setup().

◆ vm_sv_extensions

const char* vm_sv_extensions[]

client also uses this

Definition at line 11 of file svvm_cmds.c.

11 {
12"BX_WAL_SUPPORT",
13"DP_BUTTONCHAT",
14"DP_BUTTONUSE",
15"DP_CL_LOADSKY",
16"DP_CON_ALIASPARAMETERS",
17"DP_CON_BESTWEAPON",
18"DP_CON_EXPANDCVAR",
19"DP_CON_SET",
20"DP_CON_SETA",
21"DP_CON_STARTMAP",
22"DP_COVERAGE",
23"DP_CRYPTO",
24"DP_CSQC_BINDMAPS",
25"DP_CSQC_ENTITYWORLDOBJECT",
26"DP_CSQC_ENTITYMODELLIGHT",
27"DP_CSQC_ENTITYTRANSPARENTSORTING_OFFSET",
28"DP_CSQC_MAINVIEW",
29"DP_CSQC_MINFPS_QUALITY",
30"DP_CSQC_MULTIFRAME_INTERPOLATION",
31"DP_CSQC_BOXPARTICLES",
32"DP_CSQC_SPAWNPARTICLE",
33"DP_CSQC_QUERYRENDERENTITY",
34"DP_CSQC_ROTATEMOVES",
35"DP_CSQC_SETPAUSE",
36"DP_CSQC_V_CALCREFDEF_WIP1",
37"DP_CSQC_V_CALCREFDEF_WIP2",
38"DP_EF_ADDITIVE",
39"DP_EF_BLUE",
40"DP_EF_DOUBLESIDED",
41"DP_EF_DYNAMICMODELLIGHT",
42"DP_EF_FLAME",
43"DP_EF_FULLBRIGHT",
44"DP_EF_NODEPTHTEST",
45"DP_EF_NODRAW",
46"DP_EF_NOGUNBOB",
47"DP_EF_NOSELFSHADOW",
48"DP_EF_NOSHADOW",
49"DP_EF_RED",
50"DP_EF_RESTARTANIM_BIT",
51"DP_EF_STARDUST",
52"DP_EF_TELEPORT_BIT",
53"DP_ENT_ALPHA",
54"DP_ENT_COLORMOD",
55"DP_ENT_CUSTOMCOLORMAP",
56"DP_ENT_EXTERIORMODELTOCLIENT",
57"DP_ENT_GLOW",
58"DP_ENT_GLOWMOD",
59"DP_ENT_LOWPRECISION",
60"DP_ENT_SCALE",
61"DP_ENT_TRAILEFFECTNUM",
62"DP_ENT_VIEWMODEL",
63"DP_GFX_EXTERNALTEXTURES",
64"DP_GFX_EXTERNALTEXTURES_PERMAP",
65"DP_GFX_FOG",
66"DP_GFX_MODEL_INTERPOLATION",
67"DP_GFX_QUAKE3MODELTAGS",
68"DP_GFX_SKINFILES",
69"DP_GFX_SKYBOX",
70"DP_GFX_FONTS",
71"DP_GFX_FONTS_FREETYPE",
72"DP_UTF8",
73"DP_FONT_VARIABLEWIDTH",
74"DP_HALFLIFE_MAP",
75"DP_HALFLIFE_MAP_CVAR",
76"DP_HALFLIFE_SPRITE",
77"DP_INPUTBUTTONS",
78"DP_LIGHTSTYLE_STATICVALUE",
79"DP_LITSPRITES",
80"DP_LITSUPPORT",
81"DP_MONSTERWALK",
82"DP_MOVETYPEBOUNCEMISSILE",
83"DP_MOVETYPEFLYWORLDONLY",
84"DP_MOVETYPEFOLLOW",
85"DP_NULL_MODEL",
86"DP_QC_ASINACOSATANATAN2TAN",
87"DP_QC_AUTOCVARS",
88"DP_QC_CHANGEPITCH",
89"DP_QC_CMD",
90"DP_QC_COPYENTITY",
91"DP_QC_CRC16",
92"DP_QC_CVAR_DEFSTRING",
93"DP_QC_CVAR_DESCRIPTION",
94"DP_QC_CVAR_STRING",
95"DP_QC_CVAR_TYPE",
96"DP_QC_DIGEST",
97"DP_QC_DIGEST_SHA256",
98"DP_QC_EDICT_NUM",
99"DP_QC_ENTITYDATA",
100"DP_QC_ENTITYSTRING",
101"DP_QC_ETOS",
102"DP_QC_EXTRESPONSEPACKET",
103"DP_QC_FINDBOX",
104"DP_QC_FINDCHAIN",
105"DP_QC_FINDCHAINFLAGS",
106"DP_QC_FINDCHAINFLOAT",
107"DP_QC_FINDCHAIN_TOFIELD",
108"DP_QC_FINDFLAGS",
109"DP_QC_FINDFLOAT",
110"DP_QC_FS_SEARCH",
111"DP_QC_FS_SEARCH_PACKFILE",
112"DP_QC_GETLIGHT",
113"DP_QC_GETSURFACE",
114"DP_QC_GETSURFACETRIANGLE",
115"DP_QC_GETSURFACEPOINTATTRIBUTE",
116"DP_QC_GETTAGINFO",
117"DP_QC_GETTAGINFO_BONEPROPERTIES",
118"DP_QC_GETTIME",
119"DP_QC_GETTIME_CDTRACK",
120"DP_QC_I18N",
121"DP_QC_LOG",
122"DP_QC_MINMAXBOUND",
123"DP_QC_MULTIPLETEMPSTRINGS",
124"DP_QC_NUDGEOUTOFSOLID",
125"DP_QC_NUM_FOR_EDICT",
126"DP_QC_RANDOMVEC",
127"DP_QC_SINCOSSQRTPOW",
128"DP_QC_SPRINTF",
129"DP_QC_STRFTIME",
130"DP_QC_STRINGBUFFERS",
131"DP_QC_STRINGBUFFERS_CVARLIST",
132"DP_QC_STRINGBUFFERS_EXT_WIP",
133"DP_QC_STRINGCOLORFUNCTIONS",
134"DP_QC_STRING_CASE_FUNCTIONS",
135"DP_QC_STRREPLACE",
136"DP_QC_TOKENIZEBYSEPARATOR",
137"DP_QC_TOKENIZE_CONSOLE",
138"DP_QC_TRACEBOX",
139"DP_QC_TRACETOSS",
140"DP_QC_TRACE_MOVETYPE_HITMODEL",
141"DP_QC_TRACE_MOVETYPE_WORLDONLY",
142"DP_QC_UNLIMITEDTEMPSTRINGS",
143"DP_QC_URI_ESCAPE",
144"DP_QC_URI_GET",
145"DP_QC_URI_POST",
146"DP_QC_VECTOANGLES_WITH_ROLL",
147"DP_QC_VECTORVECTORS",
148"DP_QC_WHICHPACK",
149"DP_QUAKE2_MODEL",
150"DP_QUAKE2_SPRITE",
151"DP_QUAKE3_MAP",
152"DP_QUAKE3_MODEL",
153"DP_REGISTERCVAR",
154"DP_SKELETONOBJECTS",
155"DP_SND_DIRECTIONLESSATTNNONE",
156"DP_SND_FAKETRACKS",
157"DP_SND_SOUND7_WIP1",
158"DP_SND_SOUND7_WIP2",
159"DP_SND_OGGVORBIS",
160"DP_SND_SETPARAMS",
161"DP_SND_STEREOWAV",
162"DP_SND_GETSOUNDTIME",
163"DP_VIDEO_DPV",
164"DP_VIDEO_SUBTITLES",
165"DP_SOLIDCORPSE",
166"DP_SPRITE32",
167"DP_SV_BOTCLIENT",
168"DP_SV_BOUNCEFACTOR",
169"DP_SV_CLIENTCAMERA",
170"DP_SV_CLIENTCOLORS",
171"DP_SV_CLIENTNAME",
172"DP_SV_CMD",
173"DP_SV_CUSTOMIZEENTITYFORCLIENT",
174"DP_SV_DISABLECLIENTPREDICTION",
175"DP_SV_DISCARDABLEDEMO",
176"DP_SV_DRAWONLYTOCLIENT",
177"DP_SV_DROPCLIENT",
178"DP_SV_EFFECT",
179"DP_SV_ENTITYCONTENTSTRANSITION",
180"DP_SV_MODELFLAGS_AS_EFFECTS",
181"DP_SV_MOVETYPESTEP_LANDEVENT",
182"DP_SV_NETADDRESS",
183"DP_SV_NODRAWTOCLIENT",
184"DP_SV_ONENTITYNOSPAWNFUNCTION",
185"DP_SV_ONENTITYPREPOSTSPAWNFUNCTION",
186"DP_SV_PING",
187"DP_SV_PING_PACKETLOSS",
188"DP_SV_PLAYERPHYSICS",
189"DP_PHYSICS_ODE",
190"DP_SV_POINTPARTICLES",
191"DP_SV_POINTSOUND",
192"DP_SV_PRECACHEANYTIME",
193"DP_SV_PRINT",
194"DP_SV_PUNCHVECTOR",
195"DP_SV_QCSTATUS",
196"DP_SV_ROTATINGBMODEL",
197"DP_SV_SETCOLOR",
198"DP_SV_SHUTDOWN",
199"DP_SV_SLOWMO",
200"DP_SV_SPAWNFUNC_PREFIX",
201"DP_SV_WRITEPICTURE",
202"DP_SV_WRITEUNTERMINATEDSTRING",
203"DP_TE_BLOOD",
204"DP_TE_BLOODSHOWER",
205"DP_TE_CUSTOMFLASH",
206"DP_TE_EXPLOSIONRGB",
207"DP_TE_FLAMEJET",
208"DP_TE_PARTICLECUBE",
209"DP_TE_PARTICLERAIN",
210"DP_TE_PARTICLESNOW",
211"DP_TE_PLASMABURN",
212"DP_TE_QUADEFFECTS1",
213"DP_TE_SMALLFLASH",
214"DP_TE_SPARK",
215"DP_TE_STANDARDEFFECTBUILTINS",
216"DP_TRACE_HITCONTENTSMASK_SURFACEINFO"
217"DP_USERMOVETYPES",
218"DP_VIEWZOOM",
219"EXT_BITSHIFT",
220"FRIK_FILE",
221"FTE_CSQC_SKELETONOBJECTS",
222"FTE_QC_CHECKPVS",
223"FTE_STRINGS",
224"KRIMZON_SV_PARSECLIENTCOMMAND",
225"NEH_CMD_PLAY2",
226"NEH_RESTOREGAME",
227"NEXUIZ_PLAYERMODEL",
228"NXQ_GFX_LETTERBOX",
229"PRYDON_CLIENTCURSOR",
230"TENEBRAE_GFX_DLIGHTS",
231"TW_SV_STEPCONTROL",
232"ZQ_PAUSE",
233"DP_RM_CLIPGROUP",
234NULL
235//"EXT_CSQC" // not ready yet
236};

Referenced by CL_VM_Init(), PRVM_Init(), and SV_VM_Setup().

◆ vm_sv_numbuiltins

const int vm_sv_numbuiltins = sizeof(vm_sv_builtins) / sizeof(prvm_builtin_t)

Definition at line 3916 of file svvm_cmds.c.

Referenced by SV_VM_Setup().