]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - clvm_cmds.c
menuqc += +VM_getkeybind, // #342 string(float keynum) getkeybind (EXT_CSQC)
[xonotic/darkplaces.git] / clvm_cmds.c
index 06d1d648df927f6ba0c8dbeef63c3ef87db1e208..befe553b1f79eee4694784ddee99decabc54f0b0 100644 (file)
@@ -29,7 +29,6 @@ void Sbar_SortFrags (void);
 void CL_FindNonSolidLocation(const vec3_t in, vec3_t out, vec_t radius);
 void CSQC_RelinkAllEntities (int drawmask);
 void CSQC_RelinkCSQCEntities (void);
-const char *Key_GetBind (int key);
 
 // #1 void(vector ang) makevectors
 static void VM_CL_makevectors (void)
@@ -724,7 +723,7 @@ void VM_CL_R_ClearScene (void)
        r_refdef.view.isoverlay = false;
        // FIXME: restore cl.csqc_origin
        // FIXME: restore cl.csqc_angles
-       cl.csqc_vidvars.drawworld = true;
+       cl.csqc_vidvars.drawworld = r_drawworld.integer;
        cl.csqc_vidvars.drawenginesbar = false;
        cl.csqc_vidvars.drawcrosshair = false;
 }
@@ -774,18 +773,115 @@ void VM_CL_R_AddEntity (void)
 }
 
 //#303 float(float property, ...) setproperty (EXT_CSQC)
+//#303 float(float property) getproperty
+//#303 vector(float property) getpropertyvec
+// VorteX: make this function be able to return previously set property if new value is not given
 void VM_CL_R_SetView (void)
 {
        int             c;
        float   *f;
        float   k;
 
-       VM_SAFEPARMCOUNTRANGE(2, 3, VM_CL_R_SetView);
+       VM_SAFEPARMCOUNTRANGE(1, 3, VM_CL_R_SetView);
 
        c = (int)PRVM_G_FLOAT(OFS_PARM0);
+
+       // return value?
+       if (prog->argc < 2)
+       {
+               switch(c)
+               {
+               case VF_MIN:
+                       VectorSet(PRVM_G_VECTOR(OFS_RETURN), r_refdef.view.x, r_refdef.view.y, 0);
+                       break;
+               case VF_MIN_X:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.x;
+                       break;
+               case VF_MIN_Y:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.y;
+                       break;
+               case VF_SIZE:
+                       VectorSet(PRVM_G_VECTOR(OFS_RETURN), r_refdef.view.width, r_refdef.view.height, 0);
+                       break;
+               case VF_SIZE_X:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.width;
+                       break;
+               case VF_SIZE_Y:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.height;
+                       break;
+               case VF_VIEWPORT:
+                       VM_Warning("VM_CL_R_GetView : VF_VIEWPORT can't be retrieved, use VF_MIN/VF_SIZE instead\n");
+                       break;
+               case VF_FOV:
+                       VectorSet(PRVM_G_VECTOR(OFS_RETURN), r_refdef.view.ortho_x, r_refdef.view.ortho_y, 0);
+                       break;
+               case VF_FOVX:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.ortho_x;
+                       break;
+               case VF_FOVY:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.ortho_y;
+                       break;
+               case VF_ORIGIN:
+                       VectorCopy(cl.csqc_origin, PRVM_G_VECTOR(OFS_RETURN));
+                       break;
+               case VF_ORIGIN_X:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_origin[0];
+                       break;
+               case VF_ORIGIN_Y:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_origin[1];
+                       break;
+               case VF_ORIGIN_Z:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_origin[2];
+                       break;
+               case VF_ANGLES:
+                       VectorCopy(cl.csqc_angles, PRVM_G_VECTOR(OFS_RETURN));
+                       break;
+               case VF_ANGLES_X:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_angles[0];
+                       break;
+               case VF_ANGLES_Y:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_angles[1];
+                       break;
+               case VF_ANGLES_Z:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_angles[2];
+                       break;
+               case VF_DRAWWORLD:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_vidvars.drawworld;
+                       break;
+               case VF_DRAWENGINESBAR:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_vidvars.drawenginesbar;
+                       break;
+               case VF_DRAWCROSSHAIR:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.csqc_vidvars.drawcrosshair;
+                       break;
+               case VF_CL_VIEWANGLES:
+                       VectorCopy(cl.viewangles, PRVM_G_VECTOR(OFS_RETURN));;
+                       break;
+               case VF_CL_VIEWANGLES_X:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.viewangles[0];
+                       break;
+               case VF_CL_VIEWANGLES_Y:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.viewangles[1];
+                       break;
+               case VF_CL_VIEWANGLES_Z:
+                       PRVM_G_FLOAT(OFS_RETURN) = cl.viewangles[2];
+                       break;
+               case VF_PERSPECTIVE:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.useperspective;
+                       break;
+               case VF_CLEARSCREEN:
+                       PRVM_G_FLOAT(OFS_RETURN) = r_refdef.view.isoverlay;
+                       break;
+               default:
+                       PRVM_G_FLOAT(OFS_RETURN) = 0;
+                       VM_Warning("VM_CL_R_GetView : unknown parm %i\n", c);
+                       return;
+               }
+               return;
+       }
+
        f = PRVM_G_VECTOR(OFS_PARM1);
        k = PRVM_G_FLOAT(OFS_PARM1);
-
        switch(c)
        {
        case VF_MIN:
@@ -858,7 +954,7 @@ void VM_CL_R_SetView (void)
                CSQC_R_RecalcView();
                break;
        case VF_DRAWWORLD:
-               cl.csqc_vidvars.drawworld = k != 0;
+               cl.csqc_vidvars.drawworld = ((k != 0) && r_drawworld.integer);
                break;
        case VF_DRAWENGINESBAR:
                cl.csqc_vidvars.drawenginesbar = k != 0;
@@ -1129,24 +1225,69 @@ static void VM_CL_trailparticles (void)
 
        if (i < 0)
                return;
-       CL_ParticleEffect(i, VectorDistance(start, end), start, end, t->fields.client->velocity, t->fields.client->velocity, NULL, prog->argc >= 5 ? (int)PRVM_G_FLOAT(OFS_PARM4) : 0);
+       CL_ParticleEffect(i, 1, start, end, t->fields.client->velocity, t->fields.client->velocity, NULL, prog->argc >= 5 ? (int)PRVM_G_FLOAT(OFS_PARM4) : 0);
 }
 
 //#337 void(float effectnum, vector origin, vector dir, float count[, float color]) pointparticles (EXT_CSQC)
 static void VM_CL_pointparticles (void)
 {
-       int                     i, n;
+       int                     i;
+       float n;
        float           *f, *v;
        VM_SAFEPARMCOUNTRANGE(4, 5, VM_CL_pointparticles);
        i = (int)PRVM_G_FLOAT(OFS_PARM0);
        f = PRVM_G_VECTOR(OFS_PARM1);
        v = PRVM_G_VECTOR(OFS_PARM2);
-       n = (int)PRVM_G_FLOAT(OFS_PARM3);
+       n = PRVM_G_FLOAT(OFS_PARM3);
        if (i < 0)
                return;
        CL_ParticleEffect(i, n, f, f, v, v, NULL, prog->argc >= 5 ? (int)PRVM_G_FLOAT(OFS_PARM4) : 0);
 }
 
+//#502 void(float effectnum, entity own, vector origin_from, vector origin_to, vector dir_from, vector dir_to, float count, float extflags) boxparticles (DP_CSQC_BOXPARTICLES)
+static void VM_CL_boxparticles (void)
+{
+       int effectnum;
+       prvm_edict_t *own;
+       float *origin_from, *origin_to, *dir_from, *dir_to;
+       float count;
+       int flags;
+       float tintmins[4], tintmaxs[4];
+       prvm_eval_t *val;
+       VM_SAFEPARMCOUNTRANGE(7, 8, VM_CL_boxparticles);
+
+       effectnum = (int)PRVM_G_FLOAT(OFS_PARM0);
+       own = PRVM_G_EDICT(OFS_PARM1); // TODO find use for this
+       origin_from = PRVM_G_VECTOR(OFS_PARM2);
+       origin_to = PRVM_G_VECTOR(OFS_PARM3);
+       dir_from = PRVM_G_VECTOR(OFS_PARM4);
+       dir_to = PRVM_G_VECTOR(OFS_PARM5);
+       count = PRVM_G_FLOAT(OFS_PARM6);
+       if(prog->argc >= 8)
+               flags = PRVM_G_FLOAT(OFS_PARM7);
+       else
+               flags = 0;
+       Vector4Set(tintmins, 1, 1, 1, 1);
+       Vector4Set(tintmaxs, 1, 1, 1, 1);
+       if(flags & 1) // read alpha
+       {
+               if((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.particles_alphamin)))
+                       tintmins[3] = val->_float;
+               if((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.particles_alphamax)))
+                       tintmaxs[3] = val->_float;
+       }
+       if(flags & 2) // read color
+       {
+               if((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.particles_colormin)))
+                       VectorCopy(val->vector, tintmins);
+               if((val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.particles_colormax)))
+                       VectorCopy(val->vector, tintmaxs);
+       }
+       if (effectnum < 0)
+               return;
+       CL_ParticleTrail(effectnum, count, origin_from, origin_to, dir_from, dir_to, NULL, 0, true, true, tintmins, tintmaxs);
+}
+
 //#531 void(float pause) setpause
 static void VM_CL_setpause(void) 
 {
@@ -1157,13 +1298,6 @@ static void VM_CL_setpause(void)
                cl.csqc_paused = false;
 }
 
-//#342 string(float keynum) getkeybind (EXT_CSQC)
-static void VM_CL_getkeybind (void)
-{
-       VM_SAFEPARMCOUNT(1, VM_CL_getkeybind);
-       PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(Key_GetBind((int)PRVM_G_FLOAT(OFS_PARM0)));
-}
-
 //#343 void(float usecursor) setcursormode (EXT_CSQC)
 static void VM_CL_setcursormode (void)
 {
@@ -1406,7 +1540,7 @@ static void VM_CL_ReadPicture (void)
                        // use the attached jpeg as texture
                        buf = (unsigned char *) Mem_Alloc(tempmempool, size);
                        MSG_ReadBytes(size, buf);
-                       data = JPEG_LoadImage_BGRA(buf, size);
+                       data = JPEG_LoadImage_BGRA(buf, size, NULL);
                        Mem_Free(buf);
                        Draw_NewPic(name, image_width, image_height, false, data);
                        Mem_Free(data);
@@ -2651,7 +2785,7 @@ void VM_CL_SpawnParticle (void)
        
        if (prog->argc < 3) // global-set particle
        {
-               part = CL_NewParticle(org, (unsigned short)*vmpartspawner.particle_type, ((int)(vmpartspawner.particle_color1[0]) << 16) + ((int)(vmpartspawner.particle_color1[1]) << 8) + ((int)(vmpartspawner.particle_color1[2])), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, *vmpartspawner.particle_alpha*256, *vmpartspawner.particle_alphafade*256, *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, (int)(vmpartspawner.particle_staincolor1[0])*65536 + (int)(vmpartspawner.particle_staincolor1[1])*256 + (int)(vmpartspawner.particle_staincolor1[2]), (int)(vmpartspawner.particle_staincolor2[0])*65536 + (int)(vmpartspawner.particle_staincolor2[1])*256 + (int)(vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex, *vmpartspawner.particle_stainalpha*256, *vmpartspawner.particle_stainsize, *vmpartspawner.particle_angle, *vmpartspawner.particle_spin);
+               part = CL_NewParticle(org, (unsigned short)*vmpartspawner.particle_type, ((int)(vmpartspawner.particle_color1[0]) << 16) + ((int)(vmpartspawner.particle_color1[1]) << 8) + ((int)(vmpartspawner.particle_color1[2])), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, *vmpartspawner.particle_alpha*256, *vmpartspawner.particle_alphafade*256, *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, (int)(vmpartspawner.particle_staincolor1[0])*65536 + (int)(vmpartspawner.particle_staincolor1[1])*256 + (int)(vmpartspawner.particle_staincolor1[2]), (int)(vmpartspawner.particle_staincolor2[0])*65536 + (int)(vmpartspawner.particle_staincolor2[1])*256 + (int)(vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex, *vmpartspawner.particle_stainalpha*256, *vmpartspawner.particle_stainsize, *vmpartspawner.particle_angle, *vmpartspawner.particle_spin, NULL);
                if (!part)
                {
                        PRVM_G_FLOAT(OFS_RETURN) = 0; 
@@ -2672,7 +2806,7 @@ void VM_CL_SpawnParticle (void)
                        return;
                }
                theme = &vmpartspawner.themes[themenum];
-               part = CL_NewParticle(org, theme->typeindex, theme->color1, theme->color2, theme->tex, theme->size, theme->sizeincrease, theme->alpha, theme->alphafade, theme->gravity, theme->bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], theme->airfriction, theme->liquidfriction, theme->originjitter, theme->velocityjitter, theme->qualityreduction, theme->lifetime, theme->stretch, theme->blendmode, theme->orientation, theme->staincolor1, theme->staincolor2, theme->staintex, theme->stainalpha, theme->stainsize, theme->angle, theme->spin);
+               part = CL_NewParticle(org, theme->typeindex, theme->color1, theme->color2, theme->tex, theme->size, theme->sizeincrease, theme->alpha, theme->alphafade, theme->gravity, theme->bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], theme->airfriction, theme->liquidfriction, theme->originjitter, theme->velocityjitter, theme->qualityreduction, theme->lifetime, theme->stretch, theme->blendmode, theme->orientation, theme->staincolor1, theme->staincolor2, theme->staintex, theme->stainalpha, theme->stainsize, theme->angle, theme->spin, NULL);
                if (!part)
                {
                        PRVM_G_FLOAT(OFS_RETURN) = 0; 
@@ -2705,7 +2839,7 @@ void VM_CL_SpawnParticleDelayed (void)
        org = PRVM_G_VECTOR(OFS_PARM0);
        dir = PRVM_G_VECTOR(OFS_PARM1);
        if (prog->argc < 5) // global-set particle
-               part = CL_NewParticle(org, (unsigned short)*vmpartspawner.particle_type, ((int)vmpartspawner.particle_color1[0] << 16) + ((int)vmpartspawner.particle_color1[1] << 8) + ((int)vmpartspawner.particle_color1[2]), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, *vmpartspawner.particle_alpha*256, *vmpartspawner.particle_alphafade*256, *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, ((int)vmpartspawner.particle_staincolor1[0] << 16) + ((int)vmpartspawner.particle_staincolor1[1] << 8) + ((int)vmpartspawner.particle_staincolor1[2]), ((int)vmpartspawner.particle_staincolor2[0] << 16) + ((int)vmpartspawner.particle_staincolor2[1] << 8) + ((int)vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex, *vmpartspawner.particle_stainalpha*256, *vmpartspawner.particle_stainsize, *vmpartspawner.particle_angle, *vmpartspawner.particle_spin);
+               part = CL_NewParticle(org, (unsigned short)*vmpartspawner.particle_type, ((int)vmpartspawner.particle_color1[0] << 16) + ((int)vmpartspawner.particle_color1[1] << 8) + ((int)vmpartspawner.particle_color1[2]), ((int)vmpartspawner.particle_color2[0] << 16) + ((int)vmpartspawner.particle_color2[1] << 8) + ((int)vmpartspawner.particle_color2[2]), (int)*vmpartspawner.particle_tex, *vmpartspawner.particle_size, *vmpartspawner.particle_sizeincrease, *vmpartspawner.particle_alpha*256, *vmpartspawner.particle_alphafade*256, *vmpartspawner.particle_gravity, *vmpartspawner.particle_bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], *vmpartspawner.particle_airfriction, *vmpartspawner.particle_liquidfriction, *vmpartspawner.particle_originjitter, *vmpartspawner.particle_velocityjitter, (*vmpartspawner.particle_qualityreduction) ? true : false, *vmpartspawner.particle_time, *vmpartspawner.particle_stretch, (pblend_t)*vmpartspawner.particle_blendmode, (porientation_t)*vmpartspawner.particle_orientation, ((int)vmpartspawner.particle_staincolor1[0] << 16) + ((int)vmpartspawner.particle_staincolor1[1] << 8) + ((int)vmpartspawner.particle_staincolor1[2]), ((int)vmpartspawner.particle_staincolor2[0] << 16) + ((int)vmpartspawner.particle_staincolor2[1] << 8) + ((int)vmpartspawner.particle_staincolor2[2]), (int)*vmpartspawner.particle_staintex, *vmpartspawner.particle_stainalpha*256, *vmpartspawner.particle_stainsize, *vmpartspawner.particle_angle, *vmpartspawner.particle_spin, NULL);
        else // themed particle
        {
                themenum = (int)PRVM_G_FLOAT(OFS_PARM4);
@@ -2716,7 +2850,7 @@ void VM_CL_SpawnParticleDelayed (void)
                        return;
                }
                theme = &vmpartspawner.themes[themenum];
-               part = CL_NewParticle(org, theme->typeindex, theme->color1, theme->color2, theme->tex, theme->size, theme->sizeincrease, theme->alpha, theme->alphafade, theme->gravity, theme->bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], theme->airfriction, theme->liquidfriction, theme->originjitter, theme->velocityjitter, theme->qualityreduction, theme->lifetime, theme->stretch, theme->blendmode, theme->orientation, theme->staincolor1, theme->staincolor2, theme->staintex, theme->stainalpha, theme->stainsize, theme->angle, theme->spin);
+               part = CL_NewParticle(org, theme->typeindex, theme->color1, theme->color2, theme->tex, theme->size, theme->sizeincrease, theme->alpha, theme->alphafade, theme->gravity, theme->bounce, org[0], org[1], org[2], dir[0], dir[1], dir[2], theme->airfriction, theme->liquidfriction, theme->originjitter, theme->velocityjitter, theme->qualityreduction, theme->lifetime, theme->stretch, theme->blendmode, theme->orientation, theme->staincolor1, theme->staincolor2, theme->staintex, theme->stainalpha, theme->stainsize, theme->angle, theme->spin, NULL);
        }
        if (!part) 
        { 
@@ -3644,7 +3778,7 @@ static void VM_CL_skel_find_bone(void)
        PRVM_G_FLOAT(OFS_RETURN) = 0;
        if (skeletonindex < 0 || skeletonindex >= MAX_EDICTS || !(skeleton = prog->skeletons[skeletonindex]))
                return;
-       PRVM_G_FLOAT(OFS_RETURN) = Mod_Alias_GetTagIndexForName(skeleton->model, 0, tagname) + 1;
+       PRVM_G_FLOAT(OFS_RETURN) = Mod_Alias_GetTagIndexForName(skeleton->model, 0, tagname);
 }
 
 // #269 vector(float skel, float bonenum) skel_get_bonerel = #269; // (FTE_CSQC_SKELETONOBJECTS) get matrix of bone in skeleton relative to its parent - sets v_forward, v_right, v_up, returns origin (relative to parent bone)
@@ -4191,7 +4325,7 @@ VM_centerprint,                                   // #338 void(string s, ...) centerprint (EXT_CSQC)
 VM_print,                                              // #339 void(string s, ...) print (EXT_CSQC, DP_SV_PRINT)
 VM_keynumtostring,                             // #340 string(float keynum) keynumtostring (EXT_CSQC)
 VM_stringtokeynum,                             // #341 float(string keyname) stringtokeynum (EXT_CSQC)
-VM_CL_getkeybind,                              // #342 string(float keynum) getkeybind (EXT_CSQC)
+VM_getkeybind,                                 // #342 string(float keynum) getkeybind (EXT_CSQC)
 VM_CL_setcursormode,                   // #343 void(float usecursor) setcursormode (EXT_CSQC)
 VM_CL_getmousepos,                             // #344 vector() getmousepos (EXT_CSQC)
 VM_CL_getinputstate,                   // #345 float(float framenum) getinputstate (EXT_CSQC)
@@ -4205,8 +4339,8 @@ VM_CL_registercmd,                                // #352 void(string cmdname) registercommand (EXT_CSQC)
 VM_wasfreed,                                   // #353 float(entity ent) wasfreed (EXT_CSQC) (should be availabe on server too)
 VM_CL_serverkey,                               // #354 string(string key) serverkey (EXT_CSQC)
 VM_CL_videoplaying,                            // #355
-NULL,                                                  // #356
-NULL,                                                  // #357
+VM_findfont,                                   // #356 float(string fontname) loadfont (DP_GFX_FONTS)
+VM_loadfont,                                   // #357 float(string fontname, string fontmaps, string sizes, float slot) loadfont (DP_GFX_FONTS)
 NULL,                                                  // #358
 NULL,                                                  // #359
 VM_CL_ReadByte,                                        // #360 float() readbyte (EXT_CSQC)
@@ -4352,7 +4486,7 @@ VM_entityfieldtype,                               // #498 float(float fieldnum) entityfieldtype = #498; (DP
 VM_getentityfieldstring,               // #499 string(float fieldnum, entity ent) getentityfieldstring = #499; (DP_QC_ENTITYDATA)
 VM_putentityfieldstring,               // #500 float(float fieldnum, entity ent, string s) putentityfieldstring = #500; (DP_QC_ENTITYDATA)
 VM_CL_ReadPicture,                             // #501 string() ReadPicture = #501;
-NULL,                                                  // #502
+VM_CL_boxparticles,                            // #502 void(float effectnum, entity own, vector origin_from, vector origin_to, vector dir_from, vector dir_to, float count) boxparticles (DP_CSQC_BOXPARTICLES)
 VM_whichpack,                                  // #503 string(string) whichpack = #503;
 VM_CL_GetEntity,                               // #504 float(float entitynum, float fldnum) getentity = #504; vector(float entitynum, float fldnum) getentityvec = #504;
 NULL,                                                  // #505