static int HUD_init_message_literal_worth_showing(int class_flag, const char *message) { int i, j; // check if message is already in list and bail out if so if (HUD_nmessages > 0) { // if "normal" message, only check if it's the same at the most recent one, if marked as "may duplicate" check whole list for (i = ((class_flag & HM_MAYDUPL)?0:HUD_nmessages-1); i < HUD_nmessages; i++) { if (!d_strnicmp(message, HUD_messages[i].message, sizeof(char)*HUD_MESSAGE_LENGTH)) { HUD_messages[i].time = F1_0*2; // keep redundant message in list if (i >= HUD_nmessages-HUD_MAX_NUM_DISP) // if redundant message on display, update them all for (i = (HUD_nmessages-HUD_MAX_NUM_DISP<0?0:HUD_nmessages-HUD_MAX_NUM_DISP), j = 1; i < HUD_nmessages; i++, j++) HUD_messages[i].time = F1_0*(j*2); return 0; } } } if (HUD_nmessages >= HUD_MAX_NUM_STOR) { HUD_nmessages = HUD_MAX_NUM_STOR; // unnecessary but just in case it might be bigger... which is impossible for (i = 0; i < HUD_nmessages-1; i++) { memcpy(&HUD_messages[i], &HUD_messages[i+1], sizeof(struct hudmsg)); } } else { HUD_nmessages++; } snprintf(HUD_messages[HUD_nmessages-1].message, sizeof(char)*HUD_MESSAGE_LENGTH, "%s", message); if (HUD_nmessages-HUD_MAX_NUM_DISP < 0) HUD_messages[HUD_nmessages-1].time = F1_0*3; // one message - display 3 secs else for (i = HUD_nmessages-HUD_MAX_NUM_DISP, j = 1; i < HUD_nmessages; i++, j++) // multiple messages - display 2 seconds each HUD_messages[i].time = F1_0*(j*2); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); con_printf(CON_HUD, "%s\n", message); if (Newdemo_state == ND_STATE_RECORDING ) newdemo_record_hud_message( message ); return 1; }
void HUD_init_message(char * format, va_list args) { int temp; char *message = NULL; char *last_message=NULL; if ( (hud_last < 0) || (hud_last >= HUD_MAX_NUM)) Int3(); // Get Rob!! message = HUD_messages[hud_last]; vsprintf(message,format,args); // mprintf((/0, "Hud_message: [%s]\n", message)); //edited 8/13/98 by Geoff Coovert to save last 4 messages for hotkey recall //used with companion code above and in game.c // if ( mekh_ignore_msg == 0) // { // for (temp=0; temp < (HUD_MAX_NUM_DISP-2); temp++) // strcpy(&mekh_hud_last_msg[temp][0], &mekh_hud_last_msg[temp+1][0]); // strcpy(&mekh_hud_last_msg[HUD_MAX_NUM_DISP-2][0], message); //edited 11/01/98 - moved to hudlog.c // hud_log_message(message); //added on 10/04/98 by Matt Mueller to allow hud message logging (placed here so we don't log recalled msgs) // if (HUD_log_messages){ // time_t t; // struct tm *lt; // t=time(NULL); // lt=localtime(&t); //edited on 11/01/98 Matthew Mueller - zero pad time // printf("%2i:%02i:%02i %s\n",lt->tm_hour,lt->tm_min,lt->tm_sec,message); //end edit -MM // } //end addition -MM //end kill/edit -MM // } //Move each message back in history, then save the new msg at the front //end edit -GC 8/13 //end kill -MM if (HUD_nmessages > 0) { if (hud_last==0) last_message = HUD_messages[HUD_MAX_NUM-1]; else last_message = HUD_messages[hud_last-1]; } temp = (hud_last+1) % HUD_MAX_NUM; //added/edited 02/05/99 Matthew Mueller - message scrollback stuff if ( temp==hudlog_first ) { hudlog_first= (hudlog_first+1) % HUD_MAX_NUM; hudlog_num--; } if ( HUD_nmessages>=HUD_max_num_disp){ // If too many messages, remove oldest message to make room hud_first = (hud_first+1) % HUD_MAX_NUM; HUD_nmessages--; } if (last_message && (!strcmp(last_message, message))) { HUD_message_timer = F1_0*3; // 1 second per 5 characters return; // ignore since it is the same as the last one } hud_last = temp; // Check if memory has been overwritten at this point. if (strlen(message) >= HUD_MESSAGE_LENGTH) Error( "Your message to HUD is too long. Limit is %i characters.\n", HUD_MESSAGE_LENGTH); #ifdef NEWDEMO if (Newdemo_state == ND_STATE_RECORDING ) newdemo_record_hud_message( message ); #endif HUD_message_timer = F1_0*3; // 1 second per 5 characters HUD_nmessages++; hudlog_num++; //end edit //moved 02/09/99 Matt Mueller - moved from above to fix hudlog flooding with repeated messages - moved again 2000/01/16 to fix problem with recursive calling. hud_log_message(message); //end move -MM }
// Call to flash a message on the HUD. Returns true if message drawn. // (message might not be drawn if previous message was same) int HUD_init_message_va(int class_flag, char * format, va_list args) { int i, j; #ifndef macintosh char message[HUD_MESSAGE_LENGTH+1] = ""; #else char message[1024] = ""; #endif #ifndef macintosh vsnprintf(message, sizeof(char)*HUD_MESSAGE_LENGTH, format, args); #else vsprintf(message, format, args); #endif // check if message is already in list and bail out if so if (HUD_nmessages > 0) { // if "normal" message, only check if it's the same at the most recent one, if marked as "may duplicate" check whole list for (i = ((class_flag & HM_MAYDUPL)?0:HUD_nmessages-1); i < HUD_nmessages; i++) { if (!d_strnicmp(message, HUD_messages[i].message, sizeof(char)*HUD_MESSAGE_LENGTH)) { HUD_messages[i].time = F1_0*2; // keep redundant message in list if (i >= HUD_nmessages-HUD_MAX_NUM_DISP) // if redundant message on display, update them all for (i = (HUD_nmessages-HUD_MAX_NUM_DISP<0?0:HUD_nmessages-HUD_MAX_NUM_DISP), j = 1; i < HUD_nmessages; i++, j++) HUD_messages[i].time = F1_0*(j*2); return 0; } } } // HACK!!! // clean message if necessary. // using placeholders may mess up message string and crash game(s). // block them also to prevent attacks from other clients. for (i = 0; i <= strlen(message); i++) if (message[i] == '%') message [i] = ' '; if (HUD_nmessages >= HUD_MAX_NUM_STOR) { HUD_nmessages = HUD_MAX_NUM_STOR; // unnecessary but just in case it might be bigger... which is impossible for (i = 0; i < HUD_nmessages-1; i++) { memcpy(&HUD_messages[i], &HUD_messages[i+1], sizeof(struct hudmsg)); } } else { HUD_nmessages++; } if (class_flag != HM_CONSOLE) { snprintf(HUD_messages[HUD_nmessages-1].message, sizeof(char)*HUD_MESSAGE_LENGTH, "%s", message); if (HUD_nmessages-HUD_MAX_NUM_DISP < 0) HUD_messages[HUD_nmessages-1].time = F1_0*3; // one message - display 3 secs else for (i = HUD_nmessages-HUD_MAX_NUM_DISP, j = 1; i < HUD_nmessages; i++, j++) // multiple messages - display 2 seconds each HUD_messages[i].time = F1_0*(j*2); } // jinx 02-16-13 console time_t now; struct tm *current; now = time(0); current = localtime(&now); char h[5]; char m[5]; char s[5]; if (class_flag != HM_CONSOLE) snprintf(HUD_messages[HUD_nmessages-1].message, sizeof(char)*HUD_MESSAGE_LENGTH, "%s", message); if (current->tm_hour <= 9) sprintf(h, "0%d", current->tm_hour); if (current->tm_hour > 9) sprintf(h, "%d", current->tm_hour); if (current->tm_min <= 9) sprintf(m, "0%d", current->tm_min); if (current->tm_min > 9) sprintf(m, "%d", current->tm_min); if (current->tm_sec <= 9) sprintf(s, "0%d", current->tm_sec); if (current->tm_sec > 9) sprintf(s, "%d", current->tm_sec); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); if (HUD_color == -1) HUD_color = BM_XRGB(0,28,0); con_printf(CON_HUD, "[%s:%s:%s] %s\n", h, m, s, message); // jinx 02-16-13 console if (Newdemo_state == ND_STATE_RECORDING ) newdemo_record_hud_message( message ); return 1; }