02 Jan 2009
This commit is contained in:
parent
0f05fe9101
commit
1e6aee5a7b
|
@ -69,7 +69,8 @@ inline void CL_PlaySound( int iSound, float flVolume, Vector &pos )
|
|||
#define RANDOM_LONG (*g_engfuncs.pfnRandomLong)
|
||||
#define RANDOM_FLOAT (*g_engfuncs.pfnRandomFloat)
|
||||
#define LOAD_FILE (*g_engfuncs.pfnLoadFile)
|
||||
#define FREE_FILE (*g_engfuncs.pfnFreeFile)
|
||||
#define FILE_EXISTS (*g_engfuncs.pfnFileExists)
|
||||
#define FREE_FILE FREE
|
||||
#define GET_GAME_DIR (*g_engfuncs.pfnGetGameDir)
|
||||
#define HOST_ERROR (*g_engfuncs.pfnHostError)
|
||||
|
||||
|
|
|
@ -73,6 +73,8 @@ void CHud :: VidInit( void )
|
|||
m_hsprCursor = 0;
|
||||
m_hHudError = 0;
|
||||
|
||||
Draw_VidInit();
|
||||
|
||||
// setup screen info
|
||||
m_scrinfo.iWidth = CVAR_GET_FLOAT( "width" );
|
||||
m_scrinfo.iHeight = CVAR_GET_FLOAT( "height" );
|
||||
|
@ -86,7 +88,7 @@ void CHud :: VidInit( void )
|
|||
if ( !m_pSpriteList )
|
||||
{
|
||||
// we need to load the hud.txt, and all sprites within
|
||||
m_pSpriteList = SPR_GetList( "scripts/hud.shader", &m_iSpriteCount );
|
||||
m_pSpriteList = SPR_GetList( "scripts/hud.txt", &m_iSpriteCount );
|
||||
|
||||
if( m_pSpriteList )
|
||||
{
|
||||
|
@ -118,7 +120,7 @@ void CHud :: VidInit( void )
|
|||
client_sprite_t *p = m_pSpriteList;
|
||||
for( int j = 0; j < m_iSpriteCount; j++ )
|
||||
{
|
||||
m_rghSprites[j] = SPR_Load( p->szName );
|
||||
m_rghSprites[j] = SPR_Load( p->szSprite );
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,62 +25,13 @@
|
|||
|
||||
WEAPON *gpActiveSel; // NULL means off, 1 means just the menu bar, otherwise
|
||||
WEAPON *gpLastSel; // Last weapon menu selection
|
||||
client_sprite_t *GetSpriteList( client_sprite_t *pList, const char *psz, int iCount );
|
||||
WeaponsResource gWR;
|
||||
int g_weaponselect = 0;
|
||||
|
||||
void WeaponsResource :: LoadWeaponSprite( WEAPON *pWeapon, const char *type )
|
||||
{
|
||||
if( !pWeapon ) return;
|
||||
|
||||
// fmt <weapon_shotgun::crosshair>
|
||||
HSPRITE hSprite = LOAD_SHADER( va( "%s::%s\n", pWeapon->szName, type ));
|
||||
|
||||
if( !strcmp( type, "crosshair" ))
|
||||
{
|
||||
pWeapon->hCrosshair = hSprite;
|
||||
pWeapon->rcCrosshair = gHUD.GetSpriteRect( hSprite );
|
||||
}
|
||||
else if( !strcmp( type, "autoaim" ))
|
||||
{
|
||||
pWeapon->hAutoaim = hSprite;
|
||||
pWeapon->rcAutoaim = gHUD.GetSpriteRect( hSprite );
|
||||
}
|
||||
else if( !strcmp( type, "zoom" ))
|
||||
{
|
||||
pWeapon->hZoomedCrosshair = hSprite;
|
||||
pWeapon->rcZoomedCrosshair = gHUD.GetSpriteRect( hSprite );
|
||||
}
|
||||
else if( !strcmp( type, "zoom_autoaim" ))
|
||||
{
|
||||
pWeapon->hZoomedAutoaim = hSprite;
|
||||
pWeapon->rcZoomedAutoaim = gHUD.GetSpriteRect( hSprite );
|
||||
}
|
||||
else if( !strcmp( type, "weapon" ))
|
||||
{
|
||||
pWeapon->hInactive = hSprite;
|
||||
pWeapon->rcInactive = gHUD.GetSpriteRect( hSprite );
|
||||
gHR.iHistoryGap = max( gHR.iHistoryGap, pWeapon->rcActive.bottom - pWeapon->rcActive.top );
|
||||
}
|
||||
else if( !strcmp( type, "weapon_s" ))
|
||||
{
|
||||
pWeapon->hActive = hSprite;
|
||||
pWeapon->rcActive = gHUD.GetSpriteRect( hSprite );
|
||||
}
|
||||
else if( !strcmp( type, "ammo" ))
|
||||
{
|
||||
pWeapon->hAmmo = hSprite;
|
||||
pWeapon->rcAmmo = gHUD.GetSpriteRect( hSprite );
|
||||
}
|
||||
else if( !strcmp( type, "ammo2" ))
|
||||
{
|
||||
pWeapon->hAmmo2 = hSprite;
|
||||
pWeapon->rcAmmo2 = gHUD.GetSpriteRect( hSprite );
|
||||
}
|
||||
}
|
||||
|
||||
void WeaponsResource :: LoadAllWeaponSprites( void )
|
||||
{
|
||||
for (int i = 0; i < MAX_WEAPONS; i++)
|
||||
for( int i = 0; i < MAX_WEAPONS; i++ )
|
||||
{
|
||||
if ( rgWeapons[i].iId ) LoadWeaponSprites( &rgWeapons[i] );
|
||||
}
|
||||
|
@ -111,6 +62,9 @@ void WeaponsResource :: LoadWeaponSprites( WEAPON *pWeapon )
|
|||
{
|
||||
if( !pWeapon ) return;
|
||||
|
||||
int i;
|
||||
char sz[256];
|
||||
|
||||
memset( &pWeapon->rcActive, 0, sizeof( wrect_t ));
|
||||
memset( &pWeapon->rcInactive, 0, sizeof( wrect_t ));
|
||||
memset( &pWeapon->rcAmmo, 0, sizeof( wrect_t ));
|
||||
|
@ -119,16 +73,98 @@ void WeaponsResource :: LoadWeaponSprites( WEAPON *pWeapon )
|
|||
pWeapon->hActive = 0;
|
||||
pWeapon->hAmmo = 0;
|
||||
pWeapon->hAmmo2 = 0;
|
||||
|
||||
sprintf( sz, "scripts/weapons/%s.txt", pWeapon->szName );
|
||||
client_sprite_t *pList = SPR_GetList( sz, &i );
|
||||
|
||||
if( !pList ) return;
|
||||
|
||||
client_sprite_t *p;
|
||||
|
||||
p = GetSpriteList( pList, "crosshair", i );
|
||||
if( p )
|
||||
{
|
||||
pWeapon->hCrosshair = p->hSprite;
|
||||
pWeapon->rcCrosshair = p->rc;
|
||||
}
|
||||
else pWeapon->hCrosshair = 0;
|
||||
|
||||
p = GetSpriteList( pList, "autoaim", i );
|
||||
if( p )
|
||||
{
|
||||
pWeapon->hAutoaim = p->hSprite;
|
||||
pWeapon->rcAutoaim = p->rc;
|
||||
}
|
||||
else pWeapon->hAutoaim = 0;
|
||||
|
||||
p = GetSpriteList( pList, "zoom", i );
|
||||
if( p )
|
||||
{
|
||||
pWeapon->hZoomedCrosshair = p->hSprite;
|
||||
pWeapon->rcZoomedCrosshair = p->rc;
|
||||
}
|
||||
else
|
||||
{
|
||||
pWeapon->hZoomedCrosshair = pWeapon->hCrosshair; // default to non-zoomed crosshair
|
||||
pWeapon->rcZoomedCrosshair = pWeapon->rcCrosshair;
|
||||
}
|
||||
|
||||
p = GetSpriteList( pList, "zoom_autoaim", i );
|
||||
if( p )
|
||||
{
|
||||
pWeapon->hZoomedAutoaim = p->hSprite;
|
||||
pWeapon->rcZoomedAutoaim = p->rc;
|
||||
}
|
||||
else
|
||||
{
|
||||
pWeapon->hZoomedAutoaim = pWeapon->hZoomedCrosshair; // default to zoomed crosshair
|
||||
pWeapon->rcZoomedAutoaim = pWeapon->rcZoomedCrosshair;
|
||||
}
|
||||
|
||||
p = GetSpriteList( pList, "weapon", i );
|
||||
if( p )
|
||||
{
|
||||
pWeapon->hInactive = p->hSprite;
|
||||
pWeapon->rcInactive = p->rc;
|
||||
gHR.iHistoryGap = max( gHR.iHistoryGap, pWeapon->rcActive.bottom - pWeapon->rcActive.top );
|
||||
}
|
||||
else
|
||||
{
|
||||
pWeapon->hInactive = gHUD.m_hHudError;
|
||||
pWeapon->rcInactive = gHUD.GetSpriteRect( gHUD.m_HUD_error );
|
||||
gHR.iHistoryGap = max( gHR.iHistoryGap, pWeapon->rcActive.bottom - pWeapon->rcActive.top );
|
||||
}
|
||||
|
||||
p = GetSpriteList( pList, "weapon_s", i );
|
||||
if( p )
|
||||
{
|
||||
pWeapon->hActive = p->hSprite;
|
||||
pWeapon->rcActive = p->rc;
|
||||
}
|
||||
else
|
||||
{
|
||||
pWeapon->hActive = gHUD.m_hHudError;
|
||||
pWeapon->rcActive = gHUD.GetSpriteRect( gHUD.m_HUD_error );
|
||||
}
|
||||
|
||||
p = GetSpriteList( pList, "ammo", i );
|
||||
if( p )
|
||||
{
|
||||
pWeapon->hAmmo = p->hSprite;
|
||||
pWeapon->rcAmmo = p->rc;
|
||||
gHR.iHistoryGap = max( gHR.iHistoryGap, pWeapon->rcActive.bottom - pWeapon->rcActive.top );
|
||||
}
|
||||
else pWeapon->hAmmo = 0;
|
||||
|
||||
p = GetSpriteList( pList, "ammo2", i );
|
||||
if( p )
|
||||
{
|
||||
pWeapon->hAmmo2 = p->hSprite;
|
||||
pWeapon->rcAmmo2 = p->rc;
|
||||
gHR.iHistoryGap = max( gHR.iHistoryGap, pWeapon->rcActive.bottom - pWeapon->rcActive.top );
|
||||
}
|
||||
else pWeapon->hAmmo2 = 0;
|
||||
|
||||
// find specified shaders
|
||||
LoadWeaponSprite( pWeapon, "crosshair" );
|
||||
LoadWeaponSprite( pWeapon, "autoaim" );
|
||||
LoadWeaponSprite( pWeapon, "zoom" );
|
||||
LoadWeaponSprite( pWeapon, "zoom_autoaim" );
|
||||
LoadWeaponSprite( pWeapon, "weapon" );
|
||||
LoadWeaponSprite( pWeapon, "weapon_s" );
|
||||
LoadWeaponSprite( pWeapon, "ammo" );
|
||||
LoadWeaponSprite( pWeapon, "ammo2" );
|
||||
}
|
||||
|
||||
// Returns the first weapon for a given slot.
|
||||
|
@ -1186,4 +1222,29 @@ int CHudAmmoSecondary :: MsgFunc_SecAmmoVal( const char *pszName, int iSize, voi
|
|||
END_READ();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
=================================
|
||||
GetSpriteList
|
||||
|
||||
Finds and returns the matching
|
||||
sprite name 'psz' in the given sprite list 'pList'
|
||||
iCount is the number of items in the pList
|
||||
=================================
|
||||
*/
|
||||
client_sprite_t *GetSpriteList( client_sprite_t *pList, const char *psz, int iCount )
|
||||
{
|
||||
if( !pList ) return NULL;
|
||||
|
||||
int i = iCount;
|
||||
client_sprite_t *p = pList;
|
||||
|
||||
while( i-- )
|
||||
{
|
||||
if( !strcmp( psz, p->szName ))
|
||||
return p;
|
||||
p++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
|
@ -76,7 +76,6 @@ public:
|
|||
|
||||
WEAPON* GetWeaponSlot( int slot, int pos ) { return rgSlots[slot][pos]; }
|
||||
|
||||
void LoadWeaponSprite( WEAPON *p, const char *type );
|
||||
void LoadWeaponSprites( WEAPON* wp );
|
||||
void LoadAllWeaponSprites( void );
|
||||
WEAPON* GetFirstPos( int iSlot );
|
||||
|
|
|
@ -25,8 +25,7 @@
|
|||
DECLARE_MESSAGE( m_Health, Health )
|
||||
DECLARE_MESSAGE( m_Health, Damage )
|
||||
|
||||
#define PAIN_NAME "hud_pain"
|
||||
#define DAMAGE_NAME "sprites/%d_dmg.spr"
|
||||
#define PAIN_NAME "sprites/pain.spr"
|
||||
|
||||
int giDmgHeight, giDmgWidth;
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ typedef struct rect_s
|
|||
typedef struct client_sprite_s
|
||||
{
|
||||
char szName[64]; // shader name and sprite name are matched
|
||||
char szSprite[64];
|
||||
HSPRITE hSprite;
|
||||
wrect_t rc;
|
||||
} client_sprite_t;
|
||||
|
@ -149,6 +150,7 @@ extern int SPR_Frames( HSPRITE hPic );
|
|||
extern int SPR_Height( HSPRITE hPic, int frame );
|
||||
extern int SPR_Width( HSPRITE hPic, int frame );
|
||||
extern client_sprite_t *SPR_GetList( const char *name, int *count );
|
||||
extern void ParseHudSprite( const char **pfile, char *psz, client_sprite_t *result );
|
||||
extern void SPR_Set( HSPRITE hPic, int r, int g, int b );
|
||||
extern void SPR_Draw( int frame, int x, int y, const wrect_t *prc );
|
||||
extern void SPR_Draw( int frame, int x, int y, int width, int height );
|
||||
|
@ -165,6 +167,7 @@ extern void DrawImageBar( float percent, HSPRITE hImage, int w, int h );
|
|||
extern void DrawImageBar( float percent, HSPRITE hImage, int x, int y, int w, int h );
|
||||
extern void DrawGenericBar( float percent, int w, int h );
|
||||
extern void DrawGenericBar( float percent, int x, int y, int w, int h );
|
||||
extern void Draw_VidInit( void );
|
||||
|
||||
// from cl_view.c
|
||||
extern void V_RenderSplash( void );
|
||||
|
|
|
@ -44,7 +44,7 @@ int CHudTrain::VidInit( void )
|
|||
int CHudTrain::Draw(float fTime)
|
||||
{
|
||||
if( !m_hSprite )
|
||||
m_hSprite = LOAD_SHADER( "hud_train" );
|
||||
m_hSprite = SPR_Load( "sprites/train.spr" );
|
||||
|
||||
if( m_iPos )
|
||||
{
|
||||
|
|
|
@ -208,6 +208,87 @@ int SPR_Width( HSPRITE hPic, int frame )
|
|||
return Width;
|
||||
}
|
||||
|
||||
void Draw_VidInit( void )
|
||||
{
|
||||
memset( &ds, 0, sizeof( ds ));
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
SPRITE_GetList
|
||||
|
||||
====================
|
||||
*/
|
||||
void ParseHudSprite( const char **pfile, char *psz, client_sprite_t *result )
|
||||
{
|
||||
int x = 0, y = 0, width = 0, height = 0;
|
||||
client_sprite_t p;
|
||||
int section = 0;
|
||||
char *token;
|
||||
|
||||
memset( &p, 0, sizeof( client_sprite_t ));
|
||||
|
||||
while(( token = COM_ParseToken( pfile )) != NULL )
|
||||
{
|
||||
if( !stricmp( token, psz ))
|
||||
{
|
||||
token = COM_ParseToken( pfile );
|
||||
if( !stricmp( token, "{" )) section = 1;
|
||||
}
|
||||
if( section ) // parse section
|
||||
{
|
||||
if( !stricmp( token, "}" )) break; // end section
|
||||
|
||||
if( !stricmp( token, "file" ))
|
||||
{
|
||||
token = COM_ParseToken( pfile );
|
||||
strncpy( p.szSprite, token, 64 );
|
||||
|
||||
// fill structure at default
|
||||
p.hSprite = SPR_Load( p.szSprite );
|
||||
width = SPR_Width( p.hSprite, 0 );
|
||||
height = SPR_Height( p.hSprite, 0 );
|
||||
x = y = 0;
|
||||
}
|
||||
else if ( !stricmp( token, "name" ))
|
||||
{
|
||||
token = COM_ParseToken( pfile );
|
||||
strncpy( p.szName, token, 64 );
|
||||
}
|
||||
else if ( !stricmp( token, "x" ))
|
||||
{
|
||||
token = COM_ParseToken( pfile );
|
||||
x = atoi( token );
|
||||
}
|
||||
else if ( !stricmp( token, "y" ))
|
||||
{
|
||||
token = COM_ParseToken( pfile );
|
||||
y = atoi( token );
|
||||
}
|
||||
else if ( !stricmp( token, "width" ))
|
||||
{
|
||||
token = COM_ParseToken( pfile );
|
||||
width = atoi( token );
|
||||
}
|
||||
else if ( !stricmp( token, "height" ))
|
||||
{
|
||||
token = COM_ParseToken( pfile );
|
||||
height = atoi( token );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( !section ) return; // data not found
|
||||
|
||||
// calculate sprite position
|
||||
p.rc.left = x;
|
||||
p.rc.right = x + width;
|
||||
p.rc.top = y;
|
||||
p.rc.bottom = y + height;
|
||||
|
||||
memcpy( result, &p, sizeof( client_sprite_t ));
|
||||
}
|
||||
|
||||
client_sprite_t *SPR_GetList( const char *psz, int *piCount )
|
||||
{
|
||||
char *pfile = (char *)LOAD_FILE( psz, NULL );
|
||||
|
@ -227,33 +308,24 @@ client_sprite_t *SPR_GetList( const char *psz, int *piCount )
|
|||
{
|
||||
if( !stricmp( token, "{" )) depth++;
|
||||
else if( !stricmp( token, "}" )) depth--;
|
||||
else if( depth == 0 ) iSprCount++;
|
||||
else if( depth == 0 && !strcmp( token, "hudsprite" ))
|
||||
iSprCount++;
|
||||
}
|
||||
|
||||
client_sprite_t *phud, *p;
|
||||
client_sprite_t *phud;
|
||||
plist = pfile;
|
||||
|
||||
phud = p = new client_sprite_t[iSprCount];
|
||||
phud = new client_sprite_t[iSprCount];
|
||||
|
||||
if( depth != 0 ) ALERT( at_console, "hud.sprite EOF without closing brace\n" );
|
||||
depth = 0;
|
||||
|
||||
while(( token = COM_ParseToken( &plist )) != NULL )
|
||||
if( depth != 0 ) ALERT( at_console, "%s EOF without closing brace\n", psz );
|
||||
|
||||
for( int i = 0; i < iSprCount; i++ ) //parse structures
|
||||
{
|
||||
if( !stricmp( token, "{" )) depth++;
|
||||
else if( !stricmp( token, "}" )) depth--;
|
||||
else if( depth == 0 )
|
||||
{
|
||||
strncpy( p->szName, token, sizeof( p->szName ));
|
||||
p->hSprite = SPR_Load( p->szName );
|
||||
p->rc.left = p->rc.top = 0;
|
||||
GetImageSize( &p->rc.right, &p->rc.bottom, 0, p->hSprite );
|
||||
p++;
|
||||
}
|
||||
ParseHudSprite( &plist, "hudsprite", &phud[i] );
|
||||
}
|
||||
|
||||
if( !iSprCount ) ALERT( at_console, "SPR_GetList: %s doesn't have sprites\n", psz );
|
||||
FREE_FILE( pfile );
|
||||
|
||||
if( !iSprCount ) ALERT( at_console, "SPR_GetList: %s doesn't have sprites\n", psz );
|
||||
FREE_FILE( pfile );
|
||||
|
||||
*piCount = iSprCount;
|
||||
return phud;
|
||||
|
|
|
@ -25,11 +25,11 @@ int CHudRedeemer::Init( void )
|
|||
|
||||
int CHudRedeemer :: VidInit( void )
|
||||
{
|
||||
m_hSprite = LOAD_SHADER( "wh_readout" );
|
||||
m_hCrosshair = LOAD_SHADER( "wh_guidedx");
|
||||
m_hStatic = LOAD_SHADER( "wh_static");
|
||||
m_hCamera = LOAD_SHADER( "wh_camera");
|
||||
m_hCamRec = LOAD_SHADER( "wh_cam_rec");
|
||||
m_hCrosshair = SPR_Load( "sprites/guidedx.spr" );
|
||||
m_hSprite = SPR_Load( "sprites/readout.spr" );
|
||||
m_hCamRec = SPR_Load( "sprites/cam_rec.spr" );
|
||||
m_hStatic = SPR_Load( "sprites/static.spr" );
|
||||
m_hCamera = SPR_Load( "sprites/camera.spr" );
|
||||
|
||||
m_iHudMode = 0;
|
||||
return 1;
|
||||
|
@ -57,7 +57,6 @@ int CHudRedeemer :: Draw( float flTime )
|
|||
|
||||
if( m_iHudMode == 1 ) // draw crosshair and readout
|
||||
{
|
||||
|
||||
y = (ScreenWidth - GUIDE_S) / 2;
|
||||
x = (ScreenHeight - GUIDE_S) / 2;
|
||||
|
||||
|
|
|
@ -38,8 +38,8 @@ int CHudZoom :: Init( void )
|
|||
|
||||
int CHudZoom::VidInit( void )
|
||||
{
|
||||
m_hLines = LOAD_SHADER( "sniper_lines" );
|
||||
m_hCrosshair = LOAD_SHADER( "sniper_zoom" );
|
||||
m_hLines = SPR_Load( "sprites/snlines.spr" );
|
||||
m_hCrosshair = SPR_Load( "sprites/snzoom.spr" );
|
||||
m_iHudMode = 0;
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -951,7 +951,7 @@ static cl_enginefuncs_t gEngfuncs =
|
|||
pfnRandomLong,
|
||||
pfnRandomFloat,
|
||||
pfnLoadFile,
|
||||
pfnFreeFile,
|
||||
pfnFileExists,
|
||||
pfnGetGameDir,
|
||||
Host_Error,
|
||||
&gTriApi
|
||||
|
|
|
@ -323,6 +323,7 @@ void SCR_DrawFPS( void )
|
|||
float *color;
|
||||
|
||||
if( cls.state != ca_active ) return;
|
||||
if( !cl_showfps->integer ) return;
|
||||
|
||||
newtime = Sys_DoubleTime();
|
||||
if (newtime >= nexttime)
|
||||
|
|
|
@ -476,7 +476,7 @@ void pfnGetGameDir( char *szGetGameDir );
|
|||
long pfnRandomLong( long lLow, long lHigh );
|
||||
float pfnRandomFloat( float flLow, float flHigh );
|
||||
byte* pfnLoadFile( const char *filename, int *pLength );
|
||||
void pfnFreeFile( void *buffer );
|
||||
int pfnFileExists( const char *filename );
|
||||
|
||||
_inline edict_t *CL_EDICT_NUM( int n, const char *file, const int line )
|
||||
{
|
||||
|
|
|
@ -31,6 +31,17 @@ void pfnFreeFile( void *buffer )
|
|||
if( buffer ) Mem_Free( buffer );
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnFileExists
|
||||
|
||||
=============
|
||||
*/
|
||||
int pfnFileExists( const char *filename )
|
||||
{
|
||||
return FS_FileExists( filename );
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnRandomLong
|
||||
|
|
|
@ -212,7 +212,7 @@ typedef struct cl_enginefuncs_s
|
|||
long (*pfnRandomLong)( long lLow, long lHigh );
|
||||
float (*pfnRandomFloat)( float flLow, float flHigh );
|
||||
byte* (*pfnLoadFile)( const char *filename, int *pLength );
|
||||
void (*pfnFreeFile)( void *buffer );
|
||||
int (*pfnFileExists)( const char *filename );
|
||||
void (*pfnGetGameDir)( char *szGetGameDir );
|
||||
void (*pfnHostError)( const char *szFmt, ... ); // invoke host error
|
||||
|
||||
|
|
|
@ -175,13 +175,13 @@ void CBaseBrush::PlayRandomSound( edict_t *pEdict, Materials soundMaterial, floa
|
|||
|
||||
void CBaseBrush :: AxisDir( void )
|
||||
{
|
||||
//make backward compatibility
|
||||
if ( pev->movedir != g_vecZero) return;
|
||||
// make backward compatibility
|
||||
if( pev->movedir != g_vecZero ) return;
|
||||
|
||||
//Don't change this!
|
||||
if ( FBitSet(pev->spawnflags, SF_BRUSH_ROTATE_Z_AXIS))
|
||||
// don't change this!
|
||||
if( FBitSet(pev->spawnflags, SF_BRUSH_ROTATE_Z_AXIS ))
|
||||
pev->movedir = Vector ( 0, 0, 1 ); // around z-axis
|
||||
else if ( FBitSet(pev->spawnflags, SF_BRUSH_ROTATE_X_AXIS))
|
||||
else if( FBitSet(pev->spawnflags, SF_BRUSH_ROTATE_X_AXIS ))
|
||||
pev->movedir = Vector ( 1, 0, 0 ); // around x-axis
|
||||
else pev->movedir = Vector ( 0, 1, 0 ); // around y-axis
|
||||
}
|
||||
|
@ -204,18 +204,18 @@ void CBaseBrush::KeyValue( KeyValueData* pkvd )
|
|||
pev->health = atof(pkvd->szValue);
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else if (FStrEq(pkvd->szKeyName, "spawnobject") )
|
||||
else if( FStrEq( pkvd->szKeyName, "spawnobject" ))
|
||||
{
|
||||
int namelen = strlen(pkvd->szValue) - 1;
|
||||
int obj = atoi( pkvd->szValue );
|
||||
|
||||
//custom spawn object
|
||||
if(namelen > 2) m_iSpawnObject = ALLOC_STRING( pkvd->szValue );
|
||||
// custom spawn object
|
||||
if( namelen > 2 ) m_iSpawnObject = ALLOC_STRING( pkvd->szValue );
|
||||
else if ( obj > 0 && obj < ARRAYSIZE(pSpawnObjects))
|
||||
m_iSpawnObject = MAKE_STRING( pSpawnObjects[obj] );
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else if (FStrEq(pkvd->szKeyName, "gibmodel"))
|
||||
else if (FStrEq( pkvd->szKeyName, "gibmodel" ))
|
||||
{
|
||||
m_iGibModel = ALLOC_STRING(pkvd->szValue);
|
||||
pkvd->fHandled = TRUE;
|
||||
|
@ -228,38 +228,33 @@ void CBaseBrush::KeyValue( KeyValueData* pkvd )
|
|||
if (m_flVolume < 0.0) m_flVolume = 0.0;
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else if (FStrEq(pkvd->szKeyName, "movesound") || FStrEq(pkvd->szKeyName, "movesnd"))
|
||||
else if( FStrEq( pkvd->szKeyName, "movesound" ))
|
||||
{
|
||||
m_iMoveSound = ALLOC_STRING(pkvd->szValue);
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else if (FStrEq(pkvd->szKeyName, "stopsound") || FStrEq(pkvd->szKeyName, "stopsnd"))
|
||||
else if( FStrEq( pkvd->szKeyName, "stopsound" ))
|
||||
{
|
||||
m_iStopSound = ALLOC_STRING(pkvd->szValue);
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else if (FStrEq(pkvd->szKeyName, "contents"))
|
||||
{
|
||||
pev->skin = atoi(pkvd->szValue);
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else CBaseLogic::KeyValue( pkvd );
|
||||
else CBaseLogic::KeyValue( pkvd );
|
||||
}
|
||||
|
||||
//Base functions
|
||||
TYPEDESCRIPTION CBaseBrush::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CBaseBrush, m_flVolume, FIELD_FLOAT ), //volume of sounds
|
||||
DEFINE_FIELD( CBaseBrush, m_pitch, FIELD_FLOAT ), //pitch of sound
|
||||
DEFINE_FIELD( CBaseBrush, m_Material, FIELD_INTEGER ), //brush material
|
||||
DEFINE_FIELD( CBaseBrush, m_iMagnitude, FIELD_INTEGER ), //explosion magnitude
|
||||
DEFINE_FIELD( CBaseBrush, m_iMoveSound, FIELD_STRING ), //sound scheme like Quake
|
||||
DEFINE_FIELD( CBaseBrush, m_iStartSound, FIELD_STRING ), //sound scheme like Quake
|
||||
DEFINE_FIELD( CBaseBrush, m_iStopSound, FIELD_STRING ), //sound scheme like Quake
|
||||
DEFINE_FIELD( CBaseBrush, m_iSpawnObject, FIELD_STRING ), //spawnobject index
|
||||
DEFINE_FIELD( CBaseBrush, m_iGibModel, FIELD_STRING ), //custom gibname
|
||||
DEFINE_FIELD( CBaseBrush, m_vecPlayerPos, FIELD_VECTOR ), //for controllable entity like tank
|
||||
DEFINE_FIELD( CBaseBrush, m_pController, FIELD_CLASSPTR ), //for controllable entity like tank
|
||||
DEFINE_FIELD( CBaseBrush, m_flVolume, FIELD_FLOAT ), // volume of sounds
|
||||
DEFINE_FIELD( CBaseBrush, m_pitch, FIELD_FLOAT ), // pitch of sound
|
||||
DEFINE_FIELD( CBaseBrush, m_Material, FIELD_INTEGER ), // brush material
|
||||
DEFINE_FIELD( CBaseBrush, m_iMagnitude, FIELD_INTEGER ), // explosion magnitude
|
||||
DEFINE_FIELD( CBaseBrush, m_iMoveSound, FIELD_STRING ), // sound scheme like Quake
|
||||
DEFINE_FIELD( CBaseBrush, m_iStartSound, FIELD_STRING ), // sound scheme like Quake
|
||||
DEFINE_FIELD( CBaseBrush, m_iStopSound, FIELD_STRING ), // sound scheme like Quake
|
||||
DEFINE_FIELD( CBaseBrush, m_iSpawnObject, FIELD_STRING ), // spawnobject index
|
||||
DEFINE_FIELD( CBaseBrush, m_iGibModel, FIELD_STRING ), // custom gibname
|
||||
DEFINE_FIELD( CBaseBrush, m_vecPlayerPos, FIELD_VECTOR ), // for controllable entity like tank
|
||||
DEFINE_FIELD( CBaseBrush, m_pController, FIELD_CLASSPTR ), // for controllable entity like tank
|
||||
};
|
||||
IMPLEMENT_SAVERESTORE( CBaseBrush, CBaseLogic );
|
||||
|
||||
|
@ -267,16 +262,16 @@ void CBaseBrush::Spawn( void )
|
|||
{
|
||||
Precache();
|
||||
|
||||
if (!m_flVolume)m_flVolume = 1.0;//just enable full volume
|
||||
if( !m_flVolume ) m_flVolume = 1.0;//just enable full volume
|
||||
|
||||
//breacable brush (if mapmaker just set material - just play material sound)
|
||||
if(IsBreakable())
|
||||
pev->takedamage = DAMAGE_YES;
|
||||
else pev->takedamage = DAMAGE_NO;
|
||||
// breacable brush (if mapmaker just set material - just play material sound)
|
||||
if( IsBreakable())
|
||||
pev->takedamage = DAMAGE_YES;
|
||||
else pev->takedamage = DAMAGE_NO;
|
||||
|
||||
pev->solid = SOLID_BSP;
|
||||
pev->movetype = MOVETYPE_PUSH;
|
||||
if (!m_pParent)pev->flags |= FL_WORLDBRUSH;
|
||||
if( !m_pParent ) pev->flags |= FL_WORLDBRUSH;
|
||||
}
|
||||
|
||||
void CBaseBrush::Precache( void )
|
||||
|
@ -358,10 +353,10 @@ void CBaseBrush::Precache( void )
|
|||
MaterialSoundPrecache( m_Material );
|
||||
if(IsBreakable())
|
||||
{
|
||||
m_idShard = UTIL_PrecacheModel( m_iGibModel, (char*)pGibName );//precache model
|
||||
if(m_iSpawnObject)UTIL_PrecacheEntity( m_iSpawnObject );
|
||||
m_idShard = UTIL_PrecacheModel( m_iGibModel, (char*)pGibName ); // precache model
|
||||
if( m_iSpawnObject ) UTIL_PrecacheEntity( m_iSpawnObject );
|
||||
}
|
||||
UTIL_PrecacheModel( pev->model );//can use *.mdl for any brush
|
||||
UTIL_PrecacheModel( pev->model ); // can use *.mdl for any brush
|
||||
}
|
||||
|
||||
void CBaseBrush :: DamageSound( void )
|
||||
|
|
|
@ -1641,17 +1641,17 @@ float TEXTURETYPE_PlaySound(TraceResult *ptr, Vector vecSrc, Vector vecEnd, int
|
|||
cnt = 4;
|
||||
break;
|
||||
case CHAR_TEX_WOOD: fvol = 0.9; fvolbar = 0.2;
|
||||
rgsz[0] = "debris/wood1.wav";
|
||||
rgsz[1] = "debris/wood2.wav";
|
||||
rgsz[2] = "debris/wood3.wav";
|
||||
rgsz[0] = "materials/wood/wood1.wav";
|
||||
rgsz[1] = "materials/wood/wood2.wav";
|
||||
rgsz[2] = "materials/wood/wood3.wav";
|
||||
cnt = 3;
|
||||
break;
|
||||
case CHAR_TEX_GLASS:
|
||||
case CHAR_TEX_COMPUTER:
|
||||
fvol = 0.8; fvolbar = 0.2;
|
||||
rgsz[0] = "debris/glass1.wav";
|
||||
rgsz[1] = "debris/glass2.wav";
|
||||
rgsz[2] = "debris/glass3.wav";
|
||||
rgsz[0] = "materials/glass/glass1.wav";
|
||||
rgsz[1] = "materials/glass/glass2.wav";
|
||||
rgsz[2] = "materials/glass/glass3.wav";
|
||||
cnt = 3;
|
||||
break;
|
||||
case CHAR_TEX_FLESH:
|
||||
|
|
Reference in New Issue