Skip to content

Commit

Permalink
Added cl_show_server_triggers_* cvars (related to plugin PR)
Browse files Browse the repository at this point in the history
  • Loading branch information
SmileyAG committed Dec 25, 2023
1 parent b4e4c32 commit 43125c8
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/common/com_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#define STUDIO_EVENTS 2

#define MAX_CLIENTS 32
#define MAX_EDICTS 900
#define MAX_EDICTS 2048

#define MAX_MODEL_NAME 64
#define MAX_MAP_HULLS 4
Expand Down
1 change: 1 addition & 0 deletions src/common/const.h
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,7 @@ enum
kRenderFxGlowShell, // Glowing Shell
kRenderFxClampMinScale, // Keep this sprite from getting very small (SPRITES only!)
kRenderFxLightMultiplier, //CTM !!!CZERO added to tell the studiorender that the value in iuser2 is a lightmultiplier
kRenderFxTrigger = 241,
};

typedef unsigned int func_t;
Expand Down
1 change: 1 addition & 0 deletions src/game/client/cdll_int.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ int CL_DLLEXPORT HUD_VidInit(void)
PM_ResetBHopDetection();
CResults::Get().Stop();
GetClientVoiceMgr()->VidInit();
gHUD.white_sprite = gEngfuncs.pfnSPR_Load("sprites/white.spr");

return 1;
}
Expand Down
8 changes: 8 additions & 0 deletions src/game/client/entity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ extern IParticleMan *g_pParticleMan;

ConVar r_dynamic_ent_light("r_dynamic_ent_light", "1", FCVAR_BHL_ARCHIVE);
ConVar cl_hidecorpses("cl_hidecorpses", "0", FCVAR_BHL_ARCHIVE);
extern ConVar cl_show_server_triggers;
extern ConVar cl_show_server_triggers_alpha;

void Game_AddObjects(void);

Expand Down Expand Up @@ -54,6 +56,12 @@ int CL_DLLEXPORT HUD_AddEntity(int type, struct cl_entity_s *ent, const char *mo
break;
}

// show triggers that would be transferred from server-side with specific value in renderfx to differ it from other entities
// update: there is a new implementation of displaying triggers that allows you to display even when planes is stripped due to optimizations in updated map compiler
// so this code will only work if the value 2 is specified in the cvar, but it should not be deleted imo
if ((ent->curstate.rendermode == kRenderTransColor) && (ent->curstate.renderfx == kRenderFxTrigger) && (cl_show_server_triggers.GetInt() == 2) && !gHUD.IsTriggerForSinglePlayer(ent->curstate.rendercolor))
ent->curstate.renderamt = std::clamp(cl_show_server_triggers_alpha.GetFloat(), 0.0f, 255.0f);

// hide corpses option
if (cl_hidecorpses.GetBool() && ent->curstate.renderfx == kRenderFxDeadPlayer)
return 0;
Expand Down
22 changes: 22 additions & 0 deletions src/game/client/hud.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ ConVar cl_autowepswitch("cl_autowepswitch", "1", FCVAR_BHL_ARCHIVE | FCVAR_USERI
ConVar cl_righthand("cl_righthand", "0", FCVAR_BHL_ARCHIVE, "If enabled, activates the left-handed mode");
ConVar cl_viewmodel_fov("cl_viewmodel_fov", "0", FCVAR_BHL_ARCHIVE, "Sets the field-of-view for the viewmodel");
ConVar showtriggers("showtriggers", "0", 0, "Shows trigger brushes");
ConVar cl_show_server_triggers("cl_show_server_triggers", "0", FCVAR_BHL_ARCHIVE, "Shows server triggers if transmitted in special way");
ConVar cl_show_server_triggers_alpha("cl_show_server_triggers_alpha", "120", FCVAR_BHL_ARCHIVE);

ConVar aghl_version("aghl_version", APP_VERSION, 0, "BugfixedHL version");
ConVar aghl_supports("aghl_supports", "0", 0, "Bitfield of features supported by this client");
Expand Down Expand Up @@ -605,6 +607,26 @@ void CHud::SaveEngineVersion()
}
}

bool CHud::IsTriggerForSinglePlayer(color24 rendercolor)
{
auto r = rendercolor.r;
auto g = rendercolor.g;
auto b = rendercolor.b;

if ((r == 128) && (g == 128) && (b == 128)) // trigger_autosave
return true;
else if ((r == 79) && (g == 255) && (b == 10)) // trigger_changelevel
return true;
else if ((r == 150) && (g == 75) && (b == 0)) // trigger_endsection
return true;
else if ((r == 238) && (g == 154) && (b == 77)) // trigger_monsterjump
return true;
else if ((r == 203) && (g == 103) && (b == 212)) // trigger_transition
return true;

return false;
}

bool CHud::IsAG()
{
return m_bIsAg;
Expand Down
3 changes: 3 additions & 0 deletions src/game/client/hud.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ class CHud

CRainbow m_Rainbow;

HSPRITE white_sprite = 0;

//-----------------------------------------------------
// HUD exports
//-----------------------------------------------------
Expand All @@ -148,6 +150,7 @@ class CHud
void Shutdown();
void ApplyViewportSchemeSettings(vgui2::IScheme *pScheme);
void SaveEngineVersion();
bool IsTriggerForSinglePlayer(color24 rendercolor);

/**
* Returns whether DLL is installed onto AG mod.
Expand Down
98 changes: 98 additions & 0 deletions src/game/client/tri.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,59 @@
#include "particleman.h"
#include "tri.h"

#include "com_model.h"

CSysModule *g_hParticleManModule = NULL;
IParticleMan *g_pParticleMan = NULL;

extern ConVar cl_show_server_triggers;
extern ConVar cl_show_server_triggers_alpha;

void DivideRGBABy255(float &r, float &g, float &b, float &a)
{
r /= 255.0f;
g /= 255.0f;
b /= 255.0f;
a /= 255.0f;
}

void DrawAACuboid(triangleapi_s *pTriAPI, Vector corner1, Vector corner2)
{
pTriAPI->Begin(TRI_QUADS);

pTriAPI->Vertex3f(corner1.x, corner1.y, corner1.z);
pTriAPI->Vertex3f(corner1.x, corner2.y, corner1.z);
pTriAPI->Vertex3f(corner2.x, corner2.y, corner1.z);
pTriAPI->Vertex3f(corner2.x, corner1.y, corner1.z);

pTriAPI->Vertex3f(corner1.x, corner1.y, corner1.z);
pTriAPI->Vertex3f(corner1.x, corner1.y, corner2.z);
pTriAPI->Vertex3f(corner1.x, corner2.y, corner2.z);
pTriAPI->Vertex3f(corner1.x, corner2.y, corner1.z);

pTriAPI->Vertex3f(corner1.x, corner1.y, corner1.z);
pTriAPI->Vertex3f(corner2.x, corner1.y, corner1.z);
pTriAPI->Vertex3f(corner2.x, corner1.y, corner2.z);
pTriAPI->Vertex3f(corner1.x, corner1.y, corner2.z);

pTriAPI->Vertex3f(corner2.x, corner2.y, corner2.z);
pTriAPI->Vertex3f(corner1.x, corner2.y, corner2.z);
pTriAPI->Vertex3f(corner1.x, corner1.y, corner2.z);
pTriAPI->Vertex3f(corner2.x, corner1.y, corner2.z);

pTriAPI->Vertex3f(corner2.x, corner2.y, corner2.z);
pTriAPI->Vertex3f(corner2.x, corner1.y, corner2.z);
pTriAPI->Vertex3f(corner2.x, corner1.y, corner1.z);
pTriAPI->Vertex3f(corner2.x, corner2.y, corner1.z);

pTriAPI->Vertex3f(corner2.x, corner2.y, corner2.z);
pTriAPI->Vertex3f(corner2.x, corner2.y, corner1.z);
pTriAPI->Vertex3f(corner1.x, corner2.y, corner1.z);
pTriAPI->Vertex3f(corner1.x, corner2.y, corner2.z);

pTriAPI->End();
}

//---------------------------------------------------
// Particle Manager
//---------------------------------------------------
Expand Down Expand Up @@ -86,6 +136,44 @@ void CL_DLLEXPORT HUD_DrawNormalTriangles(void)
void RunEventList(void);
#endif

void DrawServerTriggers()
{
if ((cl_show_server_triggers.GetBool()) && (cl_show_server_triggers.GetInt() != 2))
{
for (int e = 0; e < MAX_EDICTS; ++e)
{
cl_entity_t* ent = gEngfuncs.GetEntityByIndex(e);
if (ent)
{
if (ent->model)
{
if ((ent->curstate.rendermode == kRenderTransColor) && (ent->curstate.renderfx == kRenderFxTrigger))
{
color24 colors = ent->curstate.rendercolor;
if (!gHUD.IsTriggerForSinglePlayer(colors))
{
gEngfuncs.pTriAPI->RenderMode(kRenderTransAdd);
gEngfuncs.pTriAPI->CullFace(TRI_NONE);

float r = colors.r, g = colors.g, b = colors.b, a = std::clamp(cl_show_server_triggers_alpha.GetFloat(), 0.0f, 255.0f);
DivideRGBABy255(r, g, b, a);
gEngfuncs.pTriAPI->Color4f(r, g, b, a);

Vector mins = ent->curstate.mins;
Vector maxs = ent->curstate.maxs;
Vector origin = ent->curstate.origin;
Vector absmin = origin + mins;
Vector absmax = origin + maxs;

DrawAACuboid(gEngfuncs.pTriAPI, absmin, absmax);
}
}
}
}
}
}
}

/*
=================
HUD_DrawTransparentTriangles
Expand All @@ -103,4 +191,14 @@ void CL_DLLEXPORT HUD_DrawTransparentTriangles(void)

if (g_pParticleMan)
g_pParticleMan->Update();

if (gHUD.white_sprite == 0)
return;

if (gEngfuncs.pTriAPI->SpriteTexture(const_cast<model_s*>(gEngfuncs.GetSpritePointer(gHUD.white_sprite)), 0))
{
DrawServerTriggers();

gEngfuncs.pTriAPI->RenderMode(kRenderNormal);
}
}

0 comments on commit 43125c8

Please sign in to comment.