]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - clvm_cmds.c
host: Introduce host.h and use it, instead of quakedef.h
[xonotic/darkplaces.git] / clvm_cmds.c
index d2836b3740c87a3643f3f91450a0c9fd0743dfa4..8432a0a01763bb40e78bbd1d82ee1d98f9950d4a 100644 (file)
@@ -219,8 +219,6 @@ static void VM_CL_sound (prvm_prog_t *prog)
        else
                startposition = 0;
 
-       channel = CHAN_USER2ENGINE(channel);
-
        if (!IS_CHAN(channel))
        {
                VM_Warning(prog, "VM_CL_sound: channel must be in range 0-127\n");
@@ -685,8 +683,8 @@ static void VM_CL_ambientsound (prvm_prog_t *prog)
        vec3_t f;
        sfx_t   *s;
        VM_SAFEPARMCOUNT(4, VM_CL_ambientsound);
-       s = S_FindName(PRVM_G_STRING(OFS_PARM0));
-       VectorCopy(PRVM_G_VECTOR(OFS_PARM1), f);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM0), f);
+       s = S_FindName(PRVM_G_STRING(OFS_PARM1));
        S_StaticSound (s, f, PRVM_G_FLOAT(OFS_PARM2), PRVM_G_FLOAT(OFS_PARM3)*64);
 }
 
@@ -1105,7 +1103,7 @@ static void VM_CL_R_AddDynamicLight (prvm_prog_t *prog)
        int pflags = PFLAGS_CORONA | PFLAGS_FULLDYNAMIC;
        float coronaintensity = 1;
        float coronasizescale = 0.25;
-       qboolean castshadow = true;
+       qbool castshadow = true;
        float ambientscale = 0;
        float diffusescale = 1;
        float specularscale = 1;
@@ -1364,7 +1362,7 @@ static void VM_CL_boxparticles (prvm_prog_t *prog)
        vec3_t origin_from, origin_to, dir_from, dir_to;
        float count;
        int flags;
-       qboolean istrail;
+       qbool istrail;
        float tintmins[4], tintmaxs[4], fade;
        VM_SAFEPARMCOUNTRANGE(7, 8, VM_CL_boxparticles);
 
@@ -1416,10 +1414,13 @@ static void VM_CL_boxparticles (prvm_prog_t *prog)
 static void VM_CL_setpause(prvm_prog_t *prog)
 {
        VM_SAFEPARMCOUNT(1, VM_CL_setpause);
-       if ((int)PRVM_G_FLOAT(OFS_PARM0) != 0)
-               cl.csqc_paused = true;
-       else
-               cl.csqc_paused = false;
+       if(cl.islocalgame)
+       {
+               if ((int)PRVM_G_FLOAT(OFS_PARM0) != 0)
+                       host.paused = true;
+               else
+                       host.paused = false;
+       }
 }
 
 //#343 void(float usecursor) setcursormode (DP_CSQC)
@@ -1627,7 +1628,7 @@ static void VM_CL_registercmd (prvm_prog_t *prog)
 {
        VM_SAFEPARMCOUNT(1, VM_CL_registercmd);
        if(!Cmd_Exists(&cmd_client, PRVM_G_STRING(OFS_PARM0)))
-               Cmd_AddCommand(&cmd_client, PRVM_G_STRING(OFS_PARM0), NULL, "console command created by QuakeC");
+               Cmd_AddCommand(CF_CLIENT, PRVM_G_STRING(OFS_PARM0), NULL, "console command created by QuakeC");
 }
 
 //#360 float() readbyte (EXT_CSQC)
@@ -1860,6 +1861,9 @@ static void VM_CL_copyentity (prvm_prog_t *prog)
                return;
        }
        memcpy(out->fields.fp, in->fields.fp, prog->entityfields * sizeof(prvm_vec_t));
+
+       if (VectorCompare(PRVM_clientedictvector(out, absmin), PRVM_clientedictvector(out, absmax)))
+               return;
        CL_LinkEdict(out);
 }
 
@@ -1868,14 +1872,16 @@ static void VM_CL_copyentity (prvm_prog_t *prog)
 // #404 void(vector org, string modelname, float startframe, float endframe, float framerate) effect (DP_SV_EFFECT)
 static void VM_CL_effect (prvm_prog_t *prog)
 {
-#if 1
-       Con_Printf("WARNING: VM_CL_effect not implemented\n"); // FIXME: this needs to take modelname not modelindex, the csqc defs has it as string and so it shall be
-#else
+       dp_model_t *model;
        vec3_t org;
        VM_SAFEPARMCOUNT(5, VM_CL_effect);
        VectorCopy(PRVM_G_VECTOR(OFS_PARM0), org);
-       CL_Effect(org, (int)PRVM_G_FLOAT(OFS_PARM1), (int)PRVM_G_FLOAT(OFS_PARM2), (int)PRVM_G_FLOAT(OFS_PARM3), PRVM_G_FLOAT(OFS_PARM4));
-#endif
+
+       model = Mod_FindName(PRVM_G_STRING(OFS_PARM1), NULL);
+       if(model->loaded)
+               CL_Effect(org, model, (int)PRVM_G_FLOAT(OFS_PARM2), (int)PRVM_G_FLOAT(OFS_PARM3), PRVM_G_FLOAT(OFS_PARM4));
+       else
+               Con_Printf(CON_ERROR "VM_CL_effect: Could not load model '%s'\n", PRVM_G_STRING(OFS_PARM1));
 }
 
 // #405 void(vector org, vector velocity, float howmany) te_blood (DP_TE_BLOOD)
@@ -1922,7 +1928,7 @@ static void VM_CL_te_explosionrgb (prvm_prog_t *prog)
        CL_FindNonSolidLocation(pos, pos2, 10);
        CL_ParticleExplosion(pos2);
        Matrix4x4_CreateTranslate(&tempmatrix, pos2[0], pos2[1], pos2[2]);
-       CL_AllocLightFlash(NULL, &tempmatrix, 350, PRVM_G_VECTOR(OFS_PARM1)[0], PRVM_G_VECTOR(OFS_PARM1)[1], PRVM_G_VECTOR(OFS_PARM1)[2], 700, 0.5, 0, -1, true, 1, 0.25, 0.25, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+       CL_AllocLightFlash(NULL, &tempmatrix, 350, PRVM_G_VECTOR(OFS_PARM1)[0], PRVM_G_VECTOR(OFS_PARM1)[1], PRVM_G_VECTOR(OFS_PARM1)[2], 700, 0.5, NULL, -1, true, 1, 0.25, 0.25, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
 }
 
 // #408 void(vector mincorner, vector maxcorner, vector vel, float howmany, float color, float gravityflag, float randomveljitter) te_particlecube (DP_TE_PARTICLECUBE)
@@ -2067,7 +2073,7 @@ static void VM_CL_te_customflash (prvm_prog_t *prog)
        VectorCopy(PRVM_G_VECTOR(OFS_PARM0), pos);
        CL_FindNonSolidLocation(pos, pos2, 4);
        Matrix4x4_CreateTranslate(&tempmatrix, pos2[0], pos2[1], pos2[2]);
-       CL_AllocLightFlash(NULL, &tempmatrix, PRVM_G_FLOAT(OFS_PARM1), PRVM_G_VECTOR(OFS_PARM3)[0], PRVM_G_VECTOR(OFS_PARM3)[1], PRVM_G_VECTOR(OFS_PARM3)[2], PRVM_G_FLOAT(OFS_PARM1) / PRVM_G_FLOAT(OFS_PARM2), PRVM_G_FLOAT(OFS_PARM2), 0, -1, true, 1, 0.25, 1, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+       CL_AllocLightFlash(NULL, &tempmatrix, PRVM_G_FLOAT(OFS_PARM1), PRVM_G_VECTOR(OFS_PARM3)[0], PRVM_G_VECTOR(OFS_PARM3)[1], PRVM_G_VECTOR(OFS_PARM3)[2], PRVM_G_FLOAT(OFS_PARM1) / PRVM_G_FLOAT(OFS_PARM2), PRVM_G_FLOAT(OFS_PARM2), NULL, -1, true, 1, 0.25, 1, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
 }
 
 // #418 void(vector org) te_gunshot (DP_TE_STANDARDEFFECTBUILTINS)
@@ -2218,7 +2224,7 @@ static void VM_CL_te_explosion2 (prvm_prog_t *prog)
        color[1] = tempcolor[1] * (2.0f / 255.0f);
        color[2] = tempcolor[2] * (2.0f / 255.0f);
        Matrix4x4_CreateTranslate(&tempmatrix, pos2[0], pos2[1], pos2[2]);
-       CL_AllocLightFlash(NULL, &tempmatrix, 350, color[0], color[1], color[2], 700, 0.5, 0, -1, true, 1, 0.25, 0.25, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+       CL_AllocLightFlash(NULL, &tempmatrix, 350, color[0], color[1], color[2], 700, 0.5, NULL, -1, true, 1, 0.25, 0.25, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
        S_StartSound(-1, 0, cl.sfx_r_exp3, pos2, 1, 1);
 }
 
@@ -2380,7 +2386,7 @@ int CL_GetPitchSign(prvm_prog_t *prog, prvm_edict_t *ent)
        return 1;
 }
 
-void CL_GetEntityMatrix (prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qboolean viewmatrix)
+void CL_GetEntityMatrix (prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qbool viewmatrix)
 {
        float scale;
        float pitchsign = 1;
@@ -2627,7 +2633,7 @@ static void VM_CL_gettaginfo (prvm_prog_t *prog)
 typedef struct vmparticletheme_s
 {
        unsigned short typeindex;
-       qboolean initialized;
+       qbool initialized;
        pblend_t blendmode;
        porientation_t orientation;
        int color1;
@@ -2643,7 +2649,7 @@ typedef struct vmparticletheme_s
        float liquidfriction;
        float originjitter;
        float velocityjitter;
-       qboolean qualityreduction;
+       qbool qualityreduction;
        float lifetime;
        float stretch;
        int staincolor1;
@@ -2661,8 +2667,8 @@ typedef struct vmparticletheme_s
 typedef struct vmparticlespawner_s
 {
        mempool_t                       *pool;
-       qboolean                        initialized;
-       qboolean                        verified;
+       qbool                   initialized;
+       qbool                   verified;
        vmparticletheme_t       *themes;
        int                                     max_themes;
 }vmparticlespawner_t;
@@ -2921,7 +2927,7 @@ static void VM_CL_SpawnParticle (prvm_prog_t *prog)
        particle_t *part;
        int themenum;
 
-       VM_SAFEPARMCOUNTRANGE(2, 3, VM_CL_SpawnParticle2);
+       VM_SAFEPARMCOUNTRANGE(2, 3, VM_CL_SpawnParticle);
        if (vmpartspawner.verified == false)
        {
                VM_Warning(prog, "VM_CL_SpawnParticle: particle spawner not initialized\n");
@@ -3043,10 +3049,10 @@ static void VM_CL_SpawnParticleDelayed (prvm_prog_t *prog)
        particle_t *part;
        int themenum;
 
-       VM_SAFEPARMCOUNTRANGE(4, 5, VM_CL_SpawnParticle2);
+       VM_SAFEPARMCOUNTRANGE(4, 5, VM_CL_SpawnParticleDelayed);
        if (vmpartspawner.verified == false)
        {
-               VM_Warning(prog, "VM_CL_SpawnParticle: particle spawner not initialized\n");
+               VM_Warning(prog, "VM_CL_SpawnParticleDelayed: particle spawner not initialized\n");
                PRVM_G_FLOAT(OFS_RETURN) = 0; 
                return;
        }
@@ -3092,7 +3098,7 @@ static void VM_CL_SpawnParticleDelayed (prvm_prog_t *prog)
                themenum = (int)PRVM_G_FLOAT(OFS_PARM4);
                if (themenum <= 0 || themenum >= vmpartspawner.max_themes)
                {
-                       VM_Warning(prog, "VM_CL_SpawnParticle: bad theme number %i\n", themenum);
+                       VM_Warning(prog, "VM_CL_SpawnParticleDelayed: bad theme number %i\n", themenum);
                        PRVM_G_FLOAT(OFS_RETURN) = 0;  
                        return;
                }
@@ -3154,7 +3160,7 @@ static void VM_CL_GetEntity (prvm_prog_t *prog)
 {
        int entnum, fieldnum;
        vec3_t forward, left, up, org;
-       VM_SAFEPARMCOUNT(2, VM_CL_GetEntityVec);
+       VM_SAFEPARMCOUNT(2, VM_CL_GetEntity);
 
        entnum = PRVM_G_FLOAT(OFS_PARM0);
        if (entnum < 0 || entnum >= cl.num_entities)
@@ -3242,7 +3248,7 @@ static void VM_CL_GetEntity (prvm_prog_t *prog)
 // --blub
 static void VM_CL_R_RenderScene (prvm_prog_t *prog)
 {
-       qboolean ismain = r_refdef.view.ismain;
+       qbool ismain = r_refdef.view.ismain;
        double t = Sys_DirtyTime();
        VM_SAFEPARMCOUNT(0, VM_CL_R_RenderScene);
 
@@ -3285,7 +3291,7 @@ static void VM_CL_R_PolygonBegin (prvm_prog_t *prog)
 {
        const char *texname;
        int drawflags;
-       qboolean draw2d;
+       qbool draw2d;
        dp_model_t *mod;
 
        VM_SAFEPARMCOUNTRANGE(2, 3, VM_CL_R_PolygonBegin);
@@ -3355,8 +3361,8 @@ static void VM_CL_R_PolygonVertex (prvm_prog_t *prog)
 static void VM_CL_R_PolygonEnd (prvm_prog_t *prog)
 {
        int i;
-       qboolean hascolor;
-       qboolean hasalpha;
+       qbool hascolor;
+       qbool hasalpha;
        int e0 = 0, e1 = 0, e2 = 0;
        float *o;
        dp_model_t *mod = prog->polygonbegin_model;
@@ -3423,7 +3429,7 @@ is not a staircase.
 
 =============
 */
-static qboolean CL_CheckBottom (prvm_edict_t *ent)
+static qbool CL_CheckBottom (prvm_edict_t *ent)
 {
        prvm_prog_t *prog = CLVM_prog;
        vec3_t  mins, maxs, start, stop;
@@ -3492,7 +3498,7 @@ The move will be adjusted for slopes and stairs, but if the move isn't
 possible, no move is done and false is returned
 =============
 */
-static qboolean CL_movestep (prvm_edict_t *ent, vec3_t move, qboolean relink, qboolean noenemy, qboolean settrace)
+static qbool CL_movestep (prvm_edict_t *ent, vec3_t move, qbool relink, qbool noenemy, qbool settrace)
 {
        prvm_prog_t *prog = CLVM_prog;
        float           dz;
@@ -3622,7 +3628,7 @@ static void VM_CL_walkmove (prvm_prog_t *prog)
        vec3_t  move;
        mfunction_t     *oldf;
        int     oldself;
-       qboolean        settrace;
+       qbool   settrace;
 
        VM_SAFEPARMCOUNTRANGE(2, 3, VM_CL_walkmove);
 
@@ -3702,7 +3708,7 @@ static void VM_CL_checkpvs (prvm_prog_t *prog)
        unsigned char fatpvs[MAX_MAP_LEAFS/8];
 #endif
 
-       VM_SAFEPARMCOUNT(2, VM_SV_checkpvs);
+       VM_SAFEPARMCOUNT(2, VM_CL_checkpvs);
        VectorCopy(PRVM_G_VECTOR(OFS_PARM0), viewpos);
        viewee = PRVM_G_EDICT(OFS_PARM1);
 
@@ -4114,11 +4120,10 @@ static void VM_CL_V_CalcRefdef(prvm_prog_t *prog)
        matrix4x4_t entrendermatrix;
        vec3_t clviewangles;
        vec3_t clvelocity;
-       qboolean teleported;
-       qboolean clonground;
-       qboolean clcmdjump;
-       qboolean cldead;
-       qboolean clintermission;
+       qbool teleported;
+       qbool clonground;
+       qbool clcmdjump;
+       qbool cldead;
        float clstatsviewheight;
        prvm_edict_t *ent;
        int flags;
@@ -4136,10 +4141,10 @@ static void VM_CL_V_CalcRefdef(prvm_prog_t *prog)
        clcmdjump = (flags & REFDEFFLAG_JUMPING) != 0;
        clstatsviewheight = PRVM_clientedictvector(ent, view_ofs)[2];
        cldead = (flags & REFDEFFLAG_DEAD) != 0;
-       clintermission = (flags & REFDEFFLAG_INTERMISSION) != 0;
+       cl.intermission = (flags & REFDEFFLAG_INTERMISSION) != 0;
        VectorCopy(PRVM_clientedictvector(ent, velocity), clvelocity);
 
-       V_CalcRefdefUsing(&entrendermatrix, clviewangles, teleported, clonground, clcmdjump, clstatsviewheight, cldead, clintermission, clvelocity);
+       V_CalcRefdefUsing(&entrendermatrix, clviewangles, teleported, clonground, clcmdjump, clstatsviewheight, cldead, clvelocity);
 
        VectorCopy(cl.csqc_vieworiginfromengine, cl.csqc_vieworigin);
        VectorCopy(cl.csqc_viewanglesfromengine, cl.csqc_viewangles);
@@ -4164,7 +4169,7 @@ VM_CL_setsize,                                    // #4 void(entity e, vector min, vector max) setsize (QUAKE)
 NULL,                                                  // #5 void(entity e, vector min, vector max) setabssize (QUAKE)
 VM_break,                                              // #6 void() break (QUAKE)
 VM_random,                                             // #7 float() random (QUAKE)
-VM_CL_sound,                                   // #8 void(entity e, float chan, string samp) sound (QUAKE)
+VM_CL_sound,                                   // #8 void(entity e, float chan, string samp, float volume, float atten[, float pitchchange[, float flags]]) sound (QUAKE)
 VM_normalize,                                  // #9 vector(vector v) normalize (QUAKE)
 VM_error,                                              // #10 void(string e) error (QUAKE)
 VM_objerror,                                   // #11 void(string e) objerror (QUAKE)