@@ -51,7 +51,7 @@ int CHudMessage::VidInit( void )
5151
5252void CHudMessage::Reset ( void )
5353{
54- memset ( m_pMessages, 0 , sizeof ( m_pMessages[0 ] ) * maxHUDMessages );
54+ memset ( m_pMessages, 0 , sizeof ( m_pMessages[0 ] ) * maxHUDMessages );
5555 memset ( m_startTime, 0 , sizeof ( m_startTime[0 ] ) * maxHUDMessages );
5656
5757 m_gameTitleTime = 0 ;
@@ -241,7 +241,7 @@ void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time )
241241{
242242 int i, j, length, width;
243243 const char *pText;
244- unsigned char line[80 ];
244+ unsigned char line[512 ];
245245
246246 pText = pMessage->pMessage ;
247247 // Count lines
@@ -369,19 +369,19 @@ int CHudMessage::Draw( float fTime )
369369 for ( i = 0 ; i < maxHUDMessages; i++ )
370370 {
371371 // Assume m_parms.time contains last time
372- if ( m_pMessages[i] )
372+ if ( m_pMessages[i]. pMessage )
373373 {
374- pMessage = m_pMessages[i];
374+ pMessage = m_pMessages[i]. pMessage ;
375375 if ( m_startTime[i] > gHUD .m_flTime )
376376 m_startTime[i] = gHUD .m_flTime + m_parms.time - m_startTime[i] + 0.2 ; // Server takes 0.2 seconds to spawn, adjust for this
377377 }
378378 }
379379
380380 for ( i = 0 ; i < maxHUDMessages; i++ )
381381 {
382- if ( m_pMessages[i] )
382+ if ( m_pMessages[i]. pMessage )
383383 {
384- pMessage = m_pMessages[i];
384+ pMessage = m_pMessages[i]. pMessage ;
385385
386386 // This is when the message is over
387387 switch ( pMessage->effect )
@@ -414,11 +414,11 @@ int CHudMessage::Draw( float fTime )
414414 else
415415 {
416416 // The message is over
417- if ( !strcmp ( m_pMessages[i]->pName , " Custom" ) )
417+ if ( !strcmp ( m_pMessages[i]. pMessage ->pName , " Custom" ) )
418418 {
419- delete[] m_pMessages[i]->pMessage ;
419+ delete[] m_pMessages[i]. pMessage ->pMessage ;
420420 }
421- m_pMessages[i] = NULL ;
421+ m_pMessages[i]. pMessage = NULL ;
422422 }
423423 }
424424 }
@@ -433,22 +433,22 @@ int CHudMessage::Draw( float fTime )
433433}
434434
435435
436- void CHudMessage::MessageAdd ( const char *pName, float time )
436+ void CHudMessage::MessageAdd ( const char *pName, float time, qboolean hintMessage /* , unsigned int font */ )
437437{
438- int i,j;
438+ int i, j;
439439 client_textmessage_t *tempMessage;
440+ client_textmessage_t *message;
440441
441442 for ( i = 0 ; i < maxHUDMessages; i++ )
442443 {
443- if ( !m_pMessages[i] )
444+ if ( !m_pMessages[i]. pMessage )
444445 {
445446 // Trim off a leading # if it's there
446447 if ( pName[0 ] == ' #' )
447448 tempMessage = TextMessageGet ( pName+1 );
448449 else
449450 tempMessage = TextMessageGet ( pName );
450451
451- client_textmessage_t *message;
452452 if ( tempMessage )
453453 {
454454 if ( tempMessage->pMessage [0 ] == ' #' )
@@ -466,13 +466,14 @@ void CHudMessage::MessageAdd( const char *pName, float time )
466466 }
467467 else
468468 {
469+ char *localized = (char *)pName;
469470 if ( pName[0 ] == ' #' )
470471 {
471- pName = Localize ( pName + 1 );
472+ localized = ( char *) Localize ( pName + 1 );
472473 }
473474
474475 // If we couldnt find it in the titles.txt, just create it
475- message = AllocMessage ( pName );
476+ message = AllocMessage ( localized );
476477
477478 message->effect = 2 ;
478479 message->r1 = message->g1 = message->b1 = message->a1 = 100 ;
@@ -488,11 +489,46 @@ void CHudMessage::MessageAdd( const char *pName, float time )
488489 message->holdtime = 5 ;
489490 }
490491
492+ if ( message && hintMessage )
493+ {
494+ message->effect = 2 ;
495+ message->r1 = 40 ;
496+ message->g1 = 255 ;
497+ message->b1 = 40 ;
498+ message->a1 = 200 ;
499+ message->r2 = 0 ;
500+ message->g2 = 255 ;
501+ message->b2 = 0 ;
502+ message->a2 = 200 ;
503+ message->x = -1.0 ;
504+ message->y = 0.7 ;
505+ message->fadein = 0.01 ;
506+ message->fadeout = 0.7 ;
507+ message->fxtime = 0.07 ;
508+ message->holdtime = 5.0 ;
509+
510+ if ( !strcmp ( pName, " #Spec_Duck" ) )
511+ {
512+ message->holdtime = 6.0 ;
513+ }
514+ else if ( message->pMessage )
515+ {
516+ float lengthHold = (float )strlen ( message->pMessage ) / 25 .0f ;
517+ if ( lengthHold < 1 .0f )
518+ lengthHold = 1 .0f ;
519+ message->holdtime = lengthHold;
520+ }
521+ else
522+ {
523+ message->holdtime = 1.0 ;
524+ }
525+ }
526+
491527 // safety check - don't add empty messages
492- if ( !message->pMessage || message->pMessage [0 ] == ' \0 ' )
528+ if ( !message || !message ->pMessage || message->pMessage [0 ] == ' \0 ' )
493529 {
494530 // clean up custom messages
495- if ( !strcmp (message->pName , " Custom" ) )
531+ if ( message && !strcmp (message->pName , " Custom" ) )
496532 {
497533 delete[] message->pMessage ;
498534 }
@@ -501,10 +537,10 @@ void CHudMessage::MessageAdd( const char *pName, float time )
501537
502538 for ( j = 0 ; j < maxHUDMessages; j++ )
503539 {
504- if ( m_pMessages[j] )
540+ if ( m_pMessages[j]. pMessage )
505541 {
506542 // is this message already in the list
507- if ( !strcmp ( message->pMessage , m_pMessages[j]->pMessage ) )
543+ if ( !strcmp ( message->pMessage , m_pMessages[j]. pMessage ->pMessage ) )
508544 {
509545 if ( !strcmp ( message->pName , " Custom" ) )
510546 {
@@ -514,18 +550,19 @@ void CHudMessage::MessageAdd( const char *pName, float time )
514550 }
515551
516552 // get rid of any other messages in same location (only one displays at a time)
517- if ( fabs ( message->y - m_pMessages[j]->y ) < 0.0001 && fabs ( message->x - m_pMessages[j]->x ) < 0.0001 )
553+ if ( fabs ( message->y - m_pMessages[j]. pMessage ->y ) < 0.0001 && fabs ( message->x - m_pMessages[j]. pMessage ->x ) < 0.0001 )
518554 {
519- if ( !strcmp ( m_pMessages[j]->pName , " Custom" ) )
555+ if ( !strcmp ( m_pMessages[j]. pMessage ->pName , " Custom" ) )
520556 {
521- delete[] m_pMessages[j]->pMessage ;
557+ delete[] m_pMessages[j]. pMessage ->pMessage ;
522558 }
523- m_pMessages[j] = NULL ;
559+ m_pMessages[j]. pMessage = NULL ;
524560 }
525561 }
526562 }
527563
528- m_pMessages[i] = message;
564+ m_pMessages[i].pMessage = message;
565+ // m_pMessages[i].font = font;
529566 m_startTime[i] = time;
530567 return ;
531568 }
@@ -584,9 +621,9 @@ void CHudMessage::MessageAdd(client_textmessage_t * newMessage )
584621
585622 for ( int i = 0 ; i < maxHUDMessages; i++ )
586623 {
587- if ( !m_pMessages[i] )
624+ if ( !m_pMessages[i]. pMessage )
588625 {
589- m_pMessages[i] = message;
626+ m_pMessages[i]. pMessage = message;
590627 m_startTime[i] = gHUD .m_flTime ;
591628 return ;
592629 }
@@ -598,12 +635,12 @@ void CHudMessage::MessageAdd(client_textmessage_t * newMessage )
598635int CHudMessage::MsgFunc_HudTextPro ( const char *pszName, int iSize, void *pbuf )
599636{
600637 const char *sz;
601- int hint ;
638+ qboolean hintMessage ;
602639 BufferReader reader ( pszName, pbuf, iSize );
603640 sz = reader.ReadString ();
604- hint = reader.ReadByte ();
641+ hintMessage = reader.ReadByte ();
605642
606- MessageAdd (sz, gHUD .m_flTime /* , hint, Newfont*/ ); // TODO
643+ MessageAdd (sz, gHUD .m_flTime , hintMessage /* , Newfont*/ ); // TODO
607644
608645 // Remember the time -- to fix up level transitions
609646 m_parms.time = gHUD .m_flTime ;
@@ -615,19 +652,47 @@ int CHudMessage::MsgFunc_HudTextPro( const char *pszName, int iSize, void *pbuf
615652
616653int CHudMessage::MsgFunc_HudTextArgs ( const char *pszName, int iSize, void *pbuf )
617654{
618- /* BufferReader reader( pszName, pbuf, iSize );
655+ BufferReader reader ( pszName, pbuf, iSize );
619656
620657 const char *sz = reader.ReadString ();
621- int hint = reader.ReadByte();
658+ qboolean hintMessage = reader.ReadByte ();
659+
660+ MessageAdd ( sz, gHUD .m_flTime , hintMessage/* , Newfont*/ ); // TODO
661+
662+ int slot = -1 ;
663+ for ( int i = 0 ; i < maxHUDMessages; i++ )
664+ {
665+ if ( m_pMessages[i].pMessage && m_startTime[i] == gHUD .m_flTime )
666+ {
667+ slot = i;
668+ break ;
669+ }
670+ }
622671
623- MessageAdd(sz, gHUD.m_flTime, hint, Newfont); // TODO
672+ if ( slot != -1 )
673+ {
674+ int argCount = reader.ReadByte ();
675+ if ( argCount > 4 ) argCount = 4 ;
676+ if ( argCount < 0 ) argCount = 0 ;
677+
678+ m_pMessages[slot].arg_count = argCount;
679+
680+ for ( int i = 0 ; i < argCount; i++ )
681+ {
682+ const char *arg = reader.ReadString ();
683+ if ( !arg ) arg = " " ;
684+
685+ const char *localizedArg = Localize ( arg );
686+ strncpy ( m_pMessages[slot].args [i], localizedArg, 128 );
687+ m_pMessages[slot].args [i][127 ] = 0 ;
688+ }
689+ }
624690
625691 // Remember the time -- to fix up level transitions
626692 m_parms.time = gHUD .m_flTime ;
627693
628694 // Turn on drawing
629- if ( !(m_iFlags & HUD_ACTIVE) )
630- m_iFlags |= HUD_ACTIVE;*/
695+ m_iFlags |= HUD_DRAW;
631696
632697 return 1 ;
633698}
0 commit comments