|
|
@ -27,18 +27,22 @@ |
|
|
|
DECLARE_MESSAGE( m_Message, HudText ) |
|
|
|
DECLARE_MESSAGE( m_Message, HudText ) |
|
|
|
DECLARE_MESSAGE( m_Message, GameTitle ) |
|
|
|
DECLARE_MESSAGE( m_Message, GameTitle ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 1 Global client_textmessage_t for custom messages that aren't in the titles.txt
|
|
|
|
|
|
|
|
client_textmessage_t g_pCustomMessage; |
|
|
|
|
|
|
|
char *g_pCustomName = "Custom"; |
|
|
|
|
|
|
|
char g_pCustomText[1024]; |
|
|
|
|
|
|
|
|
|
|
|
int CHudMessage::Init(void) |
|
|
|
int CHudMessage::Init( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
HOOK_MESSAGE( HudText ); |
|
|
|
HOOK_MESSAGE( HudText ); |
|
|
|
HOOK_MESSAGE( GameTitle ); |
|
|
|
HOOK_MESSAGE( GameTitle ); |
|
|
|
|
|
|
|
|
|
|
|
gHUD.AddHudElem(this); |
|
|
|
gHUD.AddHudElem( this ); |
|
|
|
|
|
|
|
|
|
|
|
Reset(); |
|
|
|
Reset(); |
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int CHudMessage::VidInit( void ) |
|
|
|
int CHudMessage::VidInit( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -46,35 +50,33 @@ int CHudMessage::VidInit( void ) |
|
|
|
m_HUD_title_life = gHUD.GetSpriteIndex( "title_life" ); |
|
|
|
m_HUD_title_life = gHUD.GetSpriteIndex( "title_life" ); |
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CHudMessage::Reset( void ) |
|
|
|
void CHudMessage::Reset( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
memset( m_pMessages, 0, sizeof( m_pMessages[0] ) * maxHUDMessages ); |
|
|
|
memset( m_pMessages, 0, sizeof(m_pMessages[0]) * maxHUDMessages ); |
|
|
|
memset( m_startTime, 0, sizeof( m_startTime[0] ) * maxHUDMessages ); |
|
|
|
memset( m_startTime, 0, sizeof(m_startTime[0]) * maxHUDMessages ); |
|
|
|
|
|
|
|
|
|
|
|
m_gameTitleTime = 0; |
|
|
|
m_gameTitleTime = 0; |
|
|
|
m_pGameTitle = NULL; |
|
|
|
m_pGameTitle = NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
float CHudMessage::FadeBlend( float fadein, float fadeout, float hold, float localTime ) |
|
|
|
float CHudMessage::FadeBlend( float fadein, float fadeout, float hold, float localTime ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
float fadeTime = fadein + hold; |
|
|
|
float fadeTime = fadein + hold; |
|
|
|
float fadeBlend; |
|
|
|
float fadeBlend; |
|
|
|
|
|
|
|
|
|
|
|
if ( localTime < 0 ) |
|
|
|
if( localTime < 0 ) |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
if ( localTime < fadein ) |
|
|
|
if( localTime < fadein ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
fadeBlend = 1 - ((fadein - localTime) / fadein); |
|
|
|
fadeBlend = 1 - ( ( fadein - localTime ) / fadein ); |
|
|
|
} |
|
|
|
} |
|
|
|
else if ( localTime > fadeTime ) |
|
|
|
else if( localTime > fadeTime ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( fadeout > 0 ) |
|
|
|
if( fadeout > 0 ) |
|
|
|
fadeBlend = 1 - ((localTime - fadeTime) / fadeout); |
|
|
|
fadeBlend = 1 - ( ( localTime - fadeTime ) / fadeout ); |
|
|
|
else |
|
|
|
else |
|
|
|
fadeBlend = 0; |
|
|
|
fadeBlend = 0; |
|
|
|
} |
|
|
|
} |
|
|
@ -89,38 +91,37 @@ int CHudMessage::XPosition( float x, int width, int totalWidth ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int xPos; |
|
|
|
int xPos; |
|
|
|
|
|
|
|
|
|
|
|
if ( x == -1 ) |
|
|
|
if( x == -1 ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
xPos = (ScreenWidth - width) / 2; |
|
|
|
xPos = ( ScreenWidth - width ) / 2; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( x < 0 ) |
|
|
|
if( x < 0 ) |
|
|
|
xPos = (1.0 + x) * ScreenWidth - totalWidth; // Alight right
|
|
|
|
xPos = ( 1.0 + x ) * ScreenWidth - totalWidth; // Alight right
|
|
|
|
else |
|
|
|
else |
|
|
|
xPos = x * ScreenWidth; |
|
|
|
xPos = x * ScreenWidth; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ( xPos + width > ScreenWidth ) |
|
|
|
if( xPos + width > ScreenWidth ) |
|
|
|
xPos = ScreenWidth - width; |
|
|
|
xPos = ScreenWidth - width; |
|
|
|
else if ( xPos < 0 ) |
|
|
|
else if( xPos < 0 ) |
|
|
|
xPos = 0; |
|
|
|
xPos = 0; |
|
|
|
|
|
|
|
|
|
|
|
return xPos; |
|
|
|
return xPos; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int CHudMessage::YPosition( float y, int height ) |
|
|
|
int CHudMessage::YPosition( float y, int height ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int yPos; |
|
|
|
int yPos; |
|
|
|
|
|
|
|
|
|
|
|
if ( y == -1 ) // Centered?
|
|
|
|
if( y == -1 ) // Centered?
|
|
|
|
yPos = (ScreenHeight - height) * 0.5; |
|
|
|
yPos = ( ScreenHeight - height ) * 0.5; |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Alight bottom?
|
|
|
|
// Alight bottom?
|
|
|
|
if ( y < 0 ) |
|
|
|
if ( y < 0 ) |
|
|
|
yPos = (1.0 + y) * ScreenHeight - height; // Alight bottom
|
|
|
|
yPos = ( 1.0 + y ) * ScreenHeight - height; // Alight bottom
|
|
|
|
else // align top
|
|
|
|
else // align top
|
|
|
|
yPos = y * ScreenHeight; |
|
|
|
yPos = y * ScreenHeight; |
|
|
|
} |
|
|
|
} |
|
|
@ -133,10 +134,9 @@ int CHudMessage::YPosition( float y, int height ) |
|
|
|
return yPos; |
|
|
|
return yPos; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CHudMessage::MessageScanNextChar( void ) |
|
|
|
void CHudMessage::MessageScanNextChar( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int srcRed, srcGreen, srcBlue, destRed, destGreen, destBlue; |
|
|
|
int srcRed, srcGreen, srcBlue, destRed = 0, destGreen = 0, destBlue = 0; |
|
|
|
int blend; |
|
|
|
int blend; |
|
|
|
|
|
|
|
|
|
|
|
srcRed = m_parms.pMessage->r1; |
|
|
|
srcRed = m_parms.pMessage->r1; |
|
|
@ -152,10 +152,9 @@ void CHudMessage::MessageScanNextChar( void ) |
|
|
|
destRed = destGreen = destBlue = 0; |
|
|
|
destRed = destGreen = destBlue = 0; |
|
|
|
blend = m_parms.fadeBlend; |
|
|
|
blend = m_parms.fadeBlend; |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 2: |
|
|
|
case 2: |
|
|
|
m_parms.charTime += m_parms.pMessage->fadein; |
|
|
|
m_parms.charTime += m_parms.pMessage->fadein; |
|
|
|
if ( m_parms.charTime > m_parms.time ) |
|
|
|
if( m_parms.charTime > m_parms.time ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
srcRed = srcGreen = srcBlue = 0; |
|
|
|
srcRed = srcGreen = srcBlue = 0; |
|
|
|
blend = 0; // pure source
|
|
|
|
blend = 0; // pure source
|
|
|
@ -181,23 +180,22 @@ void CHudMessage::MessageScanNextChar( void ) |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if ( blend > 255 ) |
|
|
|
if( blend > 255 ) |
|
|
|
blend = 255; |
|
|
|
blend = 255; |
|
|
|
else if ( blend < 0 ) |
|
|
|
else if( blend < 0 ) |
|
|
|
blend = 0; |
|
|
|
blend = 0; |
|
|
|
|
|
|
|
|
|
|
|
m_parms.r = ((srcRed * (255-blend)) + (destRed * blend)) >> 8; |
|
|
|
m_parms.r = ( ( srcRed * ( 255 - blend ) ) + ( destRed * blend ) ) >> 8; |
|
|
|
m_parms.g = ((srcGreen * (255-blend)) + (destGreen * blend)) >> 8; |
|
|
|
m_parms.g = ( ( srcGreen * (255 - blend ) ) + ( destGreen * blend ) ) >> 8; |
|
|
|
m_parms.b = ((srcBlue * (255-blend)) + (destBlue * blend)) >> 8; |
|
|
|
m_parms.b = ( ( srcBlue * ( 255 - blend ) ) + ( destBlue * blend ) ) >> 8; |
|
|
|
|
|
|
|
|
|
|
|
if ( m_parms.pMessage->effect == 1 && m_parms.charTime != 0 ) |
|
|
|
if( m_parms.pMessage->effect == 1 && m_parms.charTime != 0 ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( m_parms.x >= 0 && m_parms.y >= 0 && (m_parms.x + gHUD.m_scrinfo.charWidths[ m_parms.text ]) <= ScreenWidth ) |
|
|
|
if( m_parms.x >= 0 && m_parms.y >= 0 && ( m_parms.x + gHUD.m_scrinfo.charWidths[m_parms.text] ) <= ScreenWidth ) |
|
|
|
TextMessageDrawChar( m_parms.x, m_parms.y, m_parms.text, m_parms.pMessage->r2, m_parms.pMessage->g2, m_parms.pMessage->b2 ); |
|
|
|
TextMessageDrawChar( m_parms.x, m_parms.y, m_parms.text, m_parms.pMessage->r2, m_parms.pMessage->g2, m_parms.pMessage->b2 ); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CHudMessage::MessageScanStart( void ) |
|
|
|
void CHudMessage::MessageScanStart( void ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
switch( m_parms.pMessage->effect ) |
|
|
|
switch( m_parms.pMessage->effect ) |
|
|
@ -208,14 +206,14 @@ void CHudMessage::MessageScanStart( void ) |
|
|
|
m_parms.fadeTime = m_parms.pMessage->fadein + m_parms.pMessage->holdtime; |
|
|
|
m_parms.fadeTime = m_parms.pMessage->fadein + m_parms.pMessage->holdtime; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( m_parms.time < m_parms.pMessage->fadein ) |
|
|
|
if( m_parms.time < m_parms.pMessage->fadein ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_parms.fadeBlend = ((m_parms.pMessage->fadein - m_parms.time) * (1.0/m_parms.pMessage->fadein) * 255); |
|
|
|
m_parms.fadeBlend = ( ( m_parms.pMessage->fadein - m_parms.time ) * ( 1.0 / m_parms.pMessage->fadein ) * 255 ); |
|
|
|
} |
|
|
|
} |
|
|
|
else if ( m_parms.time > m_parms.fadeTime ) |
|
|
|
else if( m_parms.time > m_parms.fadeTime ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( m_parms.pMessage->fadeout > 0 ) |
|
|
|
if( m_parms.pMessage->fadeout > 0 ) |
|
|
|
m_parms.fadeBlend = (((m_parms.time - m_parms.fadeTime) / m_parms.pMessage->fadeout) * 255); |
|
|
|
m_parms.fadeBlend = ( ( ( m_parms.time - m_parms.fadeTime ) / m_parms.pMessage->fadeout) * 255); |
|
|
|
else |
|
|
|
else |
|
|
|
m_parms.fadeBlend = 255; // Pure dest (off)
|
|
|
|
m_parms.fadeBlend = 255; // Pure dest (off)
|
|
|
|
} |
|
|
|
} |
|
|
@ -223,15 +221,14 @@ void CHudMessage::MessageScanStart( void ) |
|
|
|
m_parms.fadeBlend = 0; // Pure source (on)
|
|
|
|
m_parms.fadeBlend = 0; // Pure source (on)
|
|
|
|
m_parms.charTime = 0; |
|
|
|
m_parms.charTime = 0; |
|
|
|
|
|
|
|
|
|
|
|
if ( m_parms.pMessage->effect == 1 && (rand()%100) < 10 ) |
|
|
|
if( m_parms.pMessage->effect == 1 && ( rand() % 100 ) < 10 ) |
|
|
|
m_parms.charTime = 1; |
|
|
|
m_parms.charTime = 1; |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
case 2: |
|
|
|
case 2: |
|
|
|
m_parms.fadeTime = (m_parms.pMessage->fadein * m_parms.length) + m_parms.pMessage->holdtime; |
|
|
|
m_parms.fadeTime = (m_parms.pMessage->fadein * m_parms.length) + m_parms.pMessage->holdtime; |
|
|
|
|
|
|
|
|
|
|
|
if ( m_parms.time > m_parms.fadeTime && m_parms.pMessage->fadeout > 0 ) |
|
|
|
if ( m_parms.time > m_parms.fadeTime && m_parms.pMessage->fadeout > 0 ) |
|
|
|
m_parms.fadeBlend = (((m_parms.time - m_parms.fadeTime) / m_parms.pMessage->fadeout) * 255); |
|
|
|
m_parms.fadeBlend = ( ( ( m_parms.time - m_parms.fadeTime ) / m_parms.pMessage->fadeout ) * 255 ); |
|
|
|
else |
|
|
|
else |
|
|
|
m_parms.fadeBlend = 0; |
|
|
|
m_parms.fadeBlend = 0; |
|
|
|
break; |
|
|
|
break; |
|
|
@ -253,12 +250,12 @@ void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time ) |
|
|
|
length = 0; |
|
|
|
length = 0; |
|
|
|
width = 0; |
|
|
|
width = 0; |
|
|
|
m_parms.totalWidth = 0; |
|
|
|
m_parms.totalWidth = 0; |
|
|
|
while ( *pText ) |
|
|
|
while( *pText ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( *pText == '\n' ) |
|
|
|
if( *pText == '\n' ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_parms.lines++; |
|
|
|
m_parms.lines++; |
|
|
|
if ( width > m_parms.totalWidth ) |
|
|
|
if( width > m_parms.totalWidth ) |
|
|
|
m_parms.totalWidth = width; |
|
|
|
m_parms.totalWidth = width; |
|
|
|
width = 0; |
|
|
|
width = 0; |
|
|
|
} |
|
|
|
} |
|
|
@ -268,8 +265,7 @@ void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time ) |
|
|
|
length++; |
|
|
|
length++; |
|
|
|
} |
|
|
|
} |
|
|
|
m_parms.length = length; |
|
|
|
m_parms.length = length; |
|
|
|
m_parms.totalHeight = (m_parms.lines * gHUD.m_scrinfo.iCharHeight); |
|
|
|
m_parms.totalHeight = ( m_parms.lines * gHUD.m_scrinfo.iCharHeight ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_parms.y = YPosition( pMessage->y, m_parms.totalHeight ); |
|
|
|
m_parms.y = YPosition( pMessage->y, m_parms.totalHeight ); |
|
|
|
pText = pMessage->pMessage; |
|
|
|
pText = pMessage->pMessage; |
|
|
@ -278,11 +274,11 @@ void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time ) |
|
|
|
|
|
|
|
|
|
|
|
MessageScanStart(); |
|
|
|
MessageScanStart(); |
|
|
|
|
|
|
|
|
|
|
|
for ( i = 0; i < m_parms.lines; i++ ) |
|
|
|
for( i = 0; i < m_parms.lines; i++ ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_parms.lineLength = 0; |
|
|
|
m_parms.lineLength = 0; |
|
|
|
m_parms.width = 0; |
|
|
|
m_parms.width = 0; |
|
|
|
while ( *pText && *pText != '\n' ) |
|
|
|
while( *pText && *pText != '\n' ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
unsigned char c = *pText; |
|
|
|
unsigned char c = *pText; |
|
|
|
line[m_parms.lineLength] = c; |
|
|
|
line[m_parms.lineLength] = c; |
|
|
@ -295,13 +291,13 @@ void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time ) |
|
|
|
|
|
|
|
|
|
|
|
m_parms.x = XPosition( pMessage->x, m_parms.width, m_parms.totalWidth ); |
|
|
|
m_parms.x = XPosition( pMessage->x, m_parms.width, m_parms.totalWidth ); |
|
|
|
|
|
|
|
|
|
|
|
for ( j = 0; j < m_parms.lineLength; j++ ) |
|
|
|
for( j = 0; j < m_parms.lineLength; j++ ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_parms.text = line[j]; |
|
|
|
m_parms.text = line[j]; |
|
|
|
int next = m_parms.x + gHUD.m_scrinfo.charWidths[ m_parms.text ]; |
|
|
|
int next = m_parms.x + gHUD.m_scrinfo.charWidths[m_parms.text]; |
|
|
|
MessageScanNextChar(); |
|
|
|
MessageScanNextChar(); |
|
|
|
|
|
|
|
|
|
|
|
if ( m_parms.x >= 0 && m_parms.y >= 0 && next <= ScreenWidth ) |
|
|
|
if( m_parms.x >= 0 && m_parms.y >= 0 && next <= ScreenWidth ) |
|
|
|
TextMessageDrawChar( m_parms.x, m_parms.y, m_parms.text, m_parms.r, m_parms.g, m_parms.b ); |
|
|
|
TextMessageDrawChar( m_parms.x, m_parms.y, m_parms.text, m_parms.r, m_parms.g, m_parms.b ); |
|
|
|
m_parms.x = next; |
|
|
|
m_parms.x = next; |
|
|
|
} |
|
|
|
} |
|
|
@ -310,7 +306,6 @@ void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time ) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int CHudMessage::Draw( float fTime ) |
|
|
|
int CHudMessage::Draw( float fTime ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int i, drawn; |
|
|
|
int i, drawn; |
|
|
@ -319,53 +314,52 @@ int CHudMessage::Draw( float fTime ) |
|
|
|
|
|
|
|
|
|
|
|
drawn = 0; |
|
|
|
drawn = 0; |
|
|
|
|
|
|
|
|
|
|
|
if ( m_gameTitleTime > 0 ) |
|
|
|
if( m_gameTitleTime > 0 ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
float localTime = gHUD.m_flTime - m_gameTitleTime; |
|
|
|
float localTime = gHUD.m_flTime - m_gameTitleTime; |
|
|
|
float brightness; |
|
|
|
float brightness; |
|
|
|
|
|
|
|
|
|
|
|
// Maybe timer isn't set yet
|
|
|
|
// Maybe timer isn't set yet
|
|
|
|
if ( m_gameTitleTime > gHUD.m_flTime ) |
|
|
|
if( m_gameTitleTime > gHUD.m_flTime ) |
|
|
|
m_gameTitleTime = gHUD.m_flTime; |
|
|
|
m_gameTitleTime = gHUD.m_flTime; |
|
|
|
|
|
|
|
|
|
|
|
if ( localTime > (m_pGameTitle->fadein + m_pGameTitle->holdtime + m_pGameTitle->fadeout) ) |
|
|
|
if( localTime > ( m_pGameTitle->fadein + m_pGameTitle->holdtime + m_pGameTitle->fadeout ) ) |
|
|
|
m_gameTitleTime = 0; |
|
|
|
m_gameTitleTime = 0; |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
brightness = FadeBlend( m_pGameTitle->fadein, m_pGameTitle->fadeout, m_pGameTitle->holdtime, localTime ); |
|
|
|
brightness = FadeBlend( m_pGameTitle->fadein, m_pGameTitle->fadeout, m_pGameTitle->holdtime, localTime ); |
|
|
|
|
|
|
|
|
|
|
|
int halfWidth = gHUD.GetSpriteRect(m_HUD_title_half).right - gHUD.GetSpriteRect(m_HUD_title_half).left; |
|
|
|
int halfWidth = gHUD.GetSpriteRect( m_HUD_title_half ).right - gHUD.GetSpriteRect( m_HUD_title_half ).left; |
|
|
|
int fullWidth = halfWidth + gHUD.GetSpriteRect(m_HUD_title_life).right - gHUD.GetSpriteRect(m_HUD_title_life).left; |
|
|
|
int fullWidth = halfWidth + gHUD.GetSpriteRect( m_HUD_title_life ).right - gHUD.GetSpriteRect( m_HUD_title_life ).left; |
|
|
|
int fullHeight = gHUD.GetSpriteRect(m_HUD_title_half).bottom - gHUD.GetSpriteRect(m_HUD_title_half).top; |
|
|
|
int fullHeight = gHUD.GetSpriteRect( m_HUD_title_half ).bottom - gHUD.GetSpriteRect( m_HUD_title_half ).top; |
|
|
|
|
|
|
|
|
|
|
|
int x = XPosition( m_pGameTitle->x, fullWidth, fullWidth ); |
|
|
|
int x = XPosition( m_pGameTitle->x, fullWidth, fullWidth ); |
|
|
|
int y = YPosition( m_pGameTitle->y, fullHeight ); |
|
|
|
int y = YPosition( m_pGameTitle->y, fullHeight ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SPR_Set( gHUD.GetSprite( m_HUD_title_half ), brightness * m_pGameTitle->r1, brightness * m_pGameTitle->g1, brightness * m_pGameTitle->b1 ); |
|
|
|
|
|
|
|
SPR_DrawAdditive( 0, x, y, &gHUD.GetSpriteRect( m_HUD_title_half ) ); |
|
|
|
|
|
|
|
|
|
|
|
SPR_Set( gHUD.GetSprite(m_HUD_title_half), brightness * m_pGameTitle->r1, brightness * m_pGameTitle->g1, brightness * m_pGameTitle->b1 ); |
|
|
|
SPR_Set( gHUD.GetSprite( m_HUD_title_life ), brightness * m_pGameTitle->r1, brightness * m_pGameTitle->g1, brightness * m_pGameTitle->b1 ); |
|
|
|
SPR_DrawAdditive( 0, x, y, &gHUD.GetSpriteRect(m_HUD_title_half) ); |
|
|
|
SPR_DrawAdditive( 0, x + halfWidth, y, &gHUD.GetSpriteRect( m_HUD_title_life ) ); |
|
|
|
|
|
|
|
|
|
|
|
SPR_Set( gHUD.GetSprite(m_HUD_title_life), brightness * m_pGameTitle->r1, brightness * m_pGameTitle->g1, brightness * m_pGameTitle->b1 ); |
|
|
|
|
|
|
|
SPR_DrawAdditive( 0, x + halfWidth, y, &gHUD.GetSpriteRect(m_HUD_title_life) ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
drawn = 1; |
|
|
|
drawn = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// Fixup level transitions
|
|
|
|
// Fixup level transitions
|
|
|
|
for ( i = 0; i < maxHUDMessages; i++ ) |
|
|
|
for( i = 0; i < maxHUDMessages; i++ ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Assume m_parms.time contains last time
|
|
|
|
// Assume m_parms.time contains last time
|
|
|
|
if ( m_pMessages[i] ) |
|
|
|
if( m_pMessages[i] ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
pMessage = m_pMessages[i]; |
|
|
|
pMessage = m_pMessages[i]; |
|
|
|
if ( m_startTime[i] > gHUD.m_flTime ) |
|
|
|
if( m_startTime[i] > gHUD.m_flTime ) |
|
|
|
m_startTime[i] = gHUD.m_flTime + m_parms.time - m_startTime[i] + 0.2; // Server takes 0.2 seconds to spawn, adjust for this
|
|
|
|
m_startTime[i] = gHUD.m_flTime + m_parms.time - m_startTime[i] + 0.2; // Server takes 0.2 seconds to spawn, adjust for this
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for ( i = 0; i < maxHUDMessages; i++ ) |
|
|
|
for( i = 0; i < maxHUDMessages; i++ ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( m_pMessages[i] ) |
|
|
|
if( m_pMessages[i] ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
pMessage = m_pMessages[i]; |
|
|
|
pMessage = m_pMessages[i]; |
|
|
|
|
|
|
|
|
|
|
@ -379,11 +373,11 @@ int CHudMessage::Draw( float fTime ) |
|
|
|
|
|
|
|
|
|
|
|
// Fade in is per character in scanning messages
|
|
|
|
// Fade in is per character in scanning messages
|
|
|
|
case 2: |
|
|
|
case 2: |
|
|
|
endTime = m_startTime[i] + (pMessage->fadein * strlen( pMessage->pMessage )) + pMessage->fadeout + pMessage->holdtime; |
|
|
|
endTime = m_startTime[i] + ( pMessage->fadein * strlen( pMessage->pMessage ) ) + pMessage->fadeout + pMessage->holdtime; |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ( fTime <= endTime ) |
|
|
|
if( fTime <= endTime ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
float messageTime = fTime - m_startTime[i]; |
|
|
|
float messageTime = fTime - m_startTime[i]; |
|
|
|
|
|
|
|
|
|
|
@ -406,29 +400,76 @@ int CHudMessage::Draw( float fTime ) |
|
|
|
// Remember the time -- to fix up level transitions
|
|
|
|
// Remember the time -- to fix up level transitions
|
|
|
|
m_parms.time = gHUD.m_flTime; |
|
|
|
m_parms.time = gHUD.m_flTime; |
|
|
|
// Don't call until we get another message
|
|
|
|
// Don't call until we get another message
|
|
|
|
if ( !drawn ) |
|
|
|
if( !drawn ) |
|
|
|
m_iFlags &= ~HUD_ACTIVE; |
|
|
|
m_iFlags &= ~HUD_ACTIVE; |
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CHudMessage::MessageAdd( const char *pName, float time ) |
|
|
|
void CHudMessage::MessageAdd( const char *pName, float time ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
int i; |
|
|
|
int i, j; |
|
|
|
|
|
|
|
client_textmessage_t *tempMessage; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for( i = 0; i < maxHUDMessages; i++ ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if( !m_pMessages[i] ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// Trim off a leading # if it's there
|
|
|
|
|
|
|
|
if( pName[0] == '#' ) |
|
|
|
|
|
|
|
tempMessage = TextMessageGet( pName + 1 ); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
tempMessage = TextMessageGet( pName ); |
|
|
|
|
|
|
|
// If we couldnt find it in the titles.txt, just create it
|
|
|
|
|
|
|
|
if( !tempMessage ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
g_pCustomMessage.effect = 2; |
|
|
|
|
|
|
|
g_pCustomMessage.r1 = g_pCustomMessage.g1 = g_pCustomMessage.b1 = g_pCustomMessage.a1 = 100; |
|
|
|
|
|
|
|
g_pCustomMessage.r2 = 240; |
|
|
|
|
|
|
|
g_pCustomMessage.g2 = 110; |
|
|
|
|
|
|
|
g_pCustomMessage.b2 = 0; |
|
|
|
|
|
|
|
g_pCustomMessage.a2 = 0; |
|
|
|
|
|
|
|
g_pCustomMessage.x = -1; // Centered
|
|
|
|
|
|
|
|
g_pCustomMessage.y = 0.7; |
|
|
|
|
|
|
|
g_pCustomMessage.fadein = 0.01; |
|
|
|
|
|
|
|
g_pCustomMessage.fadeout = 1.5; |
|
|
|
|
|
|
|
g_pCustomMessage.fxtime = 0.25; |
|
|
|
|
|
|
|
g_pCustomMessage.holdtime = 5; |
|
|
|
|
|
|
|
g_pCustomMessage.pName = g_pCustomName; |
|
|
|
|
|
|
|
strcpy( g_pCustomText, pName ); |
|
|
|
|
|
|
|
g_pCustomMessage.pMessage = g_pCustomText; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tempMessage = &g_pCustomMessage; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for( j = 0; j < maxHUDMessages; j++ ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if( m_pMessages[j] ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// is this message already in the list
|
|
|
|
|
|
|
|
if( !strcmp( tempMessage->pMessage, m_pMessages[j]->pMessage ) ) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for ( i = 0; i < maxHUDMessages; i++ ) |
|
|
|
// get rid of any other messages in same location (only one displays at a time)
|
|
|
|
|
|
|
|
if( fabs( tempMessage->y - m_pMessages[j]->y ) < 0.0001 ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( !m_pMessages[i] ) |
|
|
|
if ( fabs( tempMessage->x - m_pMessages[j]->x ) < 0.0001 ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_pMessages[i] = TextMessageGet( pName ); |
|
|
|
m_pMessages[j] = NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_pMessages[i] = tempMessage; |
|
|
|
m_startTime[i] = time; |
|
|
|
m_startTime[i] = time; |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int CHudMessage::MsgFunc_HudText( const char *pszName, int iSize, void *pbuf ) |
|
|
|
int CHudMessage::MsgFunc_HudText( const char *pszName, int iSize, void *pbuf ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
BEGIN_READ( pbuf, iSize ); |
|
|
|
BEGIN_READ( pbuf, iSize ); |
|
|
@ -436,43 +477,43 @@ int CHudMessage::MsgFunc_HudText( const char *pszName, int iSize, void *pbuf ) |
|
|
|
char *pString = READ_STRING(); |
|
|
|
char *pString = READ_STRING(); |
|
|
|
|
|
|
|
|
|
|
|
MessageAdd( pString, gHUD.m_flTime ); |
|
|
|
MessageAdd( pString, gHUD.m_flTime ); |
|
|
|
|
|
|
|
|
|
|
|
// Remember the time -- to fix up level transitions
|
|
|
|
// Remember the time -- to fix up level transitions
|
|
|
|
m_parms.time = gHUD.m_flTime; |
|
|
|
m_parms.time = gHUD.m_flTime; |
|
|
|
|
|
|
|
|
|
|
|
// Turn on drawing
|
|
|
|
// Turn on drawing
|
|
|
|
if ( !(m_iFlags & HUD_ACTIVE) ) |
|
|
|
if( !( m_iFlags & HUD_ACTIVE ) ) |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int CHudMessage::MsgFunc_GameTitle( const char *pszName, int iSize, void *pbuf ) |
|
|
|
int CHudMessage::MsgFunc_GameTitle( const char *pszName, int iSize, void *pbuf ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_pGameTitle = TextMessageGet( "GAMETITLE" ); |
|
|
|
m_pGameTitle = TextMessageGet( "GAMETITLE" ); |
|
|
|
if ( m_pGameTitle != NULL ) |
|
|
|
if( m_pGameTitle != NULL ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_gameTitleTime = gHUD.m_flTime; |
|
|
|
m_gameTitleTime = gHUD.m_flTime; |
|
|
|
|
|
|
|
|
|
|
|
// Turn on drawing
|
|
|
|
// Turn on drawing
|
|
|
|
if ( !(m_iFlags & HUD_ACTIVE) ) |
|
|
|
if( !( m_iFlags & HUD_ACTIVE ) ) |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void CHudMessage::MessageAdd(client_textmessage_t * newMessage ) |
|
|
|
void CHudMessage::MessageAdd( client_textmessage_t * newMessage ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_parms.time = gHUD.m_flTime; |
|
|
|
m_parms.time = gHUD.m_flTime; |
|
|
|
|
|
|
|
|
|
|
|
// Turn on drawing
|
|
|
|
// Turn on drawing
|
|
|
|
if ( !(m_iFlags & HUD_ACTIVE) ) |
|
|
|
if( !( m_iFlags & HUD_ACTIVE ) ) |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
m_iFlags |= HUD_ACTIVE; |
|
|
|
|
|
|
|
|
|
|
|
for ( int i = 0; i < maxHUDMessages; i++ ) |
|
|
|
for( int i = 0; i < maxHUDMessages; i++ ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if ( !m_pMessages[i] ) |
|
|
|
if( !m_pMessages[i] ) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_pMessages[i] = newMessage; |
|
|
|
m_pMessages[i] = newMessage; |
|
|
|
m_startTime[i] = gHUD.m_flTime; |
|
|
|
m_startTime[i] = gHUD.m_flTime; |
|
|
|