diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index b0a1e644..7e2ffa27 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -875,7 +875,7 @@ void dodamage(int damage, playerent *pl, playerent *actor, int gun, bool gib, bo if(pl == h) { if(pl != actor) updatedmgindicator(pl, actor->o); - damageblend(damage); + damageblend(damage, pl); pl->damageroll(damage); } diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index 6d048569..8eaafa9f 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -388,7 +388,6 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) { static char text[MAXTRANS]; int type, joining = 0; - bool demoplayback = false; while(p.remaining()) { @@ -1385,6 +1384,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) case SV_DEMOPLAYBACK: { + bool demoplayback = false; string demofile; extern char *curdemofile; if(demo && watchingdemo && demoprotocol == 1132) diff --git a/source/src/protos.h b/source/src/protos.h index 120068e5..0c1a9ab5 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -402,7 +402,6 @@ extern void renderaboveheadicon(playerent *p); extern void drawscope(bool preload = false); extern float dynfov(); extern int fog; -extern void damageblend(int n); // shadow extern bool addshadowbox(const vec &bbmin, const vec &bbmax, const vec &extrude, const glmatrixf &mat); @@ -772,6 +771,7 @@ enum HUDMSG_TYPE = 0xFF, HUDMSG_OVERWRITE = 1<<8 }; +extern void damageblend(int n, void *p); extern void gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwater); extern void loadingscreen(const char *fmt = NULL, ...) PRINTFARGS(1, 2); extern void hudoutf(const char *s, ...) PRINTFARGS(1, 2); diff --git a/source/src/renderhud.cpp b/source/src/renderhud.cpp index 0486d97f..4ca781b3 100644 --- a/source/src/renderhud.cpp +++ b/source/src/renderhud.cpp @@ -692,17 +692,19 @@ void drawteamicons(int w, int h, bool spect) } int damageblendmillis = 0; +void *damageblendplayer = NULL; VARFP(damagescreen, 0, 1, 1, { if(!damagescreen) damageblendmillis = 0; }); VARP(damagescreenfactor, 1, 7, 100); VARP(damagescreenalpha, 1, 45, 100); VARP(damagescreenfade, 0, 125, 1000); -void damageblend(int n) +void damageblend(int n, void *p) { if(!damagescreen) return; - if(lastmillis > damageblendmillis) damageblendmillis = lastmillis; + if(lastmillis > damageblendmillis || damageblendplayer != p) damageblendmillis = lastmillis; damageblendmillis += n*damagescreenfactor; + damageblendplayer = p; } void drawmedals(float x, float y, int col, int row, Texture *tex) @@ -790,7 +792,7 @@ void gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwat glEnd(); } - if(lastmillis < damageblendmillis) + if(lastmillis < damageblendmillis && damageblendplayer == p) { static Texture *damagetex = NULL; if(!damagetex) damagetex = textureload("packages/misc/damage.png", 3); diff --git a/source/src/weapon.cpp b/source/src/weapon.cpp index b1895d3c..180275c4 100644 --- a/source/src/weapon.cpp +++ b/source/src/weapon.cpp @@ -423,7 +423,7 @@ void hit(int damage, playerent *d, playerent *at, const vec &vel, int gun, bool h.dir = ivec(0, 0, 0); d->damageroll(damage); if(d != at) updatedmgindicator(player1, at->o); - damageblend(damage); + damageblend(damage, d); damageeffect(damage, d); audiomgr.playsound(S_PAIN6, SP_HIGH); }