mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-01-18 23:11:38 +00:00
Frame-rate independent cshift fades.
As per mh's post on inside3d.com. I don't see any difference, but it still fades well, so... :) http://forums.inside3d.com/viewtopic.php?f=12&t=4899
This commit is contained in:
parent
fc67f8ce93
commit
2897dc5a16
3 changed files with 68 additions and 38 deletions
|
@ -155,6 +155,8 @@ typedef struct
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int destcolor[3];
|
int destcolor[3];
|
||||||
int percent; // 0-255
|
int percent; // 0-255
|
||||||
|
double time;
|
||||||
|
int initialpct;
|
||||||
} cshift_t;
|
} cshift_t;
|
||||||
|
|
||||||
#define CSHIFT_CONTENTS 0
|
#define CSHIFT_CONTENTS 0
|
||||||
|
|
|
@ -249,24 +249,27 @@ V_ParseDamage (void)
|
||||||
|
|
||||||
if (cl_cshift_damage->int_val
|
if (cl_cshift_damage->int_val
|
||||||
|| (cl.sv_cshifts & INFO_CSHIFT_DAMAGE)) {
|
|| (cl.sv_cshifts & INFO_CSHIFT_DAMAGE)) {
|
||||||
|
cshift_t *cshift = &cl.cshifts[CSHIFT_DAMAGE];
|
||||||
|
|
||||||
cl.cshifts[CSHIFT_DAMAGE].percent += 3 * count;
|
cshift->percent += 3 * count;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].percent =
|
cshift->percent =
|
||||||
bound (0, cl.cshifts[CSHIFT_DAMAGE].percent, 150);
|
bound (0, cshift->percent, 150);
|
||||||
|
|
||||||
if (armor > blood) {
|
if (armor > blood) {
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 200;
|
cshift->destcolor[0] = 200;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 100;
|
cshift->destcolor[1] = 100;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 100;
|
cshift->destcolor[2] = 100;
|
||||||
} else if (armor) {
|
} else if (armor) {
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 220;
|
cshift->destcolor[0] = 220;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 50;
|
cshift->destcolor[1] = 50;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 50;
|
cshift->destcolor[2] = 50;
|
||||||
} else {
|
} else {
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 255;
|
cshift->destcolor[0] = 255;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 0;
|
cshift->destcolor[1] = 0;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 0;
|
cshift->destcolor[2] = 0;
|
||||||
}
|
}
|
||||||
|
cshift->initialpct = cshift->percent;
|
||||||
|
cshift->time = cl.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
// calculate view angle kicks
|
// calculate view angle kicks
|
||||||
|
@ -306,6 +309,8 @@ V_BonusFlash_f (void)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cl.cshifts[CSHIFT_BONUS] = cshift_bonus;
|
cl.cshifts[CSHIFT_BONUS] = cshift_bonus;
|
||||||
|
cl.cshifts[CSHIFT_BONUS].initialpct = cl.cshifts[CSHIFT_BONUS].percent;
|
||||||
|
cl.cshifts[CSHIFT_BONUS].time = cl.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -421,6 +426,20 @@ V_CalcBlend (void)
|
||||||
r_data->vid->cshift_color[3] = bound (0.0, a, 1.0);
|
r_data->vid->cshift_color[3] = bound (0.0, a, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
V_DropCShift (cshift_t *cs, float droprate)
|
||||||
|
{
|
||||||
|
if (cs->time < 0) {
|
||||||
|
cs->percent = 0;
|
||||||
|
} else {
|
||||||
|
cs->percent = cs->initialpct - (cl.time - cs->time) * droprate;
|
||||||
|
if (cs->percent <= 0) {
|
||||||
|
cs->percent = 0;
|
||||||
|
cs->time = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
V_PrepBlend (void)
|
V_PrepBlend (void)
|
||||||
{
|
{
|
||||||
|
@ -447,14 +466,9 @@ V_PrepBlend (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// drop the damage value
|
// drop the damage value
|
||||||
cl.cshifts[CSHIFT_DAMAGE].percent -= host_frametime * 150;
|
V_DropCShift (&cl.cshifts[CSHIFT_DAMAGE], 150);
|
||||||
if (cl.cshifts[CSHIFT_DAMAGE].percent < 0)
|
|
||||||
cl.cshifts[CSHIFT_DAMAGE].percent = 0;
|
|
||||||
|
|
||||||
// drop the bonus value
|
// drop the bonus value
|
||||||
cl.cshifts[CSHIFT_BONUS].percent -= host_frametime * 100;
|
V_DropCShift (&cl.cshifts[CSHIFT_BONUS], 100);
|
||||||
if (cl.cshifts[CSHIFT_BONUS].percent < 0)
|
|
||||||
cl.cshifts[CSHIFT_BONUS].percent = 0;
|
|
||||||
|
|
||||||
if (!r_data->vid->cshift_changed && !r_data->vid->recalc_refdef)
|
if (!r_data->vid->cshift_changed && !r_data->vid->recalc_refdef)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -254,24 +254,27 @@ V_ParseDamage (void)
|
||||||
|
|
||||||
if (cl_cshift_damage->int_val
|
if (cl_cshift_damage->int_val
|
||||||
|| (cl.sv_cshifts & INFO_CSHIFT_DAMAGE)) {
|
|| (cl.sv_cshifts & INFO_CSHIFT_DAMAGE)) {
|
||||||
|
cshift_t *cshift = &cl.cshifts[CSHIFT_DAMAGE];
|
||||||
|
|
||||||
cl.cshifts[CSHIFT_DAMAGE].percent += 3 * count;
|
cshift->percent += 3 * count;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].percent =
|
cshift->percent =
|
||||||
bound (0, cl.cshifts[CSHIFT_DAMAGE].percent, 150);
|
bound (0, cshift->percent, 150);
|
||||||
|
|
||||||
if (armor > blood) {
|
if (armor > blood) {
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 200;
|
cshift->destcolor[0] = 200;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 100;
|
cshift->destcolor[1] = 100;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 100;
|
cshift->destcolor[2] = 100;
|
||||||
} else if (armor) {
|
} else if (armor) {
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 220;
|
cshift->destcolor[0] = 220;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 50;
|
cshift->destcolor[1] = 50;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 50;
|
cshift->destcolor[2] = 50;
|
||||||
} else {
|
} else {
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[0] = 255;
|
cshift->destcolor[0] = 255;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[1] = 0;
|
cshift->destcolor[1] = 0;
|
||||||
cl.cshifts[CSHIFT_DAMAGE].destcolor[2] = 0;
|
cshift->destcolor[2] = 0;
|
||||||
}
|
}
|
||||||
|
cshift->initialpct = cshift->percent;
|
||||||
|
cshift->time = cl.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
// calculate view angle kicks
|
// calculate view angle kicks
|
||||||
|
@ -311,6 +314,8 @@ V_BonusFlash_f (void)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cl.cshifts[CSHIFT_BONUS] = cshift_bonus;
|
cl.cshifts[CSHIFT_BONUS] = cshift_bonus;
|
||||||
|
cl.cshifts[CSHIFT_BONUS].initialpct = cl.cshifts[CSHIFT_BONUS].percent;
|
||||||
|
cl.cshifts[CSHIFT_BONUS].time = cl.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -426,6 +431,20 @@ V_CalcBlend (void)
|
||||||
r_data->vid->cshift_color[3] = bound (0.0, a, 1.0);
|
r_data->vid->cshift_color[3] = bound (0.0, a, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
V_DropCShift (cshift_t *cs, float droprate)
|
||||||
|
{
|
||||||
|
if (cs->time < 0) {
|
||||||
|
cs->percent = 0;
|
||||||
|
} else {
|
||||||
|
cs->percent = cs->initialpct - (cl.time - cs->time) * droprate;
|
||||||
|
if (cs->percent <= 0) {
|
||||||
|
cs->percent = 0;
|
||||||
|
cs->time = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
V_PrepBlend (void)
|
V_PrepBlend (void)
|
||||||
{
|
{
|
||||||
|
@ -452,14 +471,9 @@ V_PrepBlend (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// drop the damage value
|
// drop the damage value
|
||||||
cl.cshifts[CSHIFT_DAMAGE].percent -= host_frametime * 150;
|
V_DropCShift (&cl.cshifts[CSHIFT_DAMAGE], 150);
|
||||||
if (cl.cshifts[CSHIFT_DAMAGE].percent < 0)
|
|
||||||
cl.cshifts[CSHIFT_DAMAGE].percent = 0;
|
|
||||||
|
|
||||||
// drop the bonus value
|
// drop the bonus value
|
||||||
cl.cshifts[CSHIFT_BONUS].percent -= host_frametime * 100;
|
V_DropCShift (&cl.cshifts[CSHIFT_BONUS], 100);
|
||||||
if (cl.cshifts[CSHIFT_BONUS].percent < 0)
|
|
||||||
cl.cshifts[CSHIFT_BONUS].percent = 0;
|
|
||||||
|
|
||||||
if (!r_data->vid->cshift_changed && !r_data->vid->recalc_refdef)
|
if (!r_data->vid->cshift_changed && !r_data->vid->recalc_refdef)
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue