Merge branch 'chat-changes' into 'master'

Chat changes

See merge request KartKrew/Kart!26
This commit is contained in:
Sal 2018-10-05 11:47:45 -04:00
commit 10c194d95b
2 changed files with 69 additions and 34 deletions

View file

@ -435,7 +435,7 @@ static void DoSayCommand(SINT8 target, size_t usedargs, UINT8 flags)
numwords = COM_Argc() - usedargs; numwords = COM_Argc() - usedargs;
I_Assert(numwords > 0); I_Assert(numwords > 0);
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer))) // TODO: Per Player mute. if (CHAT_MUTE) // TODO: Per Player mute.
{ {
HU_AddChatText(va("%s>ERROR: The chat is muted. You can't say anything.", "\x85")); HU_AddChatText(va("%s>ERROR: The chat is muted. You can't say anything.", "\x85"));
return; return;
@ -567,8 +567,11 @@ static void Command_Sayteam_f(void)
CONS_Alert(CONS_NOTICE, M_GetText("Dedicated servers can't send team messages. Use \"say\".\n")); CONS_Alert(CONS_NOTICE, M_GetText("Dedicated servers can't send team messages. Use \"say\".\n"));
return; return;
} }
DoSayCommand(-1, 1, 0); if (G_GametypeHasTeams()) // revert to normal say if we don't have teams in this gametype.
DoSayCommand(-1, 1, 0);
else
DoSayCommand(0, 1, 0);
} }
/** Send a message to everyone, to be displayed by CECHO. Only /** Send a message to everyone, to be displayed by CECHO. Only
@ -721,7 +724,20 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
{ {
cstart = "\x86"; // grey name cstart = "\x86"; // grey name
textcolor = "\x86"; textcolor = "\x86";
} }
else if (target == -1) // say team
{
if (players[playernum].ctfteam == 1) // red
{
cstart = "\x85";
textcolor = "\x85";
}
else // blue
{
cstart = "\x84";
textcolor = "\x84";
}
}
else else
{ {
const UINT8 color = players[playernum].skincolor; const UINT8 color = players[playernum].skincolor;
@ -783,13 +799,8 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
// '\4' makes the message yellow and beeps; '\3' just beeps. // '\4' makes the message yellow and beeps; '\3' just beeps.
if (action) if (action)
{ {
fmt = "\3* %s%s%s%s \x82%s\n"; // don't make /me yellow, yellow will be for mentions and PMs! fmt = "\3* %s%s%s%s \x82%s%s\n"; // don't make /me yellow, yellow will be for mentions and PMs!
fmt2 = "* %s%s%s%s \x82%s"; fmt2 = "* %s%s%s%s \x82%s%s";
}
else if (target == 0) // To everyone
{
fmt = "\3%s<%s%s%s>\x80 %s%s\n";
fmt2 = "%s<%s%s%s>\x80 %s%s";
} }
else if (target-1 == consoleplayer) // To you else if (target-1 == consoleplayer) // To you
{ {
@ -809,7 +820,12 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
fmt2 = "%s<%s%s>%s\x80 %s%s"; fmt2 = "%s<%s%s>%s\x80 %s%s";
} }
else // To your team else // To everyone or sayteam, it doesn't change anything.
{
fmt = "\3%s<%s%s%s>\x80 %s%s\n";
fmt2 = "%s<%s%s%s>\x80 %s%s";
}
/*else // To your team
{ {
if (players[playernum].ctfteam == 1) // red if (players[playernum].ctfteam == 1) // red
prefix = "\x85[TEAM]"; prefix = "\x85[TEAM]";
@ -820,8 +836,7 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum)
fmt = "\3%s<%s%s>\x80%s %s%s\n"; fmt = "\3%s<%s%s>\x80%s %s%s\n";
fmt2 = "%s<%s%s>\x80%s %s%s"; fmt2 = "%s<%s%s>\x80%s %s%s";
}*/
}
HU_AddChatText(va(fmt2, prefix, cstart, dispname, cend, textcolor, msg)); // add it reguardless, in case we decide to change our mind about our chat type. HU_AddChatText(va(fmt2, prefix, cstart, dispname, cend, textcolor, msg)); // add it reguardless, in case we decide to change our mind about our chat type.
@ -950,7 +965,7 @@ static void HU_queueChatChar(INT32 c)
c_input = 0; c_input = 0;
// last minute mute check // last minute mute check
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer))) if (CHAT_MUTE)
{ {
HU_AddChatText(va("%s>ERROR: The chat is muted. You can't say anything.", "\x85")); HU_AddChatText(va("%s>ERROR: The chat is muted. You can't say anything.", "\x85"));
return; return;
@ -1043,20 +1058,18 @@ static boolean justscrolledup;
boolean HU_Responder(event_t *ev) boolean HU_Responder(event_t *ev)
{ {
INT32 c=0; INT32 c=0;
if (ev->type != ev_keydown) if (ev->type != ev_keydown)
return false; return false;
// only KeyDown events now... // only KeyDown events now...
if (!chat_on) if (!chat_on)
{ {
// enter chat mode // enter chat mode
if ((ev->data1 == gamecontrol[gc_talkkey][0] || ev->data1 == gamecontrol[gc_talkkey][1]) if ((ev->data1 == gamecontrol[gc_talkkey][0] || ev->data1 == gamecontrol[gc_talkkey][1])
&& netgame && (!cv_mute.value || server || (IsPlayerAdmin(consoleplayer)))) && netgame && !OLD_MUTE) // check for old chat mute, still let the players open the chat incase they want to scroll otherwise.
{ {
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
return false;
chat_on = true; chat_on = true;
w_chat[0] = 0; w_chat[0] = 0;
teamtalk = false; teamtalk = false;
@ -1064,20 +1077,18 @@ boolean HU_Responder(event_t *ev)
return true; return true;
} }
if ((ev->data1 == gamecontrol[gc_teamkey][0] || ev->data1 == gamecontrol[gc_teamkey][1]) if ((ev->data1 == gamecontrol[gc_teamkey][0] || ev->data1 == gamecontrol[gc_teamkey][1])
&& netgame && (!cv_mute.value || server || (IsPlayerAdmin(consoleplayer)))) && netgame && !OLD_MUTE)
{ {
if (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer)))
return false;
chat_on = true; chat_on = true;
w_chat[0] = 0; w_chat[0] = 0;
teamtalk = true; teamtalk = G_GametypeHasTeams(); // Don't teamtalk if we don't have teams.
chat_scrollmedown = true; chat_scrollmedown = true;
return true; return true;
} }
} }
else // if chat_on else // if chat_on
{ {
// Ignore modifier keys // Ignore modifier keys
// Note that we do this here so users can still set // Note that we do this here so users can still set
// their chat keys to one of these, if they so desire. // their chat keys to one of these, if they so desire.
@ -1105,7 +1116,7 @@ boolean HU_Responder(event_t *ev)
// TODO: make chat behave like the console, so that we can go back and edit stuff when we fuck up. // TODO: make chat behave like the console, so that we can go back and edit stuff when we fuck up.
// pasting. pasting is cool. chat is a bit limited, though :( // pasting. pasting is cool. chat is a bit limited, though :(
if ((c == 'v' || c == 'V') && ctrldown) if (((c == 'v' || c == 'V') && ctrldown) && !CHAT_MUTE)
{ {
const char *paste = I_ClipboardPaste(); const char *paste = I_ClipboardPaste();
@ -1145,7 +1156,7 @@ boolean HU_Responder(event_t *ev)
} }
} }
if (HU_keyInChatString(w_chat,c)) if (!CHAT_MUTE && HU_keyInChatString(w_chat,c))
{ {
HU_queueChatChar(c); HU_queueChatChar(c);
} }
@ -1160,21 +1171,21 @@ boolean HU_Responder(event_t *ev)
chat_on = false; chat_on = false;
c_input = 0; // reset input cursor c_input = 0; // reset input cursor
} }
else if ((c == KEY_UPARROW || c == KEY_MOUSEWHEELUP) && chat_scroll > 0) // CHAT SCROLLING YAYS! else if ((c == KEY_UPARROW || c == KEY_MOUSEWHEELUP) && chat_scroll > 0 && !OLDCHAT) // CHAT SCROLLING YAYS!
{ {
chat_scroll--; chat_scroll--;
justscrolledup = true; justscrolledup = true;
chat_scrolltime = 4; chat_scrolltime = 4;
} }
else if ((c == KEY_DOWNARROW || c == KEY_MOUSEWHEELDOWN) && chat_scroll < chat_maxscroll && chat_maxscroll > 0) else if ((c == KEY_DOWNARROW || c == KEY_MOUSEWHEELDOWN) && chat_scroll < chat_maxscroll && chat_maxscroll > 0 && !OLDCHAT)
{ {
chat_scroll++; chat_scroll++;
justscrolleddown = true; justscrolleddown = true;
chat_scrolltime = 4; chat_scrolltime = 4;
} }
else if (c == KEY_LEFTARROW && c_input != 0) // i said go back else if (c == KEY_LEFTARROW && c_input != 0 && !OLDCHAT) // i said go back
c_input--; c_input--;
else if (c == KEY_RIGHTARROW && c_input < strlen(w_chat)) else if (c == KEY_RIGHTARROW && c_input < strlen(w_chat) && !OLDCHAT) // don't need to check for admin or w/e here since the chat won't ever contain anything if it's muted.
c_input++; c_input++;
return true; return true;
} }
@ -1485,8 +1496,10 @@ static void HU_DrawChat(void)
INT32 charwidth = 4, charheight = 6; INT32 charwidth = 4, charheight = 6;
INT32 t = 0, c = 0, y = chaty - (typelines*charheight) - (cv_kartspeedometer.value ? 16 : 0); INT32 t = 0, c = 0, y = chaty - (typelines*charheight) - (cv_kartspeedometer.value ? 16 : 0);
UINT32 i = 0, saylen = strlen(w_chat); // You learn new things everyday! UINT32 i = 0, saylen = strlen(w_chat); // You learn new things everyday!
INT32 cflag = 0;
const char *ntalk = "Say: ", *ttalk = "Team: "; const char *ntalk = "Say: ", *ttalk = "Team: ";
const char *talk = ntalk; const char *talk = ntalk;
const char *mute = "Chat has been muted.";
if (teamtalk) if (teamtalk)
{ {
@ -1498,7 +1511,14 @@ static void HU_DrawChat(void)
t = 0x400; // Blue t = 0x400; // Blue
#endif #endif
} }
if (CHAT_MUTE)
{
talk = mute;
typelines = 1;
cflag = V_GRAYMAP; // set text in gray if chat is muted.
}
V_DrawFillConsoleMap(chatx, y-1, cv_chatwidth.value, (typelines*charheight), 239 | V_SNAPTOBOTTOM | V_SNAPTOLEFT); V_DrawFillConsoleMap(chatx, y-1, cv_chatwidth.value, (typelines*charheight), 239 | V_SNAPTOBOTTOM | V_SNAPTOLEFT);
while (talk[i]) while (talk[i])
@ -1506,11 +1526,21 @@ static void HU_DrawChat(void)
if (talk[i] < HU_FONTSTART) if (talk[i] < HU_FONTSTART)
++i; ++i;
else else
V_DrawChatCharacter(chatx + c + 2, y, talk[i++] |V_SNAPTOBOTTOM|V_SNAPTOLEFT, !cv_allcaps.value, NULL); {
V_DrawChatCharacter(chatx + c + 2, y, talk[i] |V_SNAPTOBOTTOM|V_SNAPTOLEFT|cflag, !cv_allcaps.value, V_GetStringColormap(talk[i]|cflag));
i++;
}
c += charwidth; c += charwidth;
} }
// if chat is muted, just draw the log and get it over with:
if (CHAT_MUTE)
{
HU_drawChatLog(0);
return;
}
i = 0; i = 0;
typelines = 1; typelines = 1;
@ -1955,10 +1985,13 @@ void HU_Drawer(void)
} }
else else
{ {
if (netgame) // Don't draw it outside, I know it leads to stupid stuff.
{
chat_scrolltime = 0; // do scroll anyway. chat_scrolltime = 0; // do scroll anyway.
typelines = 1; // make sure that the chat doesn't have a weird blinking huge ass square if we typed a lot last time. typelines = 1; // make sure that the chat doesn't have a weird blinking huge ass square if we typed a lot last time.
if (!OLDCHAT) if (!OLDCHAT)
HU_drawMiniChat(); // draw messages in a cool fashion. HU_drawMiniChat(); // draw messages in a cool fashion.
}
} }
if (netgame) // would handle that in hu_drawminichat, but it's actually kinda awkward when you're typing a lot of messages. (only handle that in netgames duh) if (netgame) // would handle that in hu_drawminichat, but it's actually kinda awkward when you're typing a lot of messages. (only handle that in netgames duh)

View file

@ -81,6 +81,8 @@ extern patch_t *iconprefix[MAXSKINS];
#define CHAT_BUFSIZE 64 // that's enough messages, right? We'll delete the older ones when that gets out of hand. #define CHAT_BUFSIZE 64 // that's enough messages, right? We'll delete the older ones when that gets out of hand.
#define OLDCHAT (cv_consolechat.value || dedicated || vid.width < 640) #define OLDCHAT (cv_consolechat.value || dedicated || vid.width < 640)
#define CHAT_MUTE (cv_mute.value && !(server || IsPlayerAdmin(consoleplayer))) // this still allows to open the chat but not to type. That's used for scrolling and whatnot.
#define OLD_MUTE (OLDCHAT && cv_mute.value && !(server || IsPlayerAdmin(consoleplayer))) // this is used to prevent oldchat from opening when muted.
// some functions // some functions
void HU_AddChatText(const char *text); void HU_AddChatText(const char *text);