Index: common/city.h =================================================================== RCS file: /home/freeciv/CVS/freeciv/common/city.h,v retrieving revision 1.58 diff -u -r1.58 city.h --- city.h 2000/05/24 19:13:00 1.58 +++ city.h 2000/06/25 16:52:03 @@ -223,6 +223,23 @@ if (! ((x == 0 || x == (CITY_MAP_SIZE-1)) && \ (y == 0 || y == (CITY_MAP_SIZE-1))) ) +#define map_city_map_iterate(city_x, city_y, x_itr, y_itr) \ +{ \ + int MCMI_x, MCMI_y; \ + for (MCMI_x=0; MCMI_x= map.ysize) \ + continue; \ + x_itr = map_adjust_x(city_x + MCMI_x - CITY_MAP_SIZE/2); + + +#define map_city_map_iterate_end \ + } \ +} + /* Iterate a city map, from the center (the city) outwards */ extern int city_map_iterate_outwards_indices[(CITY_MAP_SIZE*CITY_MAP_SIZE)-4][2]; Index: server/citytools.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/citytools.c,v retrieving revision 1.84 diff -u -r1.84 citytools.c --- citytools.c 2000/06/16 17:01:30 1.84 +++ citytools.c 2000/06/25 16:52:10 @@ -1028,6 +1028,7 @@ unit_list_init(&pnewcity->units_supported); city_list_insert(&pplayer->cities, pnewcity); + give_citymap_from_player_to_player(pcity, cplayer, pplayer); map_unfog_city_area(pnewcity); /* transfer_city_units() destroys the city's units_supported Index: server/maphand.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/maphand.c,v retrieving revision 1.47 diff -u -r1.47 maphand.c --- maphand.c 2000/06/23 15:46:22 1.47 +++ maphand.c 2000/06/25 16:52:14 @@ -744,23 +744,18 @@ **************************************************************************/ void map_unfog_pseudo_city_area(struct player *pplayer, int x,int y) { - int i; + int x_itr, y_itr; freelog(LOG_DEBUG, "Unfogging city area at %i,%i",x,y); - unfog_area(pplayer,x,y,1); - for (i = x-1;i<=x+1;i++) - if (is_real_tile(i,y+2)) - unfog_area(pplayer,map_adjust_x(i),y+2,0); - for (i = x-1;i<=x+1;i++) - if (is_real_tile(i,y-2)) - unfog_area(pplayer,map_adjust_x(i),y-2,0); - for (i = y-1;i<=y+1;i++) - if (is_real_tile(x+2,i)) - unfog_area(pplayer,map_adjust_x(x+2),i,0); - for (i = y-1;i<=y+1;i++) - if (is_real_tile(x+2,i)) - unfog_area(pplayer,map_adjust_x(x-2),i,0); + map_city_map_iterate(x, y, x_itr, y_itr) + if (map_get_known(x_itr, y_itr, pplayer)) + unfog_area(pplayer, x_itr, y_itr, 0); + else + map_change_seen(x_itr, y_itr, pplayer->player_no, +1); + map_city_map_iterate_end; } /************************************************************************** @@ -768,23 +763,16 @@ **************************************************************************/ void map_fog_pseudo_city_area(struct player *pplayer, int x,int y) { - int i; + int x_itr, y_itr; - freelog(LOG_DEBUG, "Fogging city area at %i,%i",x,y); + freelog(LOG_DEBUG, "fogging city area at %i,%i",x,y); - fog_area(pplayer,x,y,1); - for (i = x-1;i<=x+1;i++) - if (is_real_tile(i,y+2)) - fog_area(pplayer,map_adjust_x(i),y+2,0); - for (i = x-1;i<=x+1;i++) - if (is_real_tile(i,y-2)) - fog_area(pplayer,map_adjust_x(i),y-2,0); - for (i = y-1;i<=y+1;i++) - if (is_real_tile(x+2,i)) - fog_area(pplayer,map_adjust_x(x+2),i,0); - for (i = y-1;i<=y+1;i++) - if (is_real_tile(x-2,i)) - fog_area(pplayer,map_adjust_x(x-2),i,0); + map_city_map_iterate(x, y, x_itr, y_itr) + if (map_get_known(x_itr, y_itr, pplayer)) + fog_area(pplayer, x_itr, y_itr, 0); + else + map_change_seen(x_itr, y_itr, pplayer->player_no, -1); + map_city_map_iterate_end; } /************************************************************************** @@ -1103,4 +1091,19 @@ } } } +} + +/*************************************************************** +... +***************************************************************/ +void give_citymap_from_player_to_player(struct city *pcity, + struct player *psrc, struct player *pdest) +{ + int x, y; + map_city_map_iterate(pcity->x, pcity->y, x, y) + if (map_get_known(x, y, psrc) + && !map_get_known_and_seen(x, y, pdest->player_no)) { + show_area(pdest, x, y, 0); + } + map_city_map_iterate_end; } Index: server/maphand.h =================================================================== RCS file: /home/freeciv/CVS/freeciv/server/maphand.h,v retrieving revision 1.16 diff -u -r1.16 maphand.h --- maphand.h 2000/06/23 15:46:22 1.16 +++ maphand.h 2000/06/25 16:52:15 @@ -74,5 +74,7 @@ struct player_tile *map_get_player_tile(int x, int y, int playerid); void update_tile_knowledge(struct player *pplayer,int x, int y); void update_player_tile_last_seen(struct player *pplayer, int x, int y); +void give_citymap_from_player_to_player(struct city *pcity, + struct player *psrc, struct player *pdest); #endif /* FC__MAPHAND_H */