That’s because of the way they handled the message on the client. It’s one pice of ugly code…
in CG_AddPMItem:
void CG_AddPMItem( popupMessageType_t type, const char* message, qhandle_t shader ) {
pmListItem_t* listItem;
char* end;
if( !message || !*message ) {
return;
}
listItem = CG_FindFreePMItem();
if( !listItem ) {
return;
}
if( shader ) {
listItem->shader = shader;
} else {
listItem->shader = cgs.media.pmImages[type];
}
listItem->inuse = qtrue;
listItem->type = type;
Q_strncpyz( listItem->message, message, sizeof( cg_pmStack[0].message ) );
while( end = strchr( listItem->message, '
' ) ) {
*end = '\0';
}
trap_Print( va( "%s
", listItem->message ) );
if( !cg_pmWaitingList ) {
cg_pmWaitingList = listItem;
listItem->time = cg.time;
} else {
pmListItem_t* loop = cg_pmWaitingList;
while( loop->next ) {
loop = loop->next;
}
loop->next = listItem;
}
}
Just take a look at that horrible while loop there :eek:
But I have a fix for it since I changed that code a while ago.
void CG_AddPMItem( popupMessageType_t type, const char* message, qhandle_t shader ) {
pmListItem_t* listItem;
char *start, *end;
if( !message || !*message ) {
return;
}
start = end = message;
while( end = strchr( start, '
' ) ) {
*end = '\0';
listItem = CG_FindFreePMItem();
if( !listItem ) {
return;
}
if( shader ) {
listItem->shader = shader;
} else {
listItem->shader = cgs.media.pmImages[type];
}
listItem->inuse = qtrue;
listItem->type = type;
Q_strncpyz( listItem->message, start, sizeof( cg_pmStack[0].message ) );
trap_Print( va( "%s
", listItem->message ) );
if( !cg_pmWaitingList ) {
cg_pmWaitingList = listItem;
listItem->time = cg.time;
} else {
pmListItem_t* loop = cg_pmWaitingList;
while( loop->next ) {
loop = loop->next;
}
loop->next = listItem;
}
end++;
start = end;
}
}