From 454065eabc9d2dc211ff1d7654860a238f25c6df Mon Sep 17 00:00:00 2001 From: Wikot235 <149392035+Wikot235@users.noreply.github.com> Date: Mon, 26 May 2025 13:14:42 +0200 Subject: [PATCH 1/3] Added a custom crosshair system --- sp/src/game/client/hud_crosshair.cpp | 124 +++++++++++++++++++++++++++ sp/src/game/client/hud_crosshair.h | 4 + 2 files changed, 128 insertions(+) diff --git a/sp/src/game/client/hud_crosshair.cpp b/sp/src/game/client/hud_crosshair.cpp index fc7714fef3d..6f7476622c5 100644 --- a/sp/src/game/client/hud_crosshair.cpp +++ b/sp/src/game/client/hud_crosshair.cpp @@ -32,6 +32,26 @@ ConVar crosshair( "crosshair", "1", FCVAR_ARCHIVE ); ConVar cl_observercrosshair( "cl_observercrosshair", "1", FCVAR_ARCHIVE ); +#ifdef MAPBASE + +ConVar cl_crosshair_new_enable( "cl_crosshair_new_enable", "0", FCVAR_ARCHIVE ); +ConVar cl_crosshair_size( "cl_crosshair_size", "10", FCVAR_ARCHIVE ); +ConVar cl_crosshair_thickness( "cl_crosshair_thickness", "2", FCVAR_ARCHIVE ); +ConVar cl_crosshair_gap_size( "cl_crosshair_gap_size", "10", FCVAR_ARCHIVE ); +ConVar cl_crosshair_dot( "cl_crosshair_dot", "1", FCVAR_ARCHIVE ); + +ConVar cl_crosshair_red( "cl_crosshair_red", "255", FCVAR_ARCHIVE ); +ConVar cl_crosshair_green( "cl_crosshair_green", "255", FCVAR_ARCHIVE ); +ConVar cl_crosshair_blue( "cl_crosshair_blue", "255", FCVAR_ARCHIVE ); + +ConVar cl_crosshair_outline( "cl_crosshair_outline", "1", FCVAR_ARCHIVE ); +ConVar cl_crosshair_outline_thickness( "cl_crosshair_outline_thickness", "1", FCVAR_ARCHIVE ); +ConVar cl_crosshair_outline_red( "cl_crosshair_outline_red", "0", FCVAR_ARCHIVE ); +ConVar cl_crosshair_outline_green( "cl_crosshair_outline_green", "0", FCVAR_ARCHIVE ); +ConVar cl_crosshair_outline_blue( "cl_crosshair_outline_blue", "0", FCVAR_ARCHIVE ); + +#endif + using namespace vgui; int ScreenTransform( const Vector& point, Vector& screen ); @@ -229,6 +249,102 @@ void CHudCrosshair::GetDrawPosition ( float *pX, float *pY, bool *pbBehindCamera *pbBehindCamera = bBehindCamera; } +#ifdef MAPBASE +void CHudCrosshair::PaintNewCrosshair() +{ + int size = cl_crosshair_size.GetInt(); + int thickness = cl_crosshair_thickness.GetInt(); + int outline_thickness = cl_crosshair_outline_thickness.GetInt(); + int gap_size = cl_crosshair_gap_size.GetInt(); + + int Crosshair0x = ScreenWidth() / 2 - thickness / 2; + int Crosshair0y = ScreenHeight() / 2 - thickness / 2; + + // Draws the outline + if ( cl_crosshair_outline.GetInt() == 1 && outline_thickness != 0 ) + { + vgui::surface()->DrawSetColor( cl_crosshair_outline_red.GetInt(), cl_crosshair_outline_green.GetInt(), cl_crosshair_outline_blue.GetInt(), 255 ); + + // Dot + if ( cl_crosshair_dot.GetInt() == 1 ) + { + vgui::surface()->DrawFilledRect( + Crosshair0x - outline_thickness, + Crosshair0y - outline_thickness, + Crosshair0x + thickness + outline_thickness, + Crosshair0y + thickness + outline_thickness ); + } + + // Left + vgui::surface()->DrawFilledRect( + Crosshair0x - gap_size - size - outline_thickness, + Crosshair0y - outline_thickness, + Crosshair0x + outline_thickness - gap_size, + Crosshair0y + thickness + outline_thickness ); + + // Right + vgui::surface()->DrawFilledRect( + Crosshair0x + gap_size + thickness - outline_thickness, + Crosshair0y - outline_thickness, + Crosshair0x + gap_size + thickness + size + outline_thickness, + Crosshair0y + thickness + outline_thickness ); + + // Top + vgui::surface()->DrawFilledRect( + Crosshair0x - outline_thickness, + Crosshair0y - size - gap_size - outline_thickness, + Crosshair0x + thickness + outline_thickness, + Crosshair0y - gap_size + outline_thickness ); + + // Down + vgui::surface()->DrawFilledRect( + Crosshair0x - outline_thickness, + Crosshair0y + gap_size + thickness - outline_thickness, + Crosshair0x + thickness + outline_thickness, + Crosshair0y + gap_size + size + thickness + outline_thickness ); + + } + + // Dot + vgui::surface()->DrawSetColor( cl_crosshair_red.GetInt(), cl_crosshair_green.GetInt(), cl_crosshair_blue.GetInt(), 255 ); + if ( cl_crosshair_dot.GetInt() == 1 ) + { + vgui::surface()->DrawFilledRect( + Crosshair0x, + Crosshair0y, + Crosshair0x + thickness, + Crosshair0y + thickness ); + } + + // Left + vgui::surface()->DrawFilledRect( + Crosshair0x - gap_size - size, + Crosshair0y, + Crosshair0x - gap_size, + Crosshair0y + thickness ); + + // Right + vgui::surface()->DrawFilledRect( + Crosshair0x + gap_size + thickness, + Crosshair0y, + Crosshair0x + gap_size + size + thickness, + Crosshair0y + thickness ); + + // Top + vgui::surface()->DrawFilledRect( + Crosshair0x, + Crosshair0y - size - gap_size, + Crosshair0x + thickness, + Crosshair0y - gap_size ); + + // Down + vgui::surface()->DrawFilledRect( + Crosshair0x, + Crosshair0y + gap_size + thickness, + Crosshair0x + thickness, + Crosshair0y + gap_size + size + thickness ); +} +#endif void CHudCrosshair::Paint( void ) { @@ -238,6 +354,14 @@ void CHudCrosshair::Paint( void ) if ( !IsCurrentViewAccessAllowed() ) return; +#ifdef MAPBASE + if ( cl_crosshair_new_enable.GetInt() == 1 && cl_crosshair_thickness.GetInt() != 0 ) + { + PaintNewCrosshair(); + return; + } +#endif + C_BasePlayer* pPlayer = C_BasePlayer::GetLocalPlayer(); if ( !pPlayer ) return; diff --git a/sp/src/game/client/hud_crosshair.h b/sp/src/game/client/hud_crosshair.h index 7952db29a22..938e7c24fee 100644 --- a/sp/src/game/client/hud_crosshair.h +++ b/sp/src/game/client/hud_crosshair.h @@ -42,6 +42,10 @@ class CHudCrosshair : public CHudElement, public vgui::Panel virtual void ApplySchemeSettings( vgui::IScheme *scheme ); virtual void Paint(); +#ifdef MAPBASE + void PaintNewCrosshair(); +#endif + // Crosshair sprite and colors CHudTexture *m_pCrosshair; CHudTexture *m_pDefaultCrosshair; From c377f89e8429a20fceb4e0a01b9faac8ae698fc2 Mon Sep 17 00:00:00 2001 From: Wikot235 <149392035+Wikot235@users.noreply.github.com> Date: Mon, 26 May 2025 15:28:27 +0200 Subject: [PATCH 2/3] The calculations now account for resolution changes --- sp/src/game/client/hud_crosshair.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sp/src/game/client/hud_crosshair.cpp b/sp/src/game/client/hud_crosshair.cpp index 6f7476622c5..c1e24f12283 100644 --- a/sp/src/game/client/hud_crosshair.cpp +++ b/sp/src/game/client/hud_crosshair.cpp @@ -252,10 +252,13 @@ void CHudCrosshair::GetDrawPosition ( float *pX, float *pY, bool *pbBehindCamera #ifdef MAPBASE void CHudCrosshair::PaintNewCrosshair() { - int size = cl_crosshair_size.GetInt(); - int thickness = cl_crosshair_thickness.GetInt(); - int outline_thickness = cl_crosshair_outline_thickness.GetInt(); - int gap_size = cl_crosshair_gap_size.GetInt(); + float Screenratio; + Screenratio = ScreenHeight() / 1080.f; + + int size = RoundFloatToInt( cl_crosshair_size.GetInt() * Screenratio ); + int thickness = RoundFloatToInt( cl_crosshair_thickness.GetInt() * Screenratio ); + int outline_thickness = RoundFloatToInt( cl_crosshair_outline_thickness.GetInt() * Screenratio ); + int gap_size = RoundFloatToInt( cl_crosshair_gap_size.GetInt() * Screenratio ); int Crosshair0x = ScreenWidth() / 2 - thickness / 2; int Crosshair0y = ScreenHeight() / 2 - thickness / 2; From b85eaa686762863a2d6bd7f1ebf6039396c3adaa Mon Sep 17 00:00:00 2001 From: Wikot235 <149392035+Wikot235@users.noreply.github.com> Date: Mon, 26 May 2025 23:27:11 +0200 Subject: [PATCH 3/3] You can make your crosshair t-shaped --- sp/src/game/client/hud_crosshair.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/sp/src/game/client/hud_crosshair.cpp b/sp/src/game/client/hud_crosshair.cpp index c1e24f12283..fcf7cb8d5b8 100644 --- a/sp/src/game/client/hud_crosshair.cpp +++ b/sp/src/game/client/hud_crosshair.cpp @@ -39,6 +39,7 @@ ConVar cl_crosshair_size( "cl_crosshair_size", "10", FCVAR_ARCHIVE ); ConVar cl_crosshair_thickness( "cl_crosshair_thickness", "2", FCVAR_ARCHIVE ); ConVar cl_crosshair_gap_size( "cl_crosshair_gap_size", "10", FCVAR_ARCHIVE ); ConVar cl_crosshair_dot( "cl_crosshair_dot", "1", FCVAR_ARCHIVE ); +ConVar cl_crosshair_t_shape( "cl_crosshair_t_shape", "0", FCVAR_ARCHIVE ); ConVar cl_crosshair_red( "cl_crosshair_red", "255", FCVAR_ARCHIVE ); ConVar cl_crosshair_green( "cl_crosshair_green", "255", FCVAR_ARCHIVE ); @@ -293,11 +294,14 @@ void CHudCrosshair::PaintNewCrosshair() Crosshair0y + thickness + outline_thickness ); // Top - vgui::surface()->DrawFilledRect( - Crosshair0x - outline_thickness, - Crosshair0y - size - gap_size - outline_thickness, - Crosshair0x + thickness + outline_thickness, - Crosshair0y - gap_size + outline_thickness ); + if ( cl_crosshair_t_shape.GetInt() == 0 ) + { + vgui::surface()->DrawFilledRect( + Crosshair0x - outline_thickness, + Crosshair0y - size - gap_size - outline_thickness, + Crosshair0x + thickness + outline_thickness, + Crosshair0y - gap_size + outline_thickness ); + } // Down vgui::surface()->DrawFilledRect( @@ -334,11 +338,14 @@ void CHudCrosshair::PaintNewCrosshair() Crosshair0y + thickness ); // Top - vgui::surface()->DrawFilledRect( - Crosshair0x, - Crosshair0y - size - gap_size, - Crosshair0x + thickness, - Crosshair0y - gap_size ); + if ( cl_crosshair_t_shape.GetInt() == 0 ) + { + vgui::surface()->DrawFilledRect( + Crosshair0x, + Crosshair0y - size - gap_size, + Crosshair0x + thickness, + Crosshair0y - gap_size ); + } // Down vgui::surface()->DrawFilledRect(