From 88a1984d090e9cd063caf43c07d1ed7a8f5811dc Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Tue, 15 Mar 2022 00:01:20 -0700 Subject: [PATCH] NSRenderableEntity: Add RFX_GLOWSHELL effect. Note that .fatness doesn't currently work on HL MDL. --- src/client/defs.h | 4 ++- src/client/entry.qc | 3 +++ src/gs-entbase/shared/NSMonster.qc | 9 ------- src/gs-entbase/shared/NSRenderableEntity.qc | 29 ++++++++++++++------- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/client/defs.h b/src/client/defs.h index 15cf8148..b1025569 100644 --- a/src/client/defs.h +++ b/src/client/defs.h @@ -37,6 +37,9 @@ font_s FONT_16; font_s FONT_20; font_s FONT_CON; +var string g_shellchrome; +var float g_shellchromeshader; + /* clientside cvars */ var float autocvar_zoom_sensitivity = 1.0f; var int autocvar_cl_smoothstairs = TRUE; @@ -82,7 +85,6 @@ drawstring_r(vector p, string t, vector s, vector c, float a, float f) } void GameMessage_Setup(string, int); -void Game_Input(void); void View_SetMuzzleflash(int); void Event_Callback(float mtime, __inout float btime); diff --git a/src/client/entry.qc b/src/client/entry.qc index 4c13bb1e..e950826b 100644 --- a/src/client/entry.qc +++ b/src/client/entry.qc @@ -117,6 +117,9 @@ CSQC_RendererRestarted(string rstr) Entities_RendererRestarted(); DetailTex_Init(); + g_shellchrome = spriteframe("sprites/shellchrome.spr", 0, 0.0f); + g_shellchromeshader = shaderforname("shellchrome", sprintf("{\n{\nmap %s\ntcGen environment\nrgbGen entity\n}\n}", "textures/sfx/reflection.tga")); + /* end msg */ print("Graphical resources reloaded\n"); } diff --git a/src/gs-entbase/shared/NSMonster.qc b/src/gs-entbase/shared/NSMonster.qc index 3b16c71c..a9a8ca44 100644 --- a/src/gs-entbase/shared/NSMonster.qc +++ b/src/gs-entbase/shared/NSMonster.qc @@ -762,15 +762,6 @@ NSMonster::SendEntity(entity ePEnt, float fChanged) /*if (cvar("developer") == 0 && m_iRenderMode == RM_TRIGGER) return (0);*/ -#ifdef GS_RENDERFX - /* let's not waste networking power on certain render-modes where they would - * not apply anyway. this seems sensible enough. */ - if (m_iRenderMode == RM_NORMAL || m_iRenderMode == RM_TRIGGER) { - fChanged &= ~BASEFL_CHANGED_RENDERCOLOR; - fChanged &= ~BASEFL_CHANGED_RENDERAMT; - } -#endif - /* broadcast how much data is expected to be read */ WriteFloat(MSG_ENTITY, fChanged); diff --git a/src/gs-entbase/shared/NSRenderableEntity.qc b/src/gs-entbase/shared/NSRenderableEntity.qc index 28de7f61..bdf90b57 100644 --- a/src/gs-entbase/shared/NSRenderableEntity.qc +++ b/src/gs-entbase/shared/NSRenderableEntity.qc @@ -105,6 +105,9 @@ NSRenderableEntity::EvaluateEntity(void) if (ATTR_CHANGED(m_iRenderMode)) { SetSendFlags(BASEFL_CHANGED_RENDERMODE); } + if (ATTR_CHANGED(m_iRenderFX)) { + SetSendFlags(BASEFL_CHANGED_RENDERMODE); + } if (ATTR_CHANGED(m_vecRenderColor)) { SetSendFlags(BASEFL_CHANGED_RENDERCOLOR); @@ -168,16 +171,6 @@ NSRenderableEntity::SendEntity(entity ePEnt, float fChanged) /*if (cvar("developer") == 0 && m_iRenderMode == RM_TRIGGER) return (0);*/ -#ifdef GS_RENDERFX - /* let's not waste networking power on certain render-modes where they would - * not apply anyway. this seems sensible enough. */ - if (m_iRenderMode == RM_NORMAL || m_iRenderMode == RM_TRIGGER) { - if (!glowmod) /* FIXME: Get rid of this, network this hack on its own. */ - fChanged &= ~BASEFL_CHANGED_RENDERCOLOR; - fChanged &= ~BASEFL_CHANGED_RENDERAMT; - } -#endif - /* broadcast how much data is expected to be read */ WriteFloat(MSG_ENTITY, fChanged); @@ -434,6 +427,22 @@ NSRenderableEntity::RenderFXPass(void) drawflags = 7; abslight = 128; break; + case RFX_GLOWSHELL: + /* make this entity shellchrome */ + effects = EF_ADDITIVE; + fatness = 0; + colormod = m_vecRenderColor; + forceshader = g_shellchromeshader; + alpha = 1.0; + /* copy entity into rendering queue */ + addentity(this); + /* reset */ + forceshader = 0; + fatness = 0; + colormod = [1,1,1]; + alpha = 1.0f; + effects = 0; + break; default: break; }