o Added custom crosshairs

o cvar cl_customcrosshair 0|1|2|3, default 0, any other value forces default
o Option added to advanced options
o Multiple resolutions supported, if an xhair isn't available for the configured resolution, the next lowest available sprite is used.
o Fully backwards compatible with 3.1 crosshair files.


git-svn-id: https://unknownworlds.svn.cloudforge.com/ns1@409 67975925-1194-0748-b3d5-c16f83f1a3a1
This commit is contained in:
puzl 2006-04-25 19:22:46 +00:00
parent 41e438d26a
commit 88f1ac3034
7 changed files with 151 additions and 31 deletions

View file

@ -26,6 +26,7 @@
#include "ammohistory.h"
#include "vgui_TeamFortressViewport.h"
#include "mod/AvHClientVariables.h"
#include "mod/AvHSharedUtil.h"
#include "mod/AvHScrollHandler.h"
#include "mod/AvHNetworkMessages.h"
@ -119,12 +120,21 @@ inline void LoadWeaponSprite( client_sprite_t* ptr, HSPRITE& sprite, wrect_t& bo
void WeaponsResource :: LoadWeaponSprites( WEAPON *pWeapon )
{
int i, iRes;
int resolutions[5] = { 320, 640, 800, 1024, 1280 };
const int numRes=5;
int i=0, j=0, iRes=320;
int screenWidth=ScreenWidth();
if (ScreenWidth() < 640)
iRes = 320;
else
iRes = 640;
for ( j=0; j < numRes; j++ ) {
if ( screenWidth == resolutions[j] ) {
iRes=resolutions[j];
break;
}
if ( i > 0 && screenWidth > resolutions[j-1] && screenWidth < resolutions[j] ) {
iRes=resolutions[j-1];
break;
}
}
char sz[128];
@ -149,31 +159,50 @@ void WeaponsResource :: LoadWeaponSprites( WEAPON *pWeapon )
return;
}
LoadWeaponSprite( GetSpriteList( pList, "crosshair", iRes, i ), pWeapon->hCrosshair, pWeapon->rcCrosshair );
LoadWeaponSprite( GetSpriteList( pList, "autoaim", iRes, i ), pWeapon->hAutoaim, pWeapon->rcAutoaim );
LoadWeaponSprite( GetSpriteList( pList, "zoom", iRes, i ), pWeapon->hZoomedCrosshair, pWeapon->rcZoomedCrosshair );
LoadWeaponSprite( GetSpriteList( pList, "zoom_autoaim", iRes, i ), pWeapon->hZoomedAutoaim, pWeapon->rcZoomedAutoaim );
LoadWeaponSprite( GetSpriteList( pList, "weapon", iRes, i ), pWeapon->hInactive, pWeapon->rcInactive );
LoadWeaponSprite( GetSpriteList( pList, "weapon_s", iRes, i ), pWeapon->hActive, pWeapon->rcActive );
LoadWeaponSprite( GetSpriteList( pList, "ammo", iRes, i ), pWeapon->hAmmo, pWeapon->rcAmmo );
LoadWeaponSprite( GetSpriteList( pList, "ammo2", iRes, i ), pWeapon->hAmmo2, pWeapon->rcAmmo2 );
for ( j=numRes-1; j>=0; j-- ) {
if ( resolutions[j] <= iRes ) {
if( pWeapon->hCrosshair == NULL )
LoadWeaponSprite( GetSpriteList( pList, "crosshair", resolutions[j], i ), pWeapon->hCrosshair, pWeapon->rcCrosshair );
if( pWeapon->hCrosshair1 == NULL )
LoadWeaponSprite( GetSpriteList( pList, "crosshair_1", resolutions[j], i ), pWeapon->hCrosshair1, pWeapon->rcCrosshair1 );
if( pWeapon->hCrosshair2 == NULL )
LoadWeaponSprite( GetSpriteList( pList, "crosshair_2", resolutions[j], i ), pWeapon->hCrosshair2, pWeapon->rcCrosshair2 );
if( pWeapon->hCrosshair3 == NULL )
LoadWeaponSprite( GetSpriteList( pList, "crosshair_3", resolutions[j], i ), pWeapon->hCrosshair3, pWeapon->rcCrosshair3 );
if( pWeapon->hInactive == NULL )
LoadWeaponSprite( GetSpriteList( pList, "weapon", resolutions[j], i ), pWeapon->hInactive, pWeapon->rcInactive );
if( pWeapon->hActive == NULL )
LoadWeaponSprite( GetSpriteList( pList, "weapon_s", resolutions[j], i ), pWeapon->hActive, pWeapon->rcActive );
if( pWeapon->hAmmo == NULL )
LoadWeaponSprite( GetSpriteList( pList, "ammo", resolutions[j], i ), pWeapon->hAmmo, pWeapon->rcAmmo );
if( pWeapon->hAmmo2 == NULL )
LoadWeaponSprite( GetSpriteList( pList, "ammo2", resolutions[j], i ), pWeapon->hAmmo2, pWeapon->rcAmmo2 );
}
}
if( pWeapon->hZoomedCrosshair == NULL ) //default to non-zoomed crosshair
if( pWeapon->hCrosshair1 == NULL ) //default
{
pWeapon->hZoomedCrosshair = pWeapon->hCrosshair;
pWeapon->rcZoomedCrosshair = pWeapon->rcCrosshair;
pWeapon->hCrosshair1 = pWeapon->hCrosshair;
pWeapon->rcCrosshair1 = pWeapon->rcCrosshair;
}
if( pWeapon->hAutoaim == NULL ) //default to non-autoaim crosshair
if( pWeapon->hCrosshair2 == NULL ) //default
{
pWeapon->hAutoaim = pWeapon->hCrosshair;
pWeapon->rcAutoaim = pWeapon->rcCrosshair;
pWeapon->hCrosshair2 = pWeapon->hCrosshair;
pWeapon->rcCrosshair2 = pWeapon->rcCrosshair;
}
if( pWeapon->hZoomedAutoaim == NULL ) //default to non-autoaim zoomed crosshair
if( pWeapon->hCrosshair3 == NULL ) //default
{
pWeapon->hZoomedAutoaim = pWeapon->hZoomedCrosshair;
pWeapon->rcZoomedAutoaim = pWeapon->rcZoomedCrosshair;
pWeapon->hCrosshair3 = pWeapon->hCrosshair;
pWeapon->rcCrosshair3 = pWeapon->rcCrosshair;
}
if( pWeapon->hActive || pWeapon->hInactive || pWeapon->hAmmo || pWeapon->hAmmo2 )
@ -597,6 +626,7 @@ void CHudAmmo::Reset(void)
gWR.Reset();
gHR.Reset();
m_customCrosshair=0;
// VidInit();
}
@ -634,6 +664,7 @@ int CHudAmmo::VidInit(void)
// Think:
// Used for selection of weapon menu item.
//
void CHudAmmo::Think(void)
{
if ( gHUD.m_fPlayerDead )
@ -657,6 +688,29 @@ void CHudAmmo::Think(void)
}
}
}
if ( (int)CVAR_GET_FLOAT(kvCustomCrosshair) != m_customCrosshair ) {
m_customCrosshair=(int)CVAR_GET_FLOAT(kvCustomCrosshair);
WEAPON* currentWeapon = gWR.GetWeapon(gHUD.GetCurrentWeaponID());
if ( currentWeapon ) {
switch (m_customCrosshair) {
case 0:
gHUD.SetCurrentCrosshair(currentWeapon->hCrosshair, currentWeapon->rcCrosshair, 255, 255, 255);
break;
case 1:
gHUD.SetCurrentCrosshair(currentWeapon->hCrosshair1, currentWeapon->rcCrosshair1, 255, 255, 255);
break;
case 2:
gHUD.SetCurrentCrosshair(currentWeapon->hCrosshair2, currentWeapon->rcCrosshair2, 255, 255, 255);
break;
case 3:
gHUD.SetCurrentCrosshair(currentWeapon->hCrosshair3, currentWeapon->rcCrosshair3, 255, 255, 255);
break;
default:
gHUD.SetCurrentCrosshair(currentWeapon->hCrosshair, currentWeapon->rcCrosshair, 255, 255, 255);
break;
}
}
}
if(gHUD.GetIsAlien()) //check for hive death causing loss of current weapon
{
@ -805,7 +859,25 @@ int CHudAmmo::MsgFunc_CurWeapon(const char *pszName, int iSize, void *pbuf )
if ( !(gHUD.m_iHideHUDDisplay & ( HIDEHUD_WEAPONS | HIDEHUD_ALL )) )
{
if ( gHUD.m_iFOV >= 90 )
switch ((int)CVAR_GET_FLOAT(kvCustomCrosshair)) {
case 0:
gHUD.SetCurrentCrosshair(m_pWeapon->hCrosshair, m_pWeapon->rcCrosshair, 255, 255, 255);
break;
case 1:
gHUD.SetCurrentCrosshair(m_pWeapon->hCrosshair1, m_pWeapon->rcCrosshair1, 255, 255, 255);
break;
case 2:
gHUD.SetCurrentCrosshair(m_pWeapon->hCrosshair2, m_pWeapon->rcCrosshair2, 255, 255, 255);
break;
case 3:
gHUD.SetCurrentCrosshair(m_pWeapon->hCrosshair3, m_pWeapon->rcCrosshair3, 255, 255, 255);
break;
default:
gHUD.SetCurrentCrosshair(m_pWeapon->hCrosshair, m_pWeapon->rcCrosshair, 255, 255, 255);
break;
}
/* if ( gHUD.m_iFOV >= 90 )
{ // normal crosshairs
if (bOnTarget && m_pWeapon->hAutoaim)
gHUD.SetCurrentCrosshair(m_pWeapon->hAutoaim, m_pWeapon->rcAutoaim, 255, 255, 255);
@ -818,7 +890,7 @@ int CHudAmmo::MsgFunc_CurWeapon(const char *pszName, int iSize, void *pbuf )
gHUD.SetCurrentCrosshair(m_pWeapon->hZoomedAutoaim, m_pWeapon->rcZoomedAutoaim, 255, 255, 255);
else
gHUD.SetCurrentCrosshair(m_pWeapon->hZoomedCrosshair, m_pWeapon->rcZoomedCrosshair, 255, 255, 255);
}
}*/
}
m_fFade = 200.0f; //!!!

View file

@ -48,12 +48,20 @@ struct WEAPON
wrect_t rcAmmo2;
HSPRITE hCrosshair;
wrect_t rcCrosshair;
HSPRITE hAutoaim;
HSPRITE hCrosshair1;
wrect_t rcCrosshair1;
HSPRITE hCrosshair2;
wrect_t rcCrosshair2;
HSPRITE hCrosshair3;
wrect_t rcCrosshair3;
/* HSPRITE hAutoaim;
wrect_t rcAutoaim;
HSPRITE hZoomedCrosshair;
wrect_t rcZoomedCrosshair;
HSPRITE hZoomedAutoaim;
wrect_t rcZoomedAutoaim;
*/
};
typedef int AMMO;

View file

@ -113,6 +113,7 @@ private:
WEAPON *m_pWeapon;
int m_HUD_bucket0;
int m_HUD_selection;
int m_customCrosshair;
};
@ -357,7 +358,7 @@ public:
void Reset( void );
int MsgFunc_Flashlight(const char *pszName, int iSize, void *pbuf );
int MsgFunc_FlashBat(const char *pszName, int iSize, void *pbuf );
private:
HSPRITE m_hSprite1;
HSPRITE m_hSprite2;

View file

@ -209,7 +209,7 @@ void CHud :: Init( void )
CVAR_CREATE( "cl_showspeed", "0", 0);
CVAR_CREATE( kvLabelMaps, "1", FCVAR_ARCHIVE);
CVAR_CREATE( kvGammaRamp, "1", FCVAR_ARCHIVE);
CVAR_CREATE( kvCustomCrosshair, "0", FCVAR_ARCHIVE);
CVAR_CREATE( "cl_iconr", "0", FCVAR_ARCHIVE);
CVAR_CREATE( "cl_icong", "149", FCVAR_ARCHIVE);
CVAR_CREATE( "cl_iconb", "221", FCVAR_ARCHIVE);

View file

@ -39,7 +39,8 @@ extern cvar_t* cl_musicdir;
#define kvLabelMaps "cl_labelmaps"
// :puzl
// tankefugl: 0001070 - enables forced gamma ramp loading
#define kvGammaRamp "cl_gammaramp"
#define kvGammaRamp "cl_gammaramp"
#define kvCustomCrosshair "cl_customcrosshair"
// :tankefugl
#define kvCMHotKeys "cl_cmhotkeys"
#define kvForceDefaultFOV "cl_forcedefaultfov"

View file

@ -1,11 +1,36 @@
10
35
weapon 320 320w 160 0 80 20
weapon_s 320 320w-s 160 0 80 20
ammo 320 640hud7 48 72 24 24
crosshair 320 xhairmg 0 0 64 64
autoaim 320 crosshairs 0 72 24 24
crosshair_1 320 xhairmg 0 0 64 64
crosshair_2 320 xhairmg 0 0 64 64
crosshair_3 320 xhairmg 0 0 64 64
weapon 640 640mw2 0 180 170 45
weapon_s 640 640mw2-s 0 180 170 45
ammo 640 640hud7 48 72 24 24
crosshair 640 xhairmg 0 0 64 64
autoaim 640 crosshairs 0 72 24 24
crosshair_1 640 xhairmg 0 0 64 64
crosshair_2 640 xhairmg 0 0 64 64
crosshair_3 640 xhairmg 0 0 64 64
weapon 800 640mw2 0 180 170 45
weapon_s 800 640mw2-s 0 180 170 45
ammo 800 640hud7 48 72 24 24
crosshair 800 xhairmg 0 0 64 64
crosshair_1 800 xhairmg 0 0 64 64
crosshair_2 800 xhairmg 0 0 64 64
crosshair_3 800 xhairmg 0 0 64 64
weapon 1024 640mw2 0 180 170 45
weapon_s 1024 640mw2-s 0 180 170 45
ammo 1024 640hud7 48 72 24 24
crosshair 1024 xhairmg 0 0 64 64
crosshair_1 1024 xhairmg 0 0 64 64
crosshair_2 1024 xhairmg 0 0 64 64
crosshair_3 1024 xhairmg 0 0 64 64
weapon 1280 640mw2 0 180 170 45
weapon_s 1280 640mw2-s 0 180 170 45
ammo 1280 640hud7 48 72 24 24
crosshair 1280 xhairmg 0 0 64 64
crosshair_1 1280 xhairmg 0 0 64 64
crosshair_2 1280 xhairmg 0 0 64 64
crosshair_3 1280 xhairmg 0 0 64 64

View file

@ -56,6 +56,19 @@ DESCRIPTION INFO_OPTIONS
{ "1" }
}
"cl_customxhair"
{
"Choose your crosshair"
{
LIST
"Default" "0"
"Custom 1" "1"
"Custom 2" "2"
"Custom 3" "3"
}
{ "0.000000" }
}
"cl_centerentityid"
{
"Center player names"