X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=clvm_cmds.c;h=290cabca3e201213ce07a6768361941c735626c2;hb=8730ad8413fe46de8bdd61e4d0fb9b91abfa5563;hp=c0cad22641676d07702b8cce2b5f62825e75265f;hpb=45a00f30d21c9f3d3833c6110c034b4fd7106d83;p=xonotic%2Fdarkplaces.git diff --git a/clvm_cmds.c b/clvm_cmds.c index c0cad226..290cabca 100644 --- a/clvm_cmds.c +++ b/clvm_cmds.c @@ -171,7 +171,7 @@ static void VM_CL_sound (prvm_prog_t *prog) const char *sample; int channel; prvm_edict_t *entity; - float volume; + float fvolume; float attenuation; float pitchchange; float startposition; @@ -183,10 +183,10 @@ static void VM_CL_sound (prvm_prog_t *prog) entity = PRVM_G_EDICT(OFS_PARM0); channel = (int)PRVM_G_FLOAT(OFS_PARM1); sample = PRVM_G_STRING(OFS_PARM2); - volume = PRVM_G_FLOAT(OFS_PARM3); + fvolume = PRVM_G_FLOAT(OFS_PARM3); attenuation = PRVM_G_FLOAT(OFS_PARM4); - if (volume < 0 || volume > 1) + if (fvolume < 0 || fvolume > 1) { VM_Warning(prog, "VM_CL_sound: volume must be in range 0-1\n"); return; @@ -229,14 +229,14 @@ static void VM_CL_sound (prvm_prog_t *prog) } CL_VM_GetEntitySoundOrigin(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), org); - S_StartSound_StartPosition_Flags(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), channel, S_FindName(sample), org, volume, attenuation, startposition, flags, pitchchange > 0.0f ? pitchchange * 0.01f : 1.0f); + S_StartSound_StartPosition_Flags(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), channel, S_FindName(sample), org, fvolume, attenuation, startposition, flags, pitchchange > 0.0f ? pitchchange * 0.01f : 1.0f); } // #483 void(vector origin, string sample, float volume, float attenuation) pointsound static void VM_CL_pointsound(prvm_prog_t *prog) { const char *sample; - float volume; + float fvolume; float attenuation; vec3_t org; @@ -244,10 +244,10 @@ static void VM_CL_pointsound(prvm_prog_t *prog) VectorCopy( PRVM_G_VECTOR(OFS_PARM0), org); sample = PRVM_G_STRING(OFS_PARM1); - volume = PRVM_G_FLOAT(OFS_PARM2); + fvolume = PRVM_G_FLOAT(OFS_PARM2); attenuation = PRVM_G_FLOAT(OFS_PARM3); - if (volume < 0 || volume > 1) + if (fvolume < 0 || fvolume > 1) { VM_Warning(prog, "VM_CL_pointsound: volume must be in range 0-1\n"); return; @@ -260,7 +260,7 @@ static void VM_CL_pointsound(prvm_prog_t *prog) } // Send World Entity as Entity to Play Sound (for CSQC, that is MAX_EDICTS) - S_StartSound(MAX_EDICTS, 0, S_FindName(sample), org, volume, attenuation); + S_StartSound(MAX_EDICTS, 0, S_FindName(sample), org, fvolume, attenuation); } // #14 entity() spawn @@ -302,7 +302,7 @@ static void VM_CL_traceline (prvm_prog_t *prog) if (VEC_IS_NAN(v1[0]) || VEC_IS_NAN(v1[1]) || VEC_IS_NAN(v1[2]) || VEC_IS_NAN(v2[0]) || VEC_IS_NAN(v2[1]) || VEC_IS_NAN(v2[2])) 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)); - trace = CL_TraceLine(v1, v2, move, ent, CL_GenericHitSuperContentsMask(ent), CL_HitNetworkBrushModels(move), CL_HitNetworkPlayers(move), &svent, true, false); + trace = CL_TraceLine(v1, v2, move, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendtracelinelength.value, CL_HitNetworkBrushModels(move), CL_HitNetworkPlayers(move), &svent, true, false); CL_VM_SetTraceGlobals(prog, &trace, svent); // R_TimeReport("traceline"); @@ -342,7 +342,7 @@ static void VM_CL_tracebox (prvm_prog_t *prog) if (VEC_IS_NAN(v1[0]) || VEC_IS_NAN(v1[1]) || VEC_IS_NAN(v1[2]) || VEC_IS_NAN(v2[0]) || VEC_IS_NAN(v2[1]) || VEC_IS_NAN(v2[2])) 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)); - trace = CL_TraceBox(v1, m1, m2, v2, move, ent, CL_GenericHitSuperContentsMask(ent), CL_HitNetworkBrushModels(move), CL_HitNetworkPlayers(move), &svent, true); + trace = CL_TraceBox(v1, m1, m2, v2, move, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendtraceboxlength.value, CL_HitNetworkBrushModels(move), CL_HitNetworkPlayers(move), &svent, true); CL_VM_SetTraceGlobals(prog, &trace, svent); // R_TimeReport("tracebox"); @@ -378,7 +378,7 @@ static trace_t CL_Trace_Toss (prvm_prog_t *prog, prvm_edict_t *tossent, prvm_edi VectorCopy(PRVM_clientedictvector(tossent, origin), start); VectorCopy(PRVM_clientedictvector(tossent, mins), mins); VectorCopy(PRVM_clientedictvector(tossent, maxs), maxs); - trace = CL_TraceBox(start, mins, maxs, end, MOVE_NORMAL, tossent, CL_GenericHitSuperContentsMask(tossent), true, true, NULL, true); + trace = CL_TraceBox(start, mins, maxs, end, MOVE_NORMAL, tossent, CL_GenericHitSuperContentsMask(tossent), 0, collision_extendmovelength.value, true, true, NULL, true); VectorCopy (trace.endpos, PRVM_clientedictvector(tossent, origin)); if (trace.fraction < 1) @@ -552,7 +552,7 @@ static void VM_CL_droptofloor (prvm_prog_t *prog) VectorCopy(PRVM_clientedictvector(ent, origin), end); end[2] -= 256; - trace = CL_TraceBox(start, mins, maxs, end, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), true, true, NULL, true); + trace = CL_TraceBox(start, mins, maxs, end, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendmovelength.value, true, true, NULL, true); if (trace.fraction != 1) { @@ -630,7 +630,7 @@ realcheck: start[0] = stop[0] = (mins[0] + maxs[0])*0.5; start[1] = stop[1] = (mins[1] + maxs[1])*0.5; stop[2] = start[2] - 2*sv_stepheight.value; - trace = CL_TraceLine(start, stop, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), true, true, NULL, true, false); + trace = CL_TraceLine(start, stop, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendmovelength.value, true, true, NULL, true, false); if (trace.fraction == 1.0) return; @@ -644,7 +644,7 @@ realcheck: start[0] = stop[0] = x ? maxs[0] : mins[0]; start[1] = stop[1] = y ? maxs[1] : mins[1]; - trace = CL_TraceLine(start, stop, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), true, true, NULL, true, false); + trace = CL_TraceLine(start, stop, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendmovelength.value, true, true, NULL, true, false); if (trace.fraction != 1.0 && trace.endpos[2] > bottom) bottom = trace.endpos[2]; @@ -719,11 +719,14 @@ static void VM_CL_getlight (prvm_prog_t *prog) //============================================================================ //[515]: SCENE MANAGER builtins +extern cvar_t v_yshearing; void CSQC_R_RecalcView (void) { extern matrix4x4_t viewmodelmatrix_nobob; extern matrix4x4_t viewmodelmatrix_withbob; Matrix4x4_CreateFromQuakeEntity(&r_refdef.view.matrix, cl.csqc_vieworigin[0], cl.csqc_vieworigin[1], cl.csqc_vieworigin[2], cl.csqc_viewangles[0], cl.csqc_viewangles[1], cl.csqc_viewangles[2], 1); + if (v_yshearing.value > 0) + Matrix4x4_QuakeToDuke3D(&r_refdef.view.matrix, &r_refdef.view.matrix, v_yshearing.value); Matrix4x4_Copy(&viewmodelmatrix_nobob, &r_refdef.view.matrix); Matrix4x4_ConcatScale(&viewmodelmatrix_nobob, cl_viewmodel_scale.value); Matrix4x4_Concat(&viewmodelmatrix_withbob, &r_refdef.view.matrix, &cl.csqc_viewmodelmatrixfromengine); @@ -1177,7 +1180,7 @@ static void VM_CL_project (prvm_prog_t *prog) VM_SAFEPARMCOUNT(1, VM_CL_project); VectorCopy(PRVM_G_VECTOR(OFS_PARM0), f); - Matrix4x4_Invert_Simple(&m, &r_refdef.view.matrix); + Matrix4x4_Invert_Full(&m, &r_refdef.view.matrix); Matrix4x4_Transform(&m, f, v); if(v_flipped.integer) v[1] = -v[1]; @@ -1337,7 +1340,7 @@ static void VM_CL_trailparticles (prvm_prog_t *prog) if (i < 0) return; - CL_ParticleEffect(i, 1, start, end, velocity, velocity, NULL, prog->argc >= 5 ? (int)PRVM_G_FLOAT(OFS_PARM4) : 0); + CL_ParticleTrail(i, 1, start, end, velocity, velocity, NULL, prog->argc >= 5 ? (int)PRVM_G_FLOAT(OFS_PARM4) : 0, true, true, NULL, NULL, 1); } //#337 void(float effectnum, vector origin, vector dir, float count[, float color]) pointparticles (EXT_CSQC) @@ -1446,9 +1449,9 @@ static void VM_CL_getmousepos(prvm_prog_t *prog) //#345 float(float framenum) getinputstate (EXT_CSQC) static void VM_CL_getinputstate (prvm_prog_t *prog) { - int i, frame; + unsigned int i, frame; VM_SAFEPARMCOUNT(1, VM_CL_getinputstate); - frame = (int)PRVM_G_FLOAT(OFS_PARM0); + frame = (unsigned int)PRVM_G_FLOAT(OFS_PARM0); PRVM_G_FLOAT(OFS_RETURN) = false; for (i = 0;i < CL_MAX_USERCMDS;i++) { @@ -1604,20 +1607,6 @@ static void VM_CL_getplayerkey (prvm_prog_t *prog) else if(!strcasecmp(c, "viewentity")) dpsnprintf(t, sizeof(t), "%i", i+1); - else - if(gamemode == GAME_XONOTIC && !strcasecmp(c, "TEMPHACK_origin")) - { - // PLEASE REMOVE THIS once deltalisten() of EXT_CSQC_1 - // is implemented, or Xonotic uses CSQC-networked - // players, whichever comes first - entity_t *e = cl.entities + (i+1); - if(e->state_current.active) - { - vec3_t origin; - Matrix4x4_OriginFromMatrix(&e->render.matrix, origin); - dpsnprintf(t, sizeof(t), VECTOR_LOSSLESS_FORMAT, origin[0], origin[1], origin[2]); - } - } if(!t[0]) return; PRVM_G_INT(OFS_RETURN) = PRVM_SetTempString(prog, t); @@ -3392,7 +3381,6 @@ static void VMPolygons_Store(vmpolygons_t *polys) else { // queue the polygon as 3D for sorted transparent rendering later - int i; if (polys->max_triangles < polys->num_triangles + polys->begin_vertices-2) { while (polys->max_triangles < polys->num_triangles + polys->begin_vertices-2) @@ -3574,7 +3562,7 @@ void Debug_PolygonVertex(float x, float y, float z, float s, float t, float r, f return; } - if(debugPolys.begin_vertices > VMPOLYGONS_MAXPOINTS) + if(debugPolys.begin_vertices >= VMPOLYGONS_MAXPOINTS) { Con_Printf("Debug_PolygonVertex: may have %i vertices max\n", VMPOLYGONS_MAXPOINTS); return; @@ -3651,7 +3639,7 @@ realcheck: start[0] = stop[0] = (mins[0] + maxs[0])*0.5; start[1] = stop[1] = (mins[1] + maxs[1])*0.5; stop[2] = start[2] - 2*sv_stepheight.value; - trace = CL_TraceLine(start, stop, MOVE_NOMONSTERS, ent, CL_GenericHitSuperContentsMask(ent), true, false, NULL, true, false); + trace = CL_TraceLine(start, stop, MOVE_NOMONSTERS, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendmovelength.value, true, false, NULL, true, false); if (trace.fraction == 1.0) return false; @@ -3664,7 +3652,7 @@ realcheck: start[0] = stop[0] = x ? maxs[0] : mins[0]; start[1] = stop[1] = y ? maxs[1] : mins[1]; - trace = CL_TraceLine(start, stop, MOVE_NOMONSTERS, ent, CL_GenericHitSuperContentsMask(ent), true, false, NULL, true, false); + trace = CL_TraceLine(start, stop, MOVE_NOMONSTERS, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendmovelength.value, true, false, NULL, true, false); if (trace.fraction != 1.0 && trace.endpos[2] > bottom) bottom = trace.endpos[2]; @@ -3717,7 +3705,7 @@ static qboolean CL_movestep (prvm_edict_t *ent, vec3_t move, qboolean relink, qb neworg[2] += 8; } VectorCopy(PRVM_clientedictvector(ent, origin), start); - trace = CL_TraceBox(start, mins, maxs, neworg, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), true, true, &svent, true); + trace = CL_TraceBox(start, mins, maxs, neworg, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendmovelength.value, true, true, &svent, true); if (settrace) CL_VM_SetTraceGlobals(prog, &trace, svent); @@ -3745,14 +3733,14 @@ static qboolean CL_movestep (prvm_edict_t *ent, vec3_t move, qboolean relink, qb VectorCopy (neworg, end); end[2] -= sv_stepheight.value*2; - trace = CL_TraceBox(neworg, mins, maxs, end, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), true, true, &svent, true); + trace = CL_TraceBox(neworg, mins, maxs, end, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendmovelength.value, true, true, &svent, true); if (settrace) CL_VM_SetTraceGlobals(prog, &trace, svent); if (trace.startsolid) { neworg[2] -= sv_stepheight.value; - trace = CL_TraceBox(neworg, mins, maxs, end, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), true, true, &svent, true); + trace = CL_TraceBox(neworg, mins, maxs, end, MOVE_NORMAL, ent, CL_GenericHitSuperContentsMask(ent), 0, collision_extendmovelength.value, true, true, &svent, true); if (settrace) CL_VM_SetTraceGlobals(prog, &trace, svent); if (trace.startsolid) @@ -4994,6 +4982,8 @@ VM_CL_RotateMoves, // #638 VM_digest_hex, // #639 VM_CL_V_CalcRefdef, // #640 void(entity e) V_CalcRefdef (DP_CSQC_V_CALCREFDEF) NULL, // #641 +VM_coverage, // #642 +NULL }; const int vm_cl_numbuiltins = sizeof(vm_cl_builtins) / sizeof(prvm_builtin_t);