+diff -uNrd gameserv-1.1.3.dist/configscript.cpp gameserv-1.1.3/configscript.cpp
+--- gameserv-1.1.3.dist/configscript.cpp Thu Nov 6 23:10:32 2003
++++ gameserv-1.1.3/configscript.cpp Fri Nov 7 12:46:51 2003
+@@ -27,11 +27,17 @@
+ case '1':
+ outfile << "#define UNREAL" << endl;
+ outfile << "#undef BAHAMUT" << endl;
++ outfile << "#undef HYBRID" << endl;
+ break;
+ case '2':
+ outfile << "#undef UNREAL" << endl;
+ outfile << "#define BAHAMUT" << endl;
++ outfile << "#undef HYBRID" <<endl;
+ break;
++ case '3':
++ outfile << "#undef UNREAL" << endl;
++ outfile << "#undef BAHAMUT" << endl;
++ outfile << "#define HYBRID" <<endl;
+ default:
+ continue;
+ }
+@@ -46,8 +52,9 @@
+ char selection = 0;
+
+ cout << "Choose your IRCD" << endl;
+- cout << "1. Unreal3.x\r\n"
+- << "2. bahamut-1.4.x" << endl;
++ cout << "1. Unreal3.x" << endl
++ << "2. bahamut-1.4.x" << endl
++ << "3. ircd-hybrid, ircd-ratbox, or csircd" << endl;
+ cout << "Make your selection: ";
+ cin >> selection;
+ return selection;
+diff -uNrd gameserv-1.1.3.dist/tcpclient.cpp gameserv-1.1.3/tcpclient.cpp
+--- gameserv-1.1.3.dist/tcpclient.cpp Thu Nov 6 23:10:32 2003
++++ gameserv-1.1.3/tcpclient.cpp Fri Nov 7 13:00:10 2003
+@@ -26,7 +26,7 @@
+ #include <stdlib.h>
+
+ char *PACKAGE = "GameServ";
+-char *VERSION = "1.1.2";
++char *VERSION = "1.1.3+hybrid_0.2";
+
+ int sock;
+ long timestamp;
+@@ -79,6 +79,13 @@
+ raw("NICK %S 1 %d +o %s %s %s 0 :GameServ", time(NULL), gsident, gshost,
+ servername);
+ raw(":%s SJOIN %d %d %s +mnt :@%S", servername, time(NULL), time(NULL), c_Forest);
++#elif defined(HYBRID)
++ raw("PASS %s :TS", remotepass);
++ raw("SERVER %s 1 :%s", servername, servername);
++ raw("NICK %S 1 %d +o %s %s %s :GameServ", time(NULL), gsident, gshost,
++ servername);
++ // Sending a timestamp of 1 to force ops.
++ raw(":%s SJOIN 1 %s +ntm :@%S", servername, c_Forest);
+ #endif
+ raw(":%S MODE %s +o %S", c_Forest);
+ raw(":%S TOPIC %s :%s", c_Forest, c_ForestTopic);
+@@ -175,17 +182,30 @@
+ if (stricmp(channel, c_Forest) == 0 && is_playing(source + 1))
+ raw(":%S MODE %s +v %s", c_Forest, (source + 1));
+
+- #if defined(BAHAMUT)
++#if defined(BAHAMUT) || defined(HYBRID)
+ } else if (stricmp(cmd, "SJOIN") == 0) {
+- char *channel, *nick;
++ char *channel, *nick, *tmp, *rest;
+ strtok(NULL, " "); // Ignore the TS
++#ifndef HYBRID
+ strtok(NULL, " "); // Ignore the TS
++#endif
+ channel = strtok(NULL, " ");
+- strtok(NULL, " ");
+- nick = strtok(NULL, " ");
+- nick++; // Get rid of the :
+- if (stricmp(channel, c_Forest) == 0 && is_playing(nick))
+- raw(":%S MODE %s +v %s", channel, nick);
++ rest = strtok(NULL, "");
++ tmp = strchr(rest, ':');
++ tmp++;
++ nick = strtok(tmp, " ");
++ while (nick != NULL)
++ {
++ if (*nick == '@')
++ nick++;
++ if (*nick == '+')
++ nick++; // Assume for users set op and voice, they
++ // are never passed as +@nick
++ if (stricmp(channel, c_Forest) == 0 && is_playing(nick))
++ raw(":%S MODE %s +v %s", channel, nick);
++
++ nick = strtok(NULL, " ");
++ }
+ #endif
+
+ } else {