Index: src/ui/ui_public.h =================================================================== --- src/ui/ui_public.h (revision 1155) +++ src/ui/ui_public.h (working copy) @@ -152,7 +152,8 @@ SORT_HOST, SORT_MAP, SORT_CLIENTS, - SORT_PING + SORT_PING, + SORT_GAME } serverSortField_t; Index: src/ui/ui_main.c =================================================================== --- src/ui/ui_main.c (revision 1155) +++ src/ui/ui_main.c (working copy) @@ -3414,6 +3414,12 @@ } } + case SORT_GAME: + { + char *type = Info_ValueForKey( info, "game" ); + return type[ 0 ] ? type : "base"; + } + case SORT_MAP: return Info_ValueForKey( info, "mapname" ); Index: src/client/cl_ui.c =================================================================== --- src/client/cl_ui.c (revision 1155) +++ src/client/cl_ui.c (working copy) @@ -402,6 +402,15 @@ } break; + case SORT_GAME: + { + char *game1 = server1->game, + *game2 = server2->game; + if( !game1[ 0 ] ) game1 = "base"; + if( !game2[ 0 ] ) game2 = "base"; + res = Q_stricmp( game1, game2 ); + } + break; case SORT_MAP: res = Q_stricmp( server1->mapName, server2->mapName ); break; Index: ui/joinserver.menu =================================================================== --- ui/joinserver.menu (revision 1155) +++ ui/joinserver.menu (working copy) @@ -33,10 +33,11 @@ #define BOTBUTT_W (BOT_W/5) #define BOTBUTT_H BOT_H -#define SERVER_C 0.6 +#define SERVER_C 0.5 #define MAP_C 0.2 #define PLAYERS_C 0.1 #define PING_C 0.1 +#define GAME_C 0.1 #define LIST_W (W-(2*BORDER)) #define LIST_H (H-((3*BORDER)+TOP_H+BOT_H+BCJ_H)) #define LIST_X BORDER @@ -377,6 +378,48 @@ decoration } + itemDef + { + name game + group grpTabs + type ITEM_TYPE_BUTTON + text "Game" + textscale .33 + style WINDOW_STYLE_EMPTY + rect (LIST_X+((SERVER_C+MAP_C+PLAYERS_C+PING_C)*LIST_W)) LIST_Y (GAME_C*LIST_W) HEADFOOT_H + textalign ALIGN_LEFT + textvalign VALIGN_CENTER + textalignx LIST_TOFF + border WINDOW_BORDER_FULL + bordercolor 0.5 0.5 0.5 1 + forecolor 1 1 1 1 + backcolor 0.2 0.2 0.2 1 + outlinecolor 0.1 0.1 0.1 0.5 + visible MENU_TRUE + action + { + play "sound/misc/menu1.wav"; + uiScript ServerSort 4; + + setitemcolor grpColumn backcolor 0 0 0 0; + setitemcolor gameColumn backcolor 0.3 1 1 0.5 + } + } + + itemDef + { + name gameColumn + group grpColumn + rect (LIST_X+((SERVER_C+MAP_C+PLAYERS_C+PING_C)*LIST_W)) (LIST_Y+HEADFOOT_H) (GAME_C*LIST_W) (LIST_H-(2*HEADFOOT_H)) + style WINDOW_STYLE_FILLED + border WINDOW_BORDER_FULL + backcolor 0 0 0 0 + bordersize 1 + bordercolor .5 .5 .5 1 + visible MENU_TRUE + decoration + } + // SERVER LIST // itemDef @@ -396,11 +439,12 @@ backcolor 0.2 0.2 0.2 1 outlinecolor 0.1 0.1 0.1 0.5 visible MENU_TRUE - columns 4 - LIST_TOFF ((SERVER_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT - (LIST_TOFF+((SERVER_C)*LIST_W)) ((MAP_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT - (LIST_TOFF+((SERVER_C+MAP_C)*LIST_W)) ((PLAYERS_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT - (LIST_TOFF+((SERVER_C+MAP_C+PLAYERS_C)*LIST_W)) ((PING_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + columns 5 + LIST_TOFF ((SERVER_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + (LIST_TOFF+((SERVER_C)*LIST_W)) ((MAP_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + (LIST_TOFF+((SERVER_C+MAP_C)*LIST_W)) ((PLAYERS_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + (LIST_TOFF+((SERVER_C+MAP_C+PLAYERS_C)*LIST_W)) ((PING_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT + (LIST_TOFF+((SERVER_C+MAP_C+PLAYERS_C+PING_C)*LIST_W)) ((GAME_C*LIST_W)-(3*LIST_TOFF)) ALIGN_LEFT doubleClick { uiScript JoinServer } }