diff --git a/src/game.c b/src/game.c
index 4a92ff1a..ee0959a5 100644
--- a/src/game.c
+++ b/src/game.c
@@ -81,6 +81,7 @@ static void bf1942_analyze_serverinfo (struct server *s);
static void descent3_analyze_serverinfo (struct server *s);
static void savage_analyze_serverinfo (struct server *s);
static void ottd_analyze_serverinfo (struct server *s);
+static void teeworlds_analyze_serverinfo (struct server *s);
static int quake_config_is_valid (struct server *s);
static int config_is_valid_generic (struct server *s);
@@ -697,7 +698,7 @@ static struct player *q3_parse_player (char *token[], int n, struct server *s) {
clanlen = strlen(clan)+1;
}
- if (s->type == WARSOW_SERVER && clan) {
+ if ((s->type == WARSOW_SERVER || s->type == WARFORK_SERVER) && clan) {
static const char* colors[] = { "spectator", "", "red", "blue", "green", "yellow" };
unsigned i = atoi(clan);
if (i > 5) i = 1;
@@ -718,7 +719,7 @@ static struct player *q3_parse_player (char *token[], int n, struct server *s) {
// show clan name in model column
if (clan) {
- if (s->type == WARSOW_SERVER) {
+ if (s->type == WARSOW_SERVER || s->type == WARFORK_SERVER) {
player->model = (char*)clan;
}
else {
@@ -1958,10 +1959,6 @@ static void q3_analyze_serverinfo (struct server *s) {
else if (!strncmp(info_ptr[1], "KoRx", 4)) {
s->type=TREMULOUS_SERVER;
}
- // Tremfusion
- else if (!strncmp(info_ptr[1], "tremfusion", 10)) {
- s->type=TREMFUSION_SERVER;
- }
// Unvanquished
else if (!strncmp(info_ptr[1], "Unvanquished", 12)) {
s->type=UNVANQUISHED_SERVER;
@@ -2044,7 +2041,7 @@ static void q3_analyze_serverinfo (struct server *s) {
strcmp (*info_ptr, "g_gametypestring") == 0) {
s->gametype = info_ptr[1];
}
- else if (s->type == WARSOW_SERVER &&
+ else if ((s->type == WARSOW_SERVER || s->type == WARFORK_SERVER) &&
strcmp (*info_ptr, "gametype") == 0) {
s->gametype = info_ptr[1];
}
@@ -2263,6 +2260,16 @@ static void doom3_analyze_serverinfo (struct server *s) {
}
}
+static void teeworlds_analyze_serverinfo (struct server *s) {
+ char **info_ptr;
+
+ for (info_ptr = s->info; info_ptr && *info_ptr; info_ptr += 2) {
+ if (strcmp (*info_ptr, "gametype") == 0) {
+ s->gametype = info_ptr[1];
+ }
+ }
+}
+
static void ottd_analyze_serverinfo (struct server *s) {
char **info_ptr;
diff --git a/src/games.xml b/src/games.xml
index a1169ed5..c111d97a 100644
--- a/src/games.xml
+++ b/src/games.xml
@@ -92,6 +92,26 @@
bf1942_analyze_serverinfo
bf1942_exec
+
+ Q3_SERVER
+ CDIESEL_SERVER
+ Cocaine Diesel
+ 44400
+ CDIESELS
+ CDIESELS
+ -cdiesels
+ -cdieselm
+ cdiesel.xpm
+ config_is_valid_generic
+ q3_init_maps
+ quake_has_map
+ q3_get_mapshot
+ client
+ ~/.local/share/Cocaine Diesel
+ q3_prefs_load_common
+ q3_update_prefs_common
+ base
+
Q3_SERVER
COD_SERVER
@@ -187,6 +207,23 @@
DDaynormandy
dday
+
+ DDNET_SERVER
+ GAME_CONNECT | GAME_PASSWORD | GAME_RCON
+ DDrace Network
+ 8303
+ 8300
+ DDNETS
+ TEES
+ -tees
+ -teem
+ ddnet.xpm
+ teeworlds_analyze_serverinfo
+ teeworlds_exec
+ DDNet
+
+ ~/.teeworlds
+
DESCENT3_SERVER
Descent3
@@ -232,22 +269,6 @@
+net_clientRemoteConsolePassword
+rconpassword
-
- Q3_SERVER
- ETL_SERVER
- Enemy Territory: Legacy
- ETLS
- WOETS
- -woets
- -woetm
- etl.xpm
- config_is_valid_generic
- etl
- ~/.etlegacy
- q3_prefs_load_common
- q3_update_prefs_common
- etmain
-
Q3_SERVER
ETQW_SERVER
@@ -272,6 +293,22 @@
+net_clientRemoteConsolePassword
+rconpassword
+
+ Q3_SERVER
+ ETL_SERVER
+ ET: Legacy
+ ETLS
+ WOETS
+ -woets
+ -woetm
+ etl.xpm
+ config_is_valid_generic
+ etl
+ ~/.etlegacy
+ q3_prefs_load_common
+ q3_update_prefs_common
+ etmain
+
HL_SERVER_OLD
Half-Life (old)
@@ -455,6 +492,7 @@
Q3_SERVER
NEXUIZ_SERVER
+ COLOR_QUAKE3_NUMERIC
Nexuiz
26000
NEXUIZS
@@ -713,6 +751,25 @@
q3_update_prefs
rq3
+
+ Q3_SERVER
+ REXUIZ_SERVER
+ COLOR_QUAKE3_NUMERIC
+ Rexuiz
+ 26000
+ REXUIZS
+ REXUIZS
+ -rexuizs
+ -rexuizm
+ rexuiz.xpm
+ config_is_valid_generic
+ xonotic_init_maps
+ rexuiz
+ ~/.rexuiz
+ q3_prefs_load_common
+ q3_update_prefs_common
+ data
+
Q3_SERVER
WO_SERVER
@@ -851,30 +908,11 @@
-tees
-teem
teeworlds.xpm
+ teeworlds_analyze_serverinfo
teeworlds_exec
teeworlds
~/.teeworlds
-
- Q3_SERVER
- TREMFUSION_SERVER
- GAME_CONNECT | GAME_PASSWORD | GAME_RCON | GAME_MASTER_QUAKE3
- COLOR_QUAKE3_NUMERIC | COLOR_QUAKE3_ALPHA
- TremFusion
- 30720
- 30710
- TREMFUSIONS
- TREMULOUSS
- -tremulouss
- -tremulousm
- tremfusion.xpm
- config_is_valid_generic
- tremfusion
- ~/.tremulous
- q3_prefs_load_common
- q3_update_prefs
- base
-
Q3_SERVER
TREMULOUS_SERVER
@@ -1060,6 +1098,26 @@
q3_update_prefs_common
BaseEF
+
+ Q3_SERVER
+ WARFORK_SERVER
+ Warfork
+ 44400
+ WARFORKS
+ WARFORKS
+ -warforks
+ -warforkm
+ warfork.xpm
+ config_is_valid_generic
+ q3_init_maps
+ quake_has_map
+ q3_get_mapshot
+ warfork
+ ~/.warfork
+ q3_prefs_load_common
+ q3_update_prefs_common
+ basewf
+
Q3_SERVER
WARSOW_SERVER
diff --git a/src/masters.c b/src/masters.c
index 6d36f5b0..bc7d4706 100644
--- a/src/masters.c
+++ b/src/masters.c
@@ -22,6 +22,14 @@ static char *builtin_masters_update_info[] = {
*
*/
+ // removed game variant, removed 2025-07-21
+ "DELETE TREMFUSIONS http://www.qtracker.com/server_list_details.php?game=tremulous qtracker.com",
+ "DELETE TREMFUSIONS master://master.tremulous.net:30710 tremulous.net",
+
+ // does no longer work, removed 2025-07-19
+ "DELETE TEES master://master2.teeworlds.com teeworlds.com #2",
+ "DELETE TEES master://master3.teeworlds.com teeworlds.com #3",
+
// does not work yet, not added 2019-02-17
"DELETE Q2S:KP master://master.kingpin.info:27900 kingpin.info", // alias for gsm.qtracker.com on 2019-02-17
"DELETE Q2S:KP master://master0.kingpin.info:27900 kingpin.info #2", // alias for hypo.hambloch.com on 2019-02-17
@@ -184,6 +192,21 @@ static char *builtin_masters_update_info[] = {
*
*/
+ // added 2025-07-22
+ "ADD REXUIZS master://dpmaster.tchr.no:27950 tchr.no",
+ "ADD REXUIZS master://dpmaster.deathmask.net:27950 deathmask.net",
+
+ // added 2025-07-21
+ "ADD WARFORKS master://master1.forbidden.gg:27950 forbidden.gg #1",
+ "ADD WARFORKS master://master2.forbidden.gg:27777 forbidden.gg #2",
+ "ADD WARFORKS master://master3.forbidden.gg:42863 forbidden.gg #3",
+ "ADD CDIESELS master://dpmaster.deathmask.net deathmask.net",
+ "ADD CDIESELS master://excalibur.nvg.ntnu.no nvg.ntnu.no",
+
+ // added 2025-07-19
+ "ADD DDNETS master://master.ddnet.org ddnet.org",
+ "ADD TEES master://master4.teeworlds.com teeworlds.com #4",
+
// added 2019-02-17
"ADD Q2S:KP http://kingpin.hambloch.com/gspylitefavors.txt hambloch.com",
@@ -226,10 +249,6 @@ static char *builtin_masters_update_info[] = {
"ADD UNS,-gsm,ut gmaster://master2.oldunreal.com:28900 oldunreal.com #2",
"ADD UNS,-gsm,ut gmaster://master.newbiesplayground.net:28900 newbiesplayground.net",
- // added 2018-03-18
- "ADD TEES master://master2.teeworlds.com teeworlds.com #2",
- "ADD TEES master://master3.teeworlds.com teeworlds.com #3",
-
// added 2017-04-09
"ADD CODUOS http://www.qtracker.com/server_list_details.php?game=callofdutyunitedoffensive qtracker.com",
"ADD CODUOS master://codmaster.activision.com activision.com",
@@ -284,7 +303,6 @@ static char *builtin_masters_update_info[] = {
"ADD SFS http://www.qtracker.com/server_list_details.php?game=soldieroffortune qtracker.com",
"ADD SOF2S http://www.qtracker.com/server_list_details.php?game=soldieroffortune2 qtracker.com",
"ADD T2S http://www.qtracker.com/server_list_details.php?game=tribes2 qtracker.com",
- "ADD TREMFUSIONS http://www.qtracker.com/server_list_details.php?game=tremulous qtracker.com",
"ADD TREMULOUSS http://www.qtracker.com/server_list_details.php?game=tremulous qtracker.com",
"ADD WARSOWS http://www.qtracker.com/server_list_details.php?game=warsow qtracker.com",
"ADD WOETS http://www.qtracker.com/server_list_details.php?game=wolfensteinenemyterritory qtracker.com",
@@ -338,7 +356,6 @@ static char *builtin_masters_update_info[] = {
"ADD ETLS master://etmaster.idsoftware.com:27950 idsoftware.com",
// added 2014-09-28
- "ADD TREMFUSIONS master://master.tremulous.net:30710 tremulous.net",
"ADD TREMULOUSGPPS master://master.tremulous.net:30700 tremulous.net",
"ADD TREMULOUSS master://master.tremulous.net:30710 tremulous.net",
@@ -430,16 +447,21 @@ static char *builtin_masters_update_info[] = {
"ADD QS http://www.gameaholic.com/servers/qspy-quake gameaholic.com",
"ADD SNS http://www.gameaholic.com/servers/qspy-sin gameaholic.com",
+ // lan servers from deleted games
+ "DELETE TREMFUSIONS lan://255.255.255.255 LAN",
+
// lan servers
"ADD ALIENARENAS lan://255.255.255.255 LAN",
"ADD AMS lan://255.255.255.255 LAN",
"ADD AQ2S lan://255.255.255.255 LAN",
+ "ADD CDIESELS lan://255.255.255.255 LAN",
"ADD CODS lan://255.255.255.255 LAN",
"ADD CODUOS lan://255.255.255.255 LAN",
"ADD COD2S lan://255.255.255.255 LAN",
"ADD COD4S lan://255.255.255.255 LAN",
"ADD CODWAWS lan://255.255.255.255 LAN",
"ADD DDAYS lan://255.255.255.255 LAN",
+ "ADD DDNETS lan://255.255.255.255 LAN",
"ADD DM3S lan://255.255.255.255 LAN",
"ADD EFS lan://255.255.255.255 LAN",
"ADD ETLS lan://255.255.255.255 LAN",
@@ -461,12 +483,12 @@ static char *builtin_masters_update_info[] = {
"ADD QS lan://255.255.255.255 LAN",
"ADD QWS lan://255.255.255.255 LAN",
"ADD REACTIONS lan://255.255.255.255 LAN",
+ "ADD REXUIZS lan://255.255.255.255 LAN",
"ADD RUNESRV lan://255.255.255.255 LAN",
"ADD SFS lan://255.255.255.255 LAN",
"ADD SMOKINGUNSS lan://255.255.255.255 LAN",
"ADD TEES lan://255.255.255.255 LAN",
"ADD T2S lan://255.255.255.255 LAN",
- "ADD TREMFUSIONS lan://255.255.255.255 LAN",
"ADD TREMULOUSGPPS lan://255.255.255.255 LAN",
"ADD TREMULOUSS lan://255.255.255.255 LAN",
"ADD TURTLEARENAS lan://255.255.255.255 LAN",
@@ -474,6 +496,7 @@ static char *builtin_masters_update_info[] = {
"ADD UNVANQUISHEDS lan://255.255.255.255 LAN",
"ADD UT2004S lan://255.255.255.255 LAN",
"ADD UT2S lan://255.255.255.255 LAN",
+ "ADD WARFORKS lan://255.255.255.255 LAN",
"ADD WARSOWS lan://255.255.255.255 LAN",
"ADD WOETS lan://255.255.255.255 LAN",
"ADD WOPS lan://255.255.255.255 LAN",
diff --git a/src/pref.c b/src/pref.c
index acbb8279..46186598 100644
--- a/src/pref.c
+++ b/src/pref.c
@@ -489,6 +489,28 @@ static struct q3_common_prefs_s xonotic_prefs = {
.defproto = "3",
};
+static const char* cdiesel_masterprotocols[] = {
+ "auto",
+ "11908000 - v0.1.0.82",
+ NULL
+};
+
+static struct q3_common_prefs_s cdiesel_prefs = {
+ .protocols = cdiesel_masterprotocols,
+ .defproto = "11908000",
+};
+
+static const char* warfork_masterprotocols[] = {
+ "auto",
+ "26 - v2.15",
+ NULL
+};
+
+static struct q3_common_prefs_s warfork_prefs = {
+ .protocols = warfork_masterprotocols,
+ .defproto = "26",
+};
+
static const char* warsow_masterprotocols[] = {
"auto",
"22 - v2.1.0",
@@ -530,17 +552,6 @@ static struct q3_common_prefs_s tremulousgpp_prefs = {
.defproto = "70",
};
-static const char* tremfusion_masterprotocols[] = {
- "auto",
- "69 - v0.99",
- NULL
-};
-
-static struct q3_common_prefs_s tremfusion_prefs = {
- .protocols = tremfusion_masterprotocols,
- .defproto = "69",
-};
-
static const char* unvanquished_masterprotocols[] = {
"auto",
"86",
@@ -3266,6 +3277,7 @@ static struct q3_common_prefs_s* get_pref_widgets_for_game(enum server_type type
case ETQW_SERVER: return &etqw_prefs;
case EF_SERVER: return &ef_prefs;
case SOF2S_SERVER: return &sof2_prefs;
+ case CDIESEL_SERVER: return &cdiesel_prefs;
case COD_SERVER: return &cod_prefs;
case CODUO_SERVER: return &coduo_prefs;
case COD2_SERVER: return &cod2_prefs;
@@ -3274,11 +3286,12 @@ static struct q3_common_prefs_s* get_pref_widgets_for_game(enum server_type type
case JK2_SERVER: return &jk2_prefs;
case JK3_SERVER: return &jk3_prefs;
case NEXUIZ_SERVER: return &nexuiz_prefs;
+ case REXUIZ_SERVER: return &nexuiz_prefs;
case XONOTIC_SERVER: return &xonotic_prefs;
+ case WARFORK_SERVER: return &warfork_prefs;
case WARSOW_SERVER: return &warsow_prefs;
case TREMULOUS_SERVER: return &tremulous_prefs;
case TREMULOUSGPP_SERVER: return &tremulousgpp_prefs;
- case TREMFUSION_SERVER: return &tremfusion_prefs;
case UNVANQUISHED_SERVER: return &unvanquished_prefs;
case OPENARENA_SERVER: return &openarena_prefs;
case Q3RALLY_SERVER: return &q3rally_prefs;
@@ -4392,7 +4405,6 @@ static struct generic_prefs* new_generic_prefs (void) {
new_genprefs[WARSOW_SERVER].add_options_to_notebook = add_q3_options_to_notebook;
new_genprefs[TREMULOUS_SERVER].add_options_to_notebook = add_q3_options_to_notebook;
new_genprefs[TREMULOUSGPP_SERVER].add_options_to_notebook = add_q3_options_to_notebook;
- new_genprefs[TREMFUSION_SERVER].add_options_to_notebook = add_q3_options_to_notebook;
new_genprefs[UNVANQUISHED_SERVER].add_options_to_notebook = add_q3_options_to_notebook;
new_genprefs[OPENARENA_SERVER].add_options_to_notebook = add_q3_options_to_notebook;
new_genprefs[Q3RALLY_SERVER].add_options_to_notebook = add_q3_options_to_notebook;
diff --git a/src/qstat.cfg b/src/qstat.cfg
index 2c939ad0..1b7e022f 100644
--- a/src/qstat.cfg
+++ b/src/qstat.cfg
@@ -249,6 +249,44 @@ gametype WARSOWM new extend Q3M
master for gametype = WARSOWS
end
+# id Tech 2 fork (Qfusion engine, Quake 1 derivative)
+gametype WARFORKS new extend Q3S
+ name = Warfork
+ template var = WARFORK
+ default port = 44400
+ game rule = gamename
+ status packet = \377\377\377\377getinfo
+ status2 packet = \377\377\377\377getstatus
+end
+gametype WARFORKM new extend Q3M
+ name = Warfork Master
+ template var = WARFORKMASTER
+ default port = 27950
+ master packet = \377\377\377\377getservers Warfork %s %s
+ master protocol = 26
+ master query = empty full
+ master for gametype = WARFORKS
+end
+
+# id Tech 2 fork (Qfusion engine, Quake 1 derivative)
+gametype CDIESELS new extend Q3S
+ name = Cocaine Diesel
+ template var = CDIESEL
+ default port = 44400
+ game rule = gamename
+ status packet = \377\377\377\377getinfo
+ status2 packet = \377\377\377\377getstatus
+end
+gametype CDIESELM new extend Q3M
+ name = Cocaine Diesel Master
+ template var = CDIESELMASTER
+ default port = 27950
+ master packet = \377\377\377\377getservers CocaineDiesel %s %s
+ master protocol = 11908000
+ master query = empty full
+ master for gametype = CDIESELS
+end
+
# id Tech 3 fork (Tremulous engine, Quake 3 derivative)
gametype TREMULOUSS new extend Q3S
name = Tremulous
@@ -416,6 +454,24 @@ gametype REACTIONM new extend Q3M
master for gametype = REACTIONS
end
+# id Tech 2 fork (DarkPlace engine, Quake 2 derivative)
+gametype REXUIZS new extend Q3S
+ name = Rexuiz
+ template var = REXUIZ
+ default port = 26000
+ game rule = gamename
+end
+gametype REXUIZM new extend Q3M
+ name = Rexuiz Master
+ template var = REXUIZMASTER
+ default port = 27950
+ master packet = \377\377\377\377getservers Nexuiz %s %s
+ master protocol = 3
+ master query = empty full
+ master for gametype = REXUIZS
+end
+
+# id Tech 2 fork (Qfusion engine, Quake 1 derivative)
# id Tech 3 fork (ioquake3 engine, Quake 3 derivative)
gametype SMOKINGUNSS new extend Q3S
name = Smokin' Guns
diff --git a/src/xpm/cdiesel.xpm b/src/xpm/cdiesel.xpm
new file mode 100644
index 00000000..5b53bc9f
--- /dev/null
+++ b/src/xpm/cdiesel.xpm
@@ -0,0 +1,33 @@
+/* XPM */
+static char * cdiesel_xpm[] = {
+"16 16 14 1",
+" c #111111",
+". c #2C2C2C",
+"+ c #5A5A5A",
+"@ c #C6C6C6",
+"# c #A5A5A5",
+"$ c #797979",
+"% c #DBDBDB",
+"& c #FEFEFE",
+"* c #8F8F8F",
+"= c #EEEEEE",
+"- c #F7F7F7",
+"; c #B1B1B1",
+"> c #E5E5E5",
+", c #4A4A4A",
+" ",
+" .. ",
+" +@# ",
+" $% ",
+" *=-;. ",
+" #-=*. ",
+" .;-==$ ",
+" #->$=# ",
+" .%&=;-# ",
+" ,>&&&-* ",
+" ;-&&-* ",
+" .;&&&>+ ",
+" .@&&-$ ",
+" ,%-# ",
+" ,$. ",
+" "};
diff --git a/src/xpm/ddnet.xpm b/src/xpm/ddnet.xpm
new file mode 100644
index 00000000..51c2b41b
--- /dev/null
+++ b/src/xpm/ddnet.xpm
@@ -0,0 +1,85 @@
+/* XPM */
+static char * ddnet_xpm[] = {
+"16 16 66 1",
+" c None",
+". c #000000",
+"+ c #000000",
+"@ c #020202",
+"# c #050503",
+"$ c #050301",
+"% c #000000",
+"& c #000000",
+"* c #000000",
+"= c #724300",
+"- c #AC6F00",
+"; c #875100",
+"> c #050403",
+", c #A85700",
+"' c #522F00",
+") c #0F0F0D",
+"! c #C17D00",
+"~ c #3D2700",
+"{ c #985700",
+"] c #040301",
+"^ c #6A3900",
+"/ c #040303",
+"( c #06090C",
+"_ c #3D2800",
+": c #562E00",
+"< c #030506",
+"[ c #000000",
+"} c #321B00",
+"| c #020303",
+"1 c #0C0A09",
+"2 c #0C161F",
+"3 c #0F0A05",
+"4 c #B35500",
+"5 c #10212F",
+"6 c #234156",
+"7 c #5194C3",
+"8 c #21405A",
+"9 c #4883AD",
+"0 c #33658F",
+"a c #2B5370",
+"b c #162C3E",
+"c c #3B6D8F",
+"d c #0F1E2A",
+"e c #284D6B",
+"f c #21415A",
+"g c #2B5579",
+"h c #2E5A7E",
+"i c #3C739F",
+"j c #1D3B55",
+"k c #FFA800",
+"l c #FBA000",
+"m c #D78C00",
+"n c #ED9800",
+"o c #7C4900",
+"p c #F67500",
+"q c #D06300",
+"r c #E36E00",
+"s c #59A3D7",
+"t c #65BAF6",
+"u c #6BC4FF",
+"v c #60B0E9",
+"w c #4897DE",
+"x c #4C9FE9",
+"y c #428ACB",
+"z c #3C7FBB",
+"A c #FFFFFF",
+" {-{ {-, ",
+" -n!mn{ nmmn! ",
+" !m_ mmon^ -n= ",
+" m! !m{m' {n= ",
+" q{ m!!m ,r' ",
+" r= 4ro!- r4 ",
+" rqqqo'qqqq4~ ",
+" b=^:_ ^^^' ",
+" 7vh 97 9b ",
+" st7 77 i 9vh ",
+" v9sesi9s7vhsv9 ",
+" se7hvcvi0shyz ",
+"0yjizw0v99ijy0 ",
+"iz hwyey0gebyib ",
+"hh i050zie 0ij ",
+" "};
diff --git a/src/xpm/etl.xpm b/src/xpm/etl.xpm
index 26d7ca83..063ba113 100644
--- a/src/xpm/etl.xpm
+++ b/src/xpm/etl.xpm
@@ -1,23 +1,58 @@
/* XPM */
static char * etl_xpm[] = {
-"17 17 3 1",
-" c None",
-". c #000000",
-"+ c #303030",
-" ",
-" . . ",
-" .. .. ",
-" .. .. ",
-"..... . . .....",
-" . . . . ",
-" ...... ...... ",
-" ",
-" .... .... ",
-" . . ",
-" +++ . +++ . + ",
-" + . + . + ",
-" ++ . + .. + ",
-" + .. + . + ",
-" +++ . + . +++ ",
-" ",
-" "};
+"16 16 39 1",
+" c #302328",
+". c #2F2329",
+"+ c #302429",
+"@ c #302428",
+"# c #302329",
+"$ c #332328",
+"% c #5E221F",
+"& c #492323",
+"* c #352327",
+"= c #3C2326",
+"- c #FE1E00",
+"; c #FC1E00",
+"> c #902115",
+", c #8C2116",
+"' c #65221E",
+") c #DF1E06",
+"! c #D41F08",
+"~ c #B1200F",
+"{ c #342328",
+"] c #A62011",
+"^ c #862117",
+"/ c #7F2119",
+"( c #412325",
+"_ c #DA1F06",
+": c #6A221D",
+"< c #372327",
+"[ c #E41E05",
+"} c #DB1F06",
+"| c #C91F0A",
+"1 c #392327",
+"2 c #592220",
+"3 c #67221D",
+"4 c #322328",
+"5 c #812118",
+"6 c #CE1F09",
+"7 c #E41E04",
+"8 c #F81E01",
+"9 c #70221C",
+"0 c #2F2429",
+" .++++++++++++.@",
+"#++$%&*++++++++#",
+"+++=--;>++++++++",
+"+++=--,+++++++++",
+"+++=--'+++++++++",
+"+++=--)!!!!!~{++",
+"+++=--]^^^^/(+++",
+"+++=------_(++++",
+"+++=--]^^:<+++++",
+"+++=--[}|(12++++",
+"+++=--344456++++",
+"+++=-------7++++",
+"+++=-------8 +++",
+"+++{999999994+++",
+"#++++++++++++++#",
+"+++++++++++++++0"};
diff --git a/src/xpm/rexuiz.xpm b/src/xpm/rexuiz.xpm
new file mode 100644
index 00000000..2e8a4648
--- /dev/null
+++ b/src/xpm/rexuiz.xpm
@@ -0,0 +1,166 @@
+/* XPM */
+static char * rexuiz_xpm[] = {
+"16 16 147 2",
+" c None",
+". c #546A80",
+"+ c #4E7494",
+"@ c #49799E",
+"# c #4A789B",
+"$ c #4E7696",
+"% c #546A81",
+"& c #4187B6",
+"* c #2697D4",
+"= c #1E86BB",
+"- c #1784B8",
+"; c #1C86BB",
+"> c #2389BF",
+", c #2992CC",
+"' c #52718E",
+") c #3094CD",
+"! c #1A93CF",
+"~ c #31759F",
+"{ c #2F6F95",
+"] c #138FC9",
+"^ c #1689BF",
+"/ c #1A87BD",
+"( c #257AA7",
+"_ c #198BC2",
+": c #318CC1",
+"< c #208DC5",
+"[ c #375F7B",
+"} c #2778A4",
+"| c #1788BF",
+"1 c #069ADA",
+"2 c #059BDC",
+"3 c #0898D6",
+"4 c #059BDB",
+"5 c #0997D4",
+"6 c #108CC5",
+"7 c #318FC5",
+"8 c #1696D3",
+"9 c #366280",
+"0 c #28729B",
+"a c #158DC5",
+"b c #039CDD",
+"c c #049BDB",
+"d c #0D93CF",
+"e c #1987BB",
+"f c #1987BC",
+"g c #049DDD",
+"h c #108EC7",
+"i c #079ADA",
+"j c #2598D5",
+"k c #2F79A5",
+"l c #32729A",
+"m c #3B586F",
+"n c #385870",
+"o c #0E95D2",
+"p c #1090CB",
+"q c #178BC3",
+"r c #2C759F",
+"s c #217EAE",
+"t c #1887BC",
+"u c #2288BE",
+"v c #2598D4",
+"w c #4E789A",
+"x c #119BDA",
+"y c #376788",
+"z c #2F77A2",
+"A c #434345",
+"B c #33617F",
+"C c #0798D7",
+"D c #1F81B3",
+"E c #148FC9",
+"F c #217DAC",
+"G c #158CC4",
+"H c #2083B5",
+"I c #2C7CA9",
+"J c #0F9CDD",
+"K c #497CA2",
+"L c #1298D7",
+"M c #37688A",
+"N c #346E94",
+"O c #424345",
+"P c #29749E",
+"Q c #0898D7",
+"R c #2374A0",
+"S c #0D94D1",
+"T c #1888BE",
+"U c #237DAB",
+"V c #2A7AA6",
+"W c #1396D3",
+"X c #01A0E3",
+"Y c #356C90",
+"Z c #30739B",
+"` c #3C5468",
+" . c #1F87BD",
+".. c #1191CC",
+"+. c #1B82B4",
+"@. c #0B95D3",
+"#. c #128DC6",
+"$. c #1094D0",
+"%. c #0D99D9",
+"&. c #049EE0",
+"*. c #00A0E3",
+"=. c #109CDC",
+"-. c #337097",
+";. c #2A7EAD",
+">. c #2976A1",
+",. c #138CC4",
+"'. c #0E92CD",
+"). c #0C95D2",
+"!. c #099FE1",
+"~. c #2599D6",
+"{. c #2981B3",
+"]. c #2A79A6",
+"^. c #1E83B6",
+"/. c #1691CC",
+"(. c #0F91CD",
+"_. c #138CC5",
+":. c #019FE2",
+"<. c #2499D6",
+"[. c #1198D6",
+"}. c #28739D",
+"|. c #1885BA",
+"1. c #1F86BA",
+"2. c #2189BF",
+"3. c #059DDF",
+"4. c #029EE0",
+"5. c #128CC5",
+"6. c #0B96D4",
+"7. c #3482B1",
+"8. c #1C7DAD",
+"9. c #287DAD",
+"0. c #287FAF",
+"a. c #1397D5",
+"b. c #049CDD",
+"c. c #118CC5",
+"d. c #1585BA",
+"e. c #536B82",
+"f. c #3092CA",
+"g. c #1099D8",
+"h. c #2684B6",
+"i. c #2B7DAC",
+"j. c #0D9AD9",
+"k. c #069BDB",
+"l. c #3094CC",
+"m. c #2599D5",
+"n. c #129BDA",
+"o. c #079DDE",
+"p. c #0A9FE1",
+" . + @ # $ % ",
+" . & * = - ; > , & % ",
+" ' ) ! ~ { ] ^ / ( _ : ' ",
+" . ) < [ } | 1 2 3 4 5 6 7 % ",
+" & 8 9 0 a b c d e f g h i & ",
+". j k l m n o p q r s b t u v % ",
+"w x y z A B C D E F p G H I J w ",
+"K L M N O P Q R ] S T U V W X K ",
+"K L Y Z ` ...+.@.#.$.%.&.*.X K ",
+"w =.-.;.>...,.2 ,.'.).*.*.*.!.w ",
+". ~.{.].f ^./.*.(.d _.:.*.*.<.% ",
+" & [.}.|.1.2.3.4.#.5.6.*.X & ",
+" . 7.8.9.0.a.4.*.b.c.d.4.) % ",
+" e.f.g.h.i.j.*.*.:.k.l.' ",
+" . & m.n.o.X p.~.& % ",
+" . w K K w % "};
diff --git a/src/xpm/tremfusion.xpm b/src/xpm/tremfusion.xpm
deleted file mode 100644
index 2c549b5d..00000000
--- a/src/xpm/tremfusion.xpm
+++ /dev/null
@@ -1,150 +0,0 @@
-/* XPM */
-static char * tremfusion_xpm[] = {
-"16 16 131 2",
-" c None",
-". c #093433",
-"+ c #0E3335",
-"@ c #092425",
-"# c #020404",
-"$ c #00211C",
-"% c #245C67",
-"& c #123E41",
-"* c #0C3B3B",
-"= c #143F43",
-"- c #081214",
-"; c #030505",
-"> c #020202",
-", c #06302E",
-"' c #155457",
-") c #0C4645",
-"! c #114445",
-"~ c #184045",
-"{ c #14383B",
-"] c #01120F",
-"^ c #050D0C",
-"/ c #104142",
-"( c #1A595E",
-"_ c #21676F",
-": c #266E77",
-"< c #216A72",
-"[ c #256E76",
-"} c #21646B",
-"| c #11393C",
-"1 c #081213",
-"2 c #071A1A",
-"3 c #1D4E55",
-"4 c #1B5A60",
-"5 c #27717B",
-"6 c #2B7681",
-"7 c #2D7C87",
-"8 c #27767E",
-"9 c #2F818E",
-"0 c #338593",
-"a c #286C77",
-"b c #091A1B",
-"c c #144448",
-"d c #1C595F",
-"e c #34808F",
-"f c #3F91A3",
-"g c #3C8A9D",
-"h c #35818F",
-"i c #357C8B",
-"j c #398B9C",
-"k c #22626B",
-"l c #072020",
-"m c #031F1E",
-"n c #1A5658",
-"o c #327586",
-"p c #499BB5",
-"q c #3A7286",
-"r c #4892A8",
-"s c #3F97AA",
-"t c #3B8294",
-"u c #2B6F7B",
-"v c #0D3B3D",
-"w c #377B8B",
-"x c #275B64",
-"y c #388999",
-"z c #3D8798",
-"A c #22525D",
-"B c #357A89",
-"C c #338693",
-"D c #358695",
-"E c #28717C",
-"F c #215761",
-"G c #285C66",
-"H c #29606D",
-"I c #3C8799",
-"J c #307683",
-"K c #194F55",
-"L c #358492",
-"M c #348896",
-"N c #2D7883",
-"O c #1B474E",
-"P c #2C6B77",
-"Q c #29626D",
-"R c #2A5963",
-"S c #2A616C",
-"T c #1C585E",
-"U c #1C535A",
-"V c #215964",
-"W c #2B606E",
-"X c #265764",
-"Y c #2F6774",
-"Z c #306574",
-"` c #1F4B52",
-" . c #296772",
-".. c #215B63",
-"+. c #175458",
-"@. c #29636F",
-"#. c #307483",
-"$. c #376478",
-"%. c #2F6C7B",
-"&. c #346C7F",
-"*. c #29717C",
-"=. c #1E5C63",
-"-. c #1B565D",
-";. c #3B8599",
-">. c #2D6776",
-",. c #2E6673",
-"'. c #255F68",
-"). c #34808D",
-"!. c #286A74",
-"~. c #1B5459",
-"{. c #195157",
-"]. c #15494D",
-"^. c #216067",
-"/. c #26727B",
-"(. c #1B575C",
-"_. c #21626A",
-":. c #317F8C",
-"<. c #2B6C79",
-"[. c #18484E",
-"}. c #296571",
-"|. c #2F7482",
-"1. c #3B879A",
-"2. c #256872",
-"3. c #1F4E54",
-"4. c #295F6A",
-"5. c #13474B",
-"6. c #3B7B8F",
-"7. c #396C83",
-"8. c #356276",
-"9. c #286973",
-"0. c #1A555C",
-" . + @ # ",
-" $ % & * = - ; > ",
-" , ' ) ! ~ { ] ^ ",
-" / ( _ : < [ } | 1 2 ",
-" 3 4 5 6 7 8 9 0 a b ",
-" c d e f g h i j e k l m ",
-" n o p q r s t u v ",
-" w x y z A B ",
-" C D E F G H I J K ",
-" L M N O P Q R S T ",
-" U V W X Y Z ` . ..+.",
-" @.#. $.%. &.*. =. ",
-" -. ;.>.,. '.).!. ~. ",
-" {.]. ^./.(._.:.<. [. ",
-" }.|.1.2.3.4. ",
-" 5.6.7.8.9.0. "};
diff --git a/src/xpm/warfork.xpm b/src/xpm/warfork.xpm
new file mode 100644
index 00000000..617e199c
--- /dev/null
+++ b/src/xpm/warfork.xpm
@@ -0,0 +1,106 @@
+/* XPM */
+static char * warfork_xpm[] = {
+"16 16 87 1",
+" c #000C18",
+". c #000F1A",
+"+ c #00111C",
+"@ c #302A32",
+"# c #302A33",
+"$ c #312B33",
+"% c #F2908D",
+"& c #F3908D",
+"* c #533D43",
+"= c #322B34",
+"- c #121B25",
+"; c #1A1F28",
+"> c #27262E",
+", c #533C42",
+"' c #101E2B",
+") c #324E66",
+"! c #3A566F",
+"~ c #F6928F",
+"{ c #04121D",
+"] c #2D465C",
+"^ c #91BEED",
+"/ c #89B5E1",
+"( c #614449",
+"_ c #F99491",
+": c #EB8C8A",
+"< c #764A4C",
+"[ c #214159",
+"} c #23394E",
+"| c #1F222B",
+"1 c #F3908E",
+"2 c #604349",
+"3 c #3E3139",
+"4 c #FA9491",
+"5 c #2D242B",
+"6 c #25435A",
+"7 c #344F67",
+"8 c #000E19",
+"9 c #BC7474",
+"0 c #B36F70",
+"a c #AA6A6C",
+"b c #955F62",
+"c c #9C6365",
+"d c #D48080",
+"e c #2B465C",
+"f c #071926",
+"g c #000915",
+"h c #6C4A4F",
+"i c #F89390",
+"j c #F79390",
+"k c #47363D",
+"l c #2A2730",
+"m c #F18F8D",
+"n c #F99390",
+"o c #8A5A5D",
+"p c #2E485F",
+"q c #354F68",
+"r c #1D2F40",
+"s c #1A3041",
+"t c #01131E",
+"u c #000D18",
+"v c #28262F",
+"w c #FC9592",
+"x c #DC8484",
+"y c #0B1620",
+"z c #C27677",
+"A c #FF9C99",
+"B c #44343C",
+"C c #314B63",
+"D c #1C3144",
+"E c #00101B",
+"F c #02121D",
+"G c #7B5155",
+"H c #5B4146",
+"I c #000D19",
+"J c #46363D",
+"K c #88585C",
+"L c #0C1722",
+"M c #000B15",
+"N c #1A2F41",
+"O c #0E2130",
+"P c #000D17",
+"Q c #00111B",
+"R c #21394C",
+"S c #37536B",
+"T c #355068",
+"U c #000B14",
+"V c #000811",
+" .++++++",
+"@@@@@@@#$...+.++",
+"%%%%%%%&%%..++++",
+"................",
+"*=..-;..>,')!!!!",
+"~~{.~~..~~]^^^^/",
+"(_..~~..:<[^}...",
+"|12.1~.3456^7...",
+"890~ab~cd.e^^^^f",
+"ghijklmno.p^qrst",
+"uvwxy8zAB.C^D..+",
+"EFGHI JKLMN^O.PP",
+"+.......EQ......",
+"++++++.++.s^^^^^",
+"++++++++++.RSTTT",
+"+++++++++++UVVVV"};
diff --git a/src/xqf.c b/src/xqf.c
index 47cb1daf..b2badebc 100644
--- a/src/xqf.c
+++ b/src/xqf.c
@@ -1829,7 +1829,6 @@ int server_clist_event_callback (GtkWidget *widget, GdkEvent *event) {
case Q4_SERVER:
case REACTION_SERVER:
case SMOKINGUNS_SERVER:
- case TREMFUSION_SERVER:
case TREMULOUSGPP_SERVER:
case TREMULOUS_SERVER:
case WO_SERVER: