summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Howard2011-10-22 17:09:12 +0000
committerSimon Howard2011-10-22 17:09:12 +0000
commit4a356b565d08ee48dbe8d920876fd73a72dbc016 (patch)
tree8cf241b5ba009da77c670532a700002384c6f405
parent69be33fe88d0a55dce27214e7543cded8ff51175 (diff)
downloadchocolate-doom-4a356b565d08ee48dbe8d920876fd73a72dbc016.tar.gz
chocolate-doom-4a356b565d08ee48dbe8d920876fd73a72dbc016.tar.bz2
chocolate-doom-4a356b565d08ee48dbe8d920876fd73a72dbc016.zip
Fix Heretic and Hexen multiplayer chat.
Subversion-branch: /branches/v2-branch Subversion-revision: 2455
-rw-r--r--src/heretic/ct_chat.c67
-rw-r--r--src/heretic/d_main.c10
-rw-r--r--src/hexen/ct_chat.c83
-rw-r--r--src/hexen/h2_main.c18
4 files changed, 98 insertions, 80 deletions
diff --git a/src/heretic/ct_chat.c b/src/heretic/ct_chat.c
index 8059b74d..01e43383 100644
--- a/src/heretic/ct_chat.c
+++ b/src/heretic/ct_chat.c
@@ -27,9 +27,12 @@
#include <string.h>
#include <ctype.h>
+
#include "doomdef.h"
#include "doomkeys.h"
+
#include "deh_str.h"
+#include "m_controls.h"
#include "p_local.h"
#include "s_sound.h"
#include "v_video.h"
@@ -44,12 +47,10 @@
#define CT_PLR_BLUE 4
#define CT_PLR_ALL 5
-#define CT_KEY_GREEN 'g'
-#define CT_KEY_YELLOW 'y'
-#define CT_KEY_RED 'r'
-#define CT_KEY_BLUE 'b'
-#define CT_KEY_ALL 't'
-#define CT_ESCAPE 6
+// Vanilla Heretic seems to use this for KEY_BACKSPACE (tcpdump'ed trace):
+#define CT_BACKSPACE 0x7f
+
+#define CT_ESCAPE 6
// Public data
@@ -132,6 +133,19 @@ void CT_Stop(void)
return;
}
+// These keys are allowed by Vanilla Heretic:
+
+static boolean ValidChatChar(char c)
+{
+ return (c >= 'a' && c <= 'z')
+ || (c >= 'A' && c <= 'Z')
+ || (c >= '0' && c <= '9')
+ || c == '!' || c == '?'
+ || c == ' ' || c == '\''
+ || c == ',' || c == '.'
+ || c == '-' || c == '=';
+}
+
//===========================================================================
//
// CT_Responder
@@ -165,23 +179,23 @@ boolean CT_Responder(event_t * ev)
if (!chatmodeon)
{
sendto = 0;
- if (ev->data1 == CT_KEY_ALL)
+ if (ev->data1 == key_multi_msg)
{
sendto = CT_PLR_ALL;
}
- else if (ev->data1 == CT_KEY_GREEN)
+ else if (ev->data1 == key_multi_msgplayer[0])
{
sendto = CT_PLR_GREEN;
}
- else if (ev->data1 == CT_KEY_YELLOW)
+ else if (ev->data1 == key_multi_msgplayer[1])
{
sendto = CT_PLR_YELLOW;
}
- else if (ev->data1 == CT_KEY_RED)
+ else if (ev->data1 == key_multi_msgplayer[2])
{
sendto = CT_PLR_RED;
}
- else if (ev->data1 == CT_KEY_BLUE)
+ else if (ev->data1 == key_multi_msgplayer[3])
{
sendto = CT_PLR_BLUE;
}
@@ -228,34 +242,15 @@ boolean CT_Responder(event_t * ev)
CT_Stop();
return true;
}
- else if (ev->data1 >= 'a' && ev->data1 <= 'z')
+ else if (ev->data1 == KEY_BACKSPACE)
{
- CT_queueChatChar(ev->data1 - 32);
+ CT_queueChatChar(CT_BACKSPACE);
return true;
}
- else if (shiftdown)
+ else if (ValidChatChar(ev->data2))
{
- if (ev->data1 == '1')
- {
- CT_queueChatChar('!');
- return true;
- }
- else if (ev->data1 == '/')
- {
- CT_queueChatChar('?');
- return true;
- }
- }
- else
- {
- if (ev->data1 == ' ' || ev->data1 == ',' || ev->data1 == '.'
- || (ev->data1 >= '0' && ev->data1 <= '9') || ev->data1 == '\''
- || ev->data1 == KEY_BACKSPACE || ev->data1 == '-'
- || ev->data1 == '=')
- {
- CT_queueChatChar(ev->data1);
- return true;
- }
+ CT_queueChatChar(toupper(ev->data2));
+ return true;
}
}
return false;
@@ -336,7 +331,7 @@ void CT_Ticker(void)
}
CT_ClearChatMessage(i);
}
- else if (c == KEY_BACKSPACE)
+ else if (c == CT_BACKSPACE)
{
CT_BackSpace(i);
}
diff --git a/src/heretic/d_main.c b/src/heretic/d_main.c
index 8bca1db1..a34ef3ac 100644
--- a/src/heretic/d_main.c
+++ b/src/heretic/d_main.c
@@ -53,6 +53,11 @@
#include "w_main.h"
#include "v_video.h"
+#define CT_KEY_GREEN 'g'
+#define CT_KEY_YELLOW 'y'
+#define CT_KEY_RED 'r'
+#define CT_KEY_BLUE 'b'
+
#define STARTUP_WINDOW_X 17
#define STARTUP_WINDOW_Y 7
@@ -737,6 +742,11 @@ void D_BindVariables(void)
M_BindWeaponControls();
M_BindChatControls(MAXPLAYERS);
+ key_multi_msgplayer[0] = CT_KEY_GREEN;
+ key_multi_msgplayer[1] = CT_KEY_YELLOW;
+ key_multi_msgplayer[2] = CT_KEY_RED;
+ key_multi_msgplayer[3] = CT_KEY_BLUE;
+
M_BindMenuControls();
M_BindMapControls();
diff --git a/src/hexen/ct_chat.c b/src/hexen/ct_chat.c
index 74fe96f8..0d0dd49b 100644
--- a/src/hexen/ct_chat.c
+++ b/src/hexen/ct_chat.c
@@ -28,6 +28,7 @@
#include "h2def.h"
#include "s_sound.h"
#include "doomkeys.h"
+#include "m_controls.h"
#include "p_local.h"
#include "v_video.h"
@@ -51,16 +52,13 @@ enum
CT_PLR_ALL
};
-#define CT_KEY_BLUE 'b'
-#define CT_KEY_RED 'r'
-#define CT_KEY_YELLOW 'y'
-#define CT_KEY_GREEN 'g'
-#define CT_KEY_PLAYER5 'j' // Jade
-#define CT_KEY_PLAYER6 'w' // White
-#define CT_KEY_PLAYER7 'h' // Hazel
-#define CT_KEY_PLAYER8 'p' // Purple
-#define CT_KEY_ALL 't'
-#define CT_ESCAPE 6
+// KEY_BACKSPACE (ASCII code 0x08) can't be used, because it conflicts with
+// CT_PLR_PLAYER8. Investigation reveals that Vanilla Hexen appears to use
+// this value for backspace.
+
+#define CT_BACKSPACE 0x7f
+
+#define CT_ESCAPE 6
// Public data
@@ -159,6 +157,19 @@ void CT_Stop(void)
return;
}
+// These keys are allowed by Vanilla Heretic:
+
+static boolean ValidChatChar(char c)
+{
+ return (c >= 'a' && c <= 'z')
+ || (c >= 'A' && c <= 'Z')
+ || (c >= '0' && c <= '9')
+ || c == '!' || c == '?'
+ || c == ' ' || c == '\''
+ || c == ',' || c == '.'
+ || c == '-' || c == '=';
+}
+
//===========================================================================
//
// CT_Responder
@@ -192,39 +203,39 @@ boolean CT_Responder(event_t * ev)
if (!chatmodeon)
{
sendto = 0;
- if (ev->data1 == CT_KEY_ALL)
+ if (ev->data1 == key_multi_msg)
{
sendto = CT_PLR_ALL;
}
- else if (ev->data1 == CT_KEY_GREEN)
+ else if (ev->data1 == key_multi_msgplayer[0])
{
- sendto = CT_PLR_GREEN;
+ sendto = CT_PLR_BLUE;
}
- else if (ev->data1 == CT_KEY_YELLOW)
+ else if (ev->data1 == key_multi_msgplayer[1])
{
- sendto = CT_PLR_YELLOW;
+ sendto = CT_PLR_RED;
}
- else if (ev->data1 == CT_KEY_RED)
+ else if (ev->data1 == key_multi_msgplayer[2])
{
- sendto = CT_PLR_RED;
+ sendto = CT_PLR_YELLOW;
}
- else if (ev->data1 == CT_KEY_BLUE)
+ else if (ev->data1 == key_multi_msgplayer[3])
{
- sendto = CT_PLR_BLUE;
+ sendto = CT_PLR_GREEN;
}
- else if (ev->data1 == CT_KEY_PLAYER5)
+ else if (ev->data1 == key_multi_msgplayer[4])
{
sendto = CT_PLR_PLAYER5;
}
- else if (ev->data1 == CT_KEY_PLAYER6)
+ else if (ev->data1 == key_multi_msgplayer[5])
{
sendto = CT_PLR_PLAYER6;
}
- else if (ev->data1 == CT_KEY_PLAYER7)
+ else if (ev->data1 == key_multi_msgplayer[6])
{
sendto = CT_PLR_PLAYER7;
}
- else if (ev->data1 == CT_KEY_PLAYER8)
+ else if (ev->data1 == key_multi_msgplayer[7])
{
sendto = CT_PLR_PLAYER8;
}
@@ -272,30 +283,14 @@ boolean CT_Responder(event_t * ev)
CT_Stop();
return true;
}
- else if (ev->data1 >= 'a' && ev->data1 <= 'z')
+ else if (ev->data1 == KEY_BACKSPACE)
{
- CT_queueChatChar(ev->data1 - 32);
+ CT_queueChatChar(CT_BACKSPACE);
return true;
}
- else if (shiftdown)
- {
- if (ev->data1 == '1')
- {
- CT_queueChatChar('!');
- return true;
- }
- else if (ev->data1 == '/')
- {
- CT_queueChatChar('?');
- return true;
- }
- }
- if (ev->data1 == ' ' || ev->data1 == ',' || ev->data1 == '.'
- || (ev->data1 >= '0' && ev->data1 <= '9') || ev->data1 == '\''
- || ev->data1 == KEY_BACKSPACE || ev->data1 == '-'
- || ev->data1 == '=')
+ else if (ValidChatChar(ev->data2))
{
- CT_queueChatChar(ev->data1);
+ CT_queueChatChar(toupper(ev->data2));
return true;
}
}
@@ -369,7 +364,7 @@ void CT_Ticker(void)
}
CT_ClearChatMessage(i);
}
- else if (c == KEY_BACKSPACE)
+ else if (c == CT_BACKSPACE)
{
CT_BackSpace(i);
}
diff --git a/src/hexen/h2_main.c b/src/hexen/h2_main.c
index 13e27a22..49d7f21b 100644
--- a/src/hexen/h2_main.c
+++ b/src/hexen/h2_main.c
@@ -53,6 +53,15 @@
// MACROS ------------------------------------------------------------------
#define MAXWADFILES 20
+#define CT_KEY_BLUE 'b'
+#define CT_KEY_RED 'r'
+#define CT_KEY_YELLOW 'y'
+#define CT_KEY_GREEN 'g'
+#define CT_KEY_PLAYER5 'j' // Jade
+#define CT_KEY_PLAYER6 'w' // White
+#define CT_KEY_PLAYER7 'h' // Hazel
+#define CT_KEY_PLAYER8 'p' // Purple
+#define CT_KEY_ALL 't'
// TYPES -------------------------------------------------------------------
@@ -163,6 +172,15 @@ void D_BindVariables(void)
M_BindHereticControls();
M_BindHexenControls();
+ key_multi_msgplayer[0] = CT_KEY_BLUE;
+ key_multi_msgplayer[1] = CT_KEY_RED;
+ key_multi_msgplayer[2] = CT_KEY_YELLOW;
+ key_multi_msgplayer[3] = CT_KEY_GREEN;
+ key_multi_msgplayer[4] = CT_KEY_PLAYER5;
+ key_multi_msgplayer[5] = CT_KEY_PLAYER6;
+ key_multi_msgplayer[6] = CT_KEY_PLAYER7;
+ key_multi_msgplayer[7] = CT_KEY_PLAYER8;
+
M_BindVariable("graphical_startup", &graphical_startup);
M_BindVariable("mouse_sensitivity", &mouseSensitivity);
M_BindVariable("sfx_volume", &snd_MaxVolume);