From d4c97c639b679d059ea1782b16aebd6adbc4fe06 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Sat, 2 May 2020 06:38:02 +0200 Subject: [PATCH] Unbreak env_sprite rendermodes. --- src/client/cstrike/progs.src | 1 - src/client/fx_gunsmoke.c | 21 ----------------- src/client/tfc/progs.src | 1 - src/gs-entbase/client/baseentity.cpp | 35 +++++++++++++++++++++++++++- src/gs-entbase/client/env_glow.cpp | 2 ++ src/gs-entbase/client/env_sprite.cpp | 24 +++++++++++-------- src/gs-entbase/server/env_sprite.cpp | 22 +++++++++-------- src/server/scihunt/gamerules.cpp | 2 +- 8 files changed, 63 insertions(+), 45 deletions(-) delete mode 100644 src/client/fx_gunsmoke.c diff --git a/src/client/cstrike/progs.src b/src/client/cstrike/progs.src index 8b242eca..75451ae5 100644 --- a/src/client/cstrike/progs.src +++ b/src/client/cstrike/progs.src @@ -85,7 +85,6 @@ ../cstrike/player.c ../cstrike/entities.c ../entities.c -../fx_gunsmoke.c ../cstrike/cmds.c ../cstrike/game_event.c ../events.c diff --git a/src/client/fx_gunsmoke.c b/src/client/fx_gunsmoke.c deleted file mode 100644 index 277f1415..00000000 --- a/src/client/fx_gunsmoke.c +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2016-2020 Marco Hladik - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -void -FX_Gunsmoke(vector inworldpos) -{ - -} diff --git a/src/client/tfc/progs.src b/src/client/tfc/progs.src index faa5eb06..1a05c568 100755 --- a/src/client/tfc/progs.src +++ b/src/client/tfc/progs.src @@ -80,7 +80,6 @@ init.c ../valve/player.c entities.c ../entities.c -../fx_gunsmoke.c ../valve/cmds.c ../valve/game_event.c diff --git a/src/gs-entbase/client/baseentity.cpp b/src/gs-entbase/client/baseentity.cpp index e0fcaa37..fc2e7b10 100644 --- a/src/gs-entbase/client/baseentity.cpp +++ b/src/gs-entbase/client/baseentity.cpp @@ -73,7 +73,40 @@ CBaseEntity::RenderFXPass(void) case RM_TEXTURE: break; case RM_GLOW: - effects = EF_FULLBRIGHT; + int s = (float)getproperty(VF_ACTIVESEAT); + pSeat = &g_seats[s]; + vector vecPlayer = pSeat->m_vecPredictedOrigin; + + if (checkpvs(vecPlayer, this) == FALSE) { + alpha -= clframetime; + } + + other = world; + traceline(this.origin, vecPlayer, MOVE_OTHERONLY, this); + + /* If we can't trace against the player, or are two close, fade out */ + if (trace_fraction < 1.0f || vlen(origin - vecPlayer) < 128) { + alpha -= clframetime; + } else { + alpha += clframetime; + } + + alpha = bound(0, alpha, 1.0f); + effects = EF_ADDITIVE | EF_FULLBRIGHT; + + if (alpha > 0) { + float falpha; + + /* Scale the glow somewhat with the players distance */ + scale = bound(1, vlen(vecPlayer - origin) / 256, 4); + + /* Fade out when the player is starting to move away */ + falpha = 1 - bound(0, vlen(vecPlayer - origin) / 1024, 1); + falpha *= alpha; + + /* Clamp the alpha by the glows' renderamt value */ + alpha = bound(0, falpha, m_flRenderAmt); + } break; case RM_SOLID: break; diff --git a/src/gs-entbase/client/env_glow.cpp b/src/gs-entbase/client/env_glow.cpp index a3bc18f2..7c205c20 100644 --- a/src/gs-entbase/client/env_glow.cpp +++ b/src/gs-entbase/client/env_glow.cpp @@ -32,6 +32,7 @@ class env_glow:CBaseEntity string m_strSprite; vector m_vecSize; float m_flScale; + void(void) env_glow; virtual void(void) customphysics; virtual float() predraw; @@ -141,6 +142,7 @@ void env_glow::SpawnKey(string strField, string strKey) break; case "sprite": case "model": + precache_model(strKey); m_strSprite = sprintf("%s_0.tga", strKey); m_vecSize = drawgetimagesize(m_strSprite) / 2; break; diff --git a/src/gs-entbase/client/env_sprite.cpp b/src/gs-entbase/client/env_sprite.cpp index 627d1c9f..0796c375 100644 --- a/src/gs-entbase/client/env_sprite.cpp +++ b/src/gs-entbase/client/env_sprite.cpp @@ -49,11 +49,14 @@ void env_sprite::ReadEntity(float flChanged) modelindex = readfloat(); framerate = readfloat(); scale = readfloat(); - alpha = readfloat(); - effects = readfloat(); - colormod[0] = readfloat(); - colormod[1] = readfloat(); - colormod[2] = readfloat(); + + m_iRenderFX = readbyte(); + m_iRenderMode = readbyte(); + m_vecRenderColor[0] = readfloat(); + m_vecRenderColor[1] = readfloat(); + m_vecRenderColor[2] = readfloat(); + m_flRenderAmt = readfloat(); + drawmask = MASK_ENGINE; nextthink = time + (1 / framerate); maxframe = modelframecount(modelindex); @@ -81,11 +84,12 @@ void EnvSprite_ParseEvent(void) spr.modelindex = readfloat(); spr.framerate = readfloat(); spr.scale = readfloat(); - spr.alpha = readfloat(); - spr.effects = readfloat(); - spr.colormod[0] = readfloat(); - spr.colormod[1] = readfloat(); - spr.colormod[2] = readfloat(); + spr.m_iRenderFX = readbyte(); + spr.m_iRenderMode = readbyte(); + spr.m_vecRenderColor[0] = readfloat(); + spr.m_vecRenderColor[1] = readfloat(); + spr.m_vecRenderColor[2] = readfloat(); + spr.m_flRenderAmt = readfloat(); spr.drawmask = MASK_ENGINE; spr.nextthink = time + (1 / spr.framerate); spr.maxframe = modelframecount(spr.modelindex); diff --git a/src/gs-entbase/server/env_sprite.cpp b/src/gs-entbase/server/env_sprite.cpp index c368ac74..331de6d1 100644 --- a/src/gs-entbase/server/env_sprite.cpp +++ b/src/gs-entbase/server/env_sprite.cpp @@ -62,11 +62,12 @@ float env_sprite::Network(entity pvsent, float flags) WriteFloat(MSG_ENTITY, modelindex); WriteFloat(MSG_ENTITY, m_flFramerate); WriteFloat(MSG_ENTITY, m_flScale); - WriteFloat(MSG_ENTITY, alpha); - WriteFloat(MSG_ENTITY, effects); - WriteFloat(MSG_ENTITY, colormod[0]); - WriteFloat(MSG_ENTITY, colormod[1]); - WriteFloat(MSG_ENTITY, colormod[2]); + WriteByte(MSG_ENTITY, m_iRenderFX); + WriteByte(MSG_ENTITY, m_iRenderMode); + WriteFloat(MSG_ENTITY, m_vecRenderColor[0]); + WriteFloat(MSG_ENTITY, m_vecRenderColor[1]); + WriteFloat(MSG_ENTITY, m_vecRenderColor[2]); + WriteFloat(MSG_ENTITY, m_flRenderAmt); return TRUE; } @@ -80,11 +81,12 @@ void env_sprite::NetworkOnce(void) WriteFloat(MSG_MULTICAST, modelindex); WriteFloat(MSG_MULTICAST, m_flFramerate); WriteFloat(MSG_MULTICAST, m_flScale); - WriteFloat(MSG_MULTICAST, alpha); - WriteFloat(MSG_MULTICAST, effects); - WriteFloat(MSG_MULTICAST, colormod[0]); - WriteFloat(MSG_MULTICAST, colormod[1]); - WriteFloat(MSG_MULTICAST, colormod[2]); + WriteByte(MSG_ENTITY, m_iRenderFX); + WriteByte(MSG_ENTITY, m_iRenderMode); + WriteFloat(MSG_ENTITY, m_vecRenderColor[0]); + WriteFloat(MSG_ENTITY, m_vecRenderColor[1]); + WriteFloat(MSG_ENTITY, m_vecRenderColor[2]); + WriteFloat(MSG_ENTITY, m_flRenderAmt); msg_entity = this; multicast(origin, MULTICAST_PVS); } diff --git a/src/server/scihunt/gamerules.cpp b/src/server/scihunt/gamerules.cpp index d00553ba..31242327 100644 --- a/src/server/scihunt/gamerules.cpp +++ b/src/server/scihunt/gamerules.cpp @@ -55,7 +55,7 @@ SHMultiplayerRules::PlayerDeath(player pl) pl.think = PutClientInServer; pl.nextthink = time + 4.0f; - sound(pl, CHAN_AUTO, "fvox/flatline.wav", 1.0, ATTN_NORM); + Sound_Play(pl, CHAN_AUTO, "player.die"); if (pl.health < -50) { pl.health = 0;