X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=view.c;h=a7a5c385a1d8af5a29ebd34aebec9355385bd26e;hb=e0ed43d2d6fdae2375244257789852ecdf38893a;hp=97ba0154eeb04c9d45882769807347f11da56785;hpb=e4af24f74c017f75dccc8bc675a4184d801e5d8a;p=xonotic%2Fdarkplaces.git diff --git a/view.c b/view.c index 97ba0154..a7a5c385 100644 --- a/view.c +++ b/view.c @@ -22,6 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" #include "cl_collision.h" +void CL_VM_UpdateDmgGlobals (int dmg_take, int dmg_save, vec3_t dmg_origin); + /* The view is allowed to move slightly from it's true position for bobbing, @@ -34,16 +36,16 @@ when crossing a water boudnary. cvar_t cl_rollspeed = {0, "cl_rollspeed", "200", "how much strafing is necessary to tilt the view"}; cvar_t cl_rollangle = {0, "cl_rollangle", "2.0", "how much to tilt the view when strafing"}; -cvar_t cl_bob = {0, "cl_bob","0.02", "view bobbing amount"}; -cvar_t cl_bobcycle = {0, "cl_bobcycle","0.6", "view bobbing speed"}; -cvar_t cl_bobup = {0, "cl_bobup","0.5", "view bobbing adjustment that makes the up or down swing of the bob last longer"}; +cvar_t cl_bob = {CVAR_SAVE, "cl_bob","0.02", "view bobbing amount"}; +cvar_t cl_bobcycle = {CVAR_SAVE, "cl_bobcycle","0.6", "view bobbing speed"}; +cvar_t cl_bobup = {CVAR_SAVE, "cl_bobup","0.5", "view bobbing adjustment that makes the up or down swing of the bob last longer"}; cvar_t cl_bobmodel = {CVAR_SAVE, "cl_bobmodel", "1", "enables gun bobbing"}; -cvar_t cl_bobmodel_side = {0, "cl_bobmodel_side", "0.05", "gun bobbing sideways sway amount"}; -cvar_t cl_bobmodel_up = {0, "cl_bobmodel_up", "0.02", "gun bobbing upward movement amount"}; -cvar_t cl_bobmodel_speed = {0, "cl_bobmodel_speed", "7", "gun bobbing speed"}; +cvar_t cl_bobmodel_side = {CVAR_SAVE, "cl_bobmodel_side", "0.15", "gun bobbing sideways sway amount"}; +cvar_t cl_bobmodel_up = {CVAR_SAVE, "cl_bobmodel_up", "0.06", "gun bobbing upward movement amount"}; +cvar_t cl_bobmodel_speed = {CVAR_SAVE, "cl_bobmodel_speed", "7", "gun bobbing speed"}; -cvar_t cl_viewmodel_scale = {0, "cl_viewmodel_scale", "0.3", "changes size of gun model, lower values prevent poking into walls but cause strange artifacts on lighting and especially r_stereo/vid_stereobuffer options where the size of the gun becomes visible"}; +cvar_t cl_viewmodel_scale = {0, "cl_viewmodel_scale", "1", "changes size of gun model, lower values prevent poking into walls but cause strange artifacts on lighting and especially r_stereo/vid_stereobuffer options where the size of the gun becomes visible"}; cvar_t v_kicktime = {0, "v_kicktime", "0.5", "how long a view kick from damage lasts"}; cvar_t v_kickroll = {0, "v_kickroll", "0.6", "how much a view kick from damage rolls your view"}; @@ -68,6 +70,7 @@ cvar_t cl_stairsmoothspeed = {CVAR_SAVE, "cl_stairsmoothspeed", "160", "how fast cvar_t chase_back = {CVAR_SAVE, "chase_back", "48", "chase cam distance from the player"}; cvar_t chase_up = {CVAR_SAVE, "chase_up", "24", "chase cam distance from the player"}; cvar_t chase_active = {CVAR_SAVE, "chase_active", "0", "enables chase cam"}; +cvar_t chase_overhead = {CVAR_SAVE, "chase_overhead", "0", "chase cam looks straight down if this is not zero"}; // GAME_GOODVSBAD2 cvar_t chase_stevie = {0, "chase_stevie", "0", "chase cam view from above (used only by GoodVsBad2)"}; @@ -226,6 +229,9 @@ void V_ParseDamage (void) blood = MSG_ReadByte (); MSG_ReadVector(from, cls.protocol); + // Send the Dmg Globals to CSQC + CL_VM_UpdateDmgGlobals(blood, armor, from); + count = blood*0.5 + armor*0.5; if (count < 10) count = 10; @@ -319,6 +325,10 @@ V_CalcRefdef ================== */ +#if 0 +static vec3_t eyeboxmins = {-16, -16, -24}; +static vec3_t eyeboxmaxs = { 16, 16, 32}; +#endif void V_CalcRefdef (void) { entity_t *ent; @@ -378,31 +388,72 @@ void V_CalcRefdef (void) // observing entity from third person vec_t camback, camup, dist, forward[3], chase_dest[3]; - camback = bound(0, chase_back.value, 128); - if (chase_back.value != camback) - Cvar_SetValueQuick(&chase_back, camback); - camup = bound(-48, chase_up.value, 96); - if (chase_up.value != camup) - Cvar_SetValueQuick(&chase_up, camup); + camback = chase_back.value; + camup = chase_up.value; // this + 22 is to match view_ofs for compatibility with older versions camup += 22; - if (gamemode == GAME_GOODVSBAD2 && chase_stevie.integer) + AngleVectors(viewangles, forward, NULL, NULL); + + if (chase_overhead.integer) { - // look straight down from high above - viewangles[0] = 90; - camback = 2048; +#if 1 + vec3_t offset; + vec3_t bestvieworg; +#endif + vec3_t up; + viewangles[PITCH] = 0; + AngleVectors(viewangles, forward, NULL, up); + // trace a little further so it hits a surface more consistently (to avoid 'snapping' on the edge of the range) + chase_dest[0] = vieworg[0] - forward[0] * camback + up[0] * camup; + chase_dest[1] = vieworg[1] - forward[1] * camback + up[1] * camup; + chase_dest[2] = vieworg[2] - forward[2] * camback + up[2] * camup; +#if 0 + //trace = CL_Move(vieworg, eyeboxmins, eyeboxmaxs, chase_dest, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY | SUPERCONTENTS_SKY, true, false, NULL, false); + trace = CL_Move(vieworg, vec3_origin, vec3_origin, chase_dest, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY | SUPERCONTENTS_SKY, true, false, NULL, false); + VectorCopy(trace.endpos, vieworg); + vieworg[2] -= 8; +#else + trace = CL_Move(vieworg, vec3_origin, vec3_origin, chase_dest, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY | SUPERCONTENTS_SKY, true, false, NULL, false); + VectorCopy(trace.endpos, bestvieworg); + offset[2] = 0; + for (offset[0] = -16;offset[0] <= 16;offset[0] += 8) + { + for (offset[1] = -16;offset[1] <= 16;offset[1] += 8) + { + AngleVectors(viewangles, NULL, NULL, up); + chase_dest[0] = vieworg[0] - forward[0] * camback + up[0] * camup + offset[0]; + chase_dest[1] = vieworg[1] - forward[1] * camback + up[1] * camup + offset[1]; + chase_dest[2] = vieworg[2] - forward[2] * camback + up[2] * camup + offset[2]; + trace = CL_Move(vieworg, vec3_origin, vec3_origin, chase_dest, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY | SUPERCONTENTS_SKY, true, false, NULL, false); + if (bestvieworg[2] > trace.endpos[2]) + bestvieworg[2] = trace.endpos[2]; + } + } + bestvieworg[2] -= 8; + VectorCopy(bestvieworg, vieworg); +#endif + viewangles[PITCH] = 90; } - AngleVectors(viewangles, forward, NULL, NULL); + else + { + if (gamemode == GAME_GOODVSBAD2 && chase_stevie.integer) + { + // look straight down from high above + viewangles[PITCH] = 90; + camback = 2048; + VectorSet(forward, 0, 0, -1); + } - // trace a little further so it hits a surface more consistently (to avoid 'snapping' on the edge of the range) - dist = -camback - 8; - chase_dest[0] = vieworg[0] + forward[0] * dist; - chase_dest[1] = vieworg[1] + forward[1] * dist; - chase_dest[2] = vieworg[2] + forward[2] * dist + camup; - trace = CL_Move(vieworg, vec3_origin, vec3_origin, chase_dest, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY | SUPERCONTENTS_SKY, true, false, NULL, false); - VectorMAMAM(1, trace.endpos, 8, forward, 4, trace.plane.normal, vieworg); + // trace a little further so it hits a surface more consistently (to avoid 'snapping' on the edge of the range) + dist = -camback - 8; + chase_dest[0] = vieworg[0] + forward[0] * dist; + chase_dest[1] = vieworg[1] + forward[1] * dist; + chase_dest[2] = vieworg[2] + forward[2] * dist + camup; + trace = CL_Move(vieworg, vec3_origin, vec3_origin, chase_dest, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_BODY | SUPERCONTENTS_SKY, true, false, NULL, false); + VectorMAMAM(1, trace.endpos, 8, forward, 4, trace.plane.normal, vieworg); + } } else { @@ -447,7 +498,7 @@ void V_CalcRefdef (void) VectorCopy(vieworg, gunorg); - if (cl_bobmodel.value) + if (cl_bob.value && cl_bobmodel.value) { // calculate for swinging gun model // the gun bobs when running on the ground, but doesn't bob when you're in the air. @@ -482,9 +533,9 @@ void V_CalcRefdef (void) bspeed = bound (0, xyspeed, 400) * 0.01f; AngleVectors (viewangles, forward, right, up); - bob = bspeed * cl_bobmodel_side.value * sin (s) * t; + bob = bspeed * cl_bobmodel_side.value * cl_viewmodel_scale.value * sin (s) * t; VectorMA (gunorg, bob, right, gunorg); - bob = bspeed * cl_bobmodel_up.value * cos (s * 2) * t; + bob = bspeed * cl_bobmodel_up.value * cl_viewmodel_scale.value * cos (s * 2) * t; VectorMA (gunorg, bob, up, gunorg); } } @@ -496,8 +547,9 @@ void V_CalcRefdef (void) Matrix4x4_CreateFromQuakeEntity(&r_view.matrix, vieworg[0], vieworg[1], vieworg[2], viewangles[0], viewangles[1], viewangles[2] + v_idlescale.value * sin(cl.time*v_iroll_cycle.value) * v_iroll_level.value, 1); // calculate a viewmodel matrix for use in view-attached entities Matrix4x4_CreateFromQuakeEntity(&viewmodelmatrix, gunorg[0], gunorg[1], gunorg[2], viewangles[0], viewangles[1], viewangles[2], cl_viewmodel_scale.value); - VectorCopy(vieworg, csqc_origin); - VectorCopy(viewangles, csqc_angles); + VectorCopy(vieworg, cl.csqc_origin); + VectorCopy(viewangles, cl.csqc_angles); + Matrix4x4_Invert_Simple(&r_view.inverse_matrix, &r_view.matrix); } } } @@ -527,7 +579,7 @@ void V_CalcViewBlend(void) r_refdef.viewblend[3] = 0; r_refdef.frustumscale_x = 1; r_refdef.frustumscale_y = 1; - if (cls.state == ca_connected && cls.signon == SIGNONS && gl_polyblend.value > 0) + if (cls.state == ca_connected && cls.signon == SIGNONS) { // set contents color int supercontents; @@ -676,6 +728,7 @@ void V_Init (void) Cvar_RegisterVariable (&chase_back); Cvar_RegisterVariable (&chase_up); Cvar_RegisterVariable (&chase_active); + Cvar_RegisterVariable (&chase_overhead); if (gamemode == GAME_GOODVSBAD2) Cvar_RegisterVariable (&chase_stevie);