diff -r -u freeciv-1.7.2-base/common/packets.c freeciv-1.7.2/common/packets.c --- freeciv-1.7.2-base/common/packets.c Fri Jan 15 15:10:48 1999 +++ freeciv-1.7.2/common/packets.c Fri Jan 15 15:10:20 1999 @@ -17,6 +17,7 @@ #include #include +#include char our_capability[MSG_SIZE]; diff -r -u freeciv-1.7.2-base/client/packhand.c freeciv-1.7.2/client/packhand.c --- freeciv-1.7.2-base/client/packhand.c Fri Jan 15 12:49:51 1999 +++ freeciv-1.7.2/client/packhand.c Fri Jan 15 12:50:15 1999 @@ -576,6 +576,18 @@ pplayer->future_tech=pinfo->future_tech; pplayer->ai.tech_goal=pinfo->tech_goal; + + if(!pplayer->conn){ + /* It is only the client that does this */ + + pplayer->conn = (struct connection *)malloc(sizeof(struct connection)); + pplayer->conn->sock = 0; + pplayer->conn->used = 0; + pplayer->conn->player = NULL; + } + + strcpy(pplayer->conn->capability, pinfo->capability); + if(get_client_state()==CLIENT_GAME_RUNNING_STATE && pplayer==game.player_ptr) { strcpy(name, pplayer->name); if(poptechup) { Only in freeciv-1.7.2/client: packhand.c.orig diff -r -u freeciv-1.7.2-base/common/packets.c freeciv-1.7.2/common/packets.c --- freeciv-1.7.2-base/common/packets.c Fri Jan 15 12:49:46 1999 +++ freeciv-1.7.2/common/packets.c Fri Jan 15 12:53:31 1999 @@ -658,6 +658,10 @@ cptr=put_int8(cptr, pinfo->revolution); cptr=put_int8(cptr, pinfo->tech_goal); cptr=put_int8(cptr, pinfo->ai?1:0); + if (pc && has_capability("clientcapabilities", pc->capability)) { + cptr=put_string(cptr, pinfo->capability); + } + put_int16(buffer, cptr-buffer); return send_connection_data(pc, buffer, cptr-buffer); @@ -705,6 +709,11 @@ cptr=get_int8(cptr, &pinfo->tech_goal); cptr=get_int8(cptr, &pinfo->ai); + if (has_capability("clientcapabilities", pc->capability)) + cptr=get_string(cptr, pinfo->capability); + else + pinfo->capability[0] = '\0'; + remove_packet_from_buffer(&pc->buffer); return pinfo; } @@ -753,6 +762,7 @@ cptr=put_int8(cptr, pinfo->techpenalty); cptr=put_int8(cptr, pinfo->foodbox); cptr=put_int8(cptr, pinfo->civstyle); + put_int16(buffer, cptr-buffer); return send_connection_data(pc, buffer, cptr-buffer); Only in freeciv-1.7.2/common: packets.c.orig Only in freeciv-1.7.2/common: packets.c.rej Only in freeciv-1.7.2/common: packets.c~ diff -r -u freeciv-1.7.2-base/common/packets.h freeciv-1.7.2/common/packets.h --- freeciv-1.7.2-base/common/packets.h Fri Jan 15 12:49:46 1999 +++ freeciv-1.7.2/common/packets.h Fri Jan 15 12:55:09 1999 @@ -346,6 +346,7 @@ char addr[MAX_LENGTH_ADDRESS]; int revolution; int ai; + char capability[MSG_SIZE]; }; Only in freeciv-1.7.2/common: packets.h~ diff -r -u freeciv-1.7.2-base/common/shared.h freeciv-1.7.2/common/shared.h --- freeciv-1.7.2-base/common/shared.h Fri Jan 15 12:49:46 1999 +++ freeciv-1.7.2/common/shared.h Fri Jan 15 12:55:45 1999 @@ -70,7 +70,7 @@ */ /* The default string is really simple */ -#define CAPABILITY "+1.7" +#define CAPABILITY "+1.7 clientcapabilities" #define CITY_NAMES_FONT "10x20" #define BROADCAST_EVENT -2 Only in freeciv-1.7.2/common: shared.h~ diff -r -u freeciv-1.7.2-base/server/plrhand.c freeciv-1.7.2/server/plrhand.c --- freeciv-1.7.2-base/server/plrhand.c Fri Jan 15 12:49:48 1999 +++ freeciv-1.7.2/server/plrhand.c Fri Jan 15 12:57:02 1999 @@ -1020,6 +1020,9 @@ strcpy(info.addr, game.players[i].addr); info.revolution=game.players[i].revolution; info.ai=game.players[i].ai.control; + if(game.players[i].conn) + strcpy(info.capability,game.players[i].conn->capability); + send_packet_player_info(game.players[o].conn, &info); } } diff -u freeciv-1.7.2-base/server/civserver.c freeciv-1.7.2/server/civserver.c --- freeciv-1.7.2-base/server/civserver.c Tue Dec 22 05:14:37 1998 +++ freeciv-1.7.2/server/civserver.c Fri Jan 15 15:26:07 1999 @@ -1192,6 +1192,7 @@ if(server_state==RUN_GAME_STATE) { send_all_info(pplayer); send_game_state(pplayer, CLIENT_GAME_RUNNING_STATE); + send_player_info(NULL,NULL); } return;