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_bob_side = {CVAR_SAVE, "cl_bob_side","0.02", "view bobbing amount"};
+cvar_t cl_bobcycle_side = {CVAR_SAVE, "cl_bobcycle_side","0.6", "view bobbing speed"};
+cvar_t cl_bobup_side = {CVAR_SAVE, "cl_bobup_side","0.5", "view bobbing adjustment that makes the sideways swing of the bob last longer"};
+
cvar_t cl_bobroll = {CVAR_SAVE, "cl_bobroll","0", "view rolling amount"};
cvar_t cl_bobrollcycle = {CVAR_SAVE, "cl_bobrollcycle","0.8", "view rolling speed"};
cvar_t cl_bobrollairtime = {CVAR_SAVE, "cl_bobrollairtime","0.05", "how fast the view rolls back when you stop touching the ground"};
VectorAdd(vieworg, cl.punchvector, vieworg);
if (cl.stats[STAT_HEALTH] > 0)
{
- double xyspeed, bob, bobroll;
+ double xyspeed, bob, bob2, bobroll;
float cycle, cycle2;
vec_t frametime;
gunorg[2] += bound(-7, bob, 4);
}
+ // view bobbing code 2
+ if (cl_bob_side.value && cl_bobcycle_side.value)
+ {
+ // LordHavoc: this code is *weird*, but not replacable (I think it
+ // should be done in QC on the server, but oh well, quake is quake)
+ // LordHavoc: figured out bobup: the time at which the sin is at 180
+ // degrees (which allows lengthening or squishing the peak or valley)
+ cycle = cl.time / cl_bobcycle_side.value;
+ cycle -= (int) cycle;
+ if (cycle < cl_bobup_side.value)
+ cycle = sin(M_PI * cycle / cl_bobup_side.value);
+ else
+ cycle = sin(M_PI + M_PI * (cycle-cl_bobup_side.value)/(1.0 - cl_bobup_side.value));
+ // bob is proportional to velocity in the xy plane
+ // (don't count Z, or jumping messes it up)
+ bob = xyspeed * cl_bob_side.value;
+ bob = bob*0.3 + bob*0.7*cycle;
+ vieworg[1] += bound(-7, bob, 4);
+ vieworg[0] += bound(-7, bob, 4);
+ // we also need to adjust gunorg, or this appears like pushing the gun!
+ // In the old code, this was applied to vieworg BEFORE copying to gunorg,
+ // but this is not viable with the new followmodel code as that would mean
+ // that followmodel would work on the munged-by-bob vieworg and do feedback
+ gunorg[1] += bound(-7, bob, 4);
+ gunorg[0] += bound(-7, bob, 4);
+ //vieworg[0] += bound(-7, bob, 4);
+ }
+
// view rolling code
if (cl_bobroll.value && cl_bobrollcycle.value)
{
Cvar_RegisterVariable (&cl_bob);
Cvar_RegisterVariable (&cl_bobcycle);
Cvar_RegisterVariable (&cl_bobup);
+
+ Cvar_RegisterVariable (&cl_bob_side);
+ Cvar_RegisterVariable (&cl_bobcycle_side);
+ Cvar_RegisterVariable (&cl_bobup_side);
+
Cvar_RegisterVariable (&cl_bobroll);
Cvar_RegisterVariable (&cl_bobrollcycle);
Cvar_RegisterVariable (&cl_bobrollairtime);