示例#1
0
文件: hud.c 项目: CDarrow/DXX-Retro
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;
}
示例#2
0
文件: hud.c 项目: Ringdingcoder/d1x
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
}
示例#3
0
文件: hud.c 项目: jihnsius/d2r
// 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;
}