diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-gtk/wldlg.c freeciv/client/gui-gtk/wldlg.c --- FreecivCVS/client/gui-gtk/wldlg.c Sun Apr 2 09:46:17 2000 +++ freeciv/client/gui-gtk/wldlg.c Mon May 29 15:18:49 2000 @@ -77,8 +77,8 @@ char *worklist_names_ptrs[MAX_LEN_WORKLIST+1]; char worklist_names[MAX_LEN_WORKLIST][200]; int worklist_ids[MAX_LEN_WORKLIST]; - char *worklist_avail_names_ptrs[B_LAST+1+U_LAST+1+1]; - char worklist_avail_names[B_LAST+1+U_LAST+1][200]; + char *worklist_avail_names_ptrs[B_LAST+1+U_LAST+1+MAX_NUM_WORKLISTS+1+1]; + char worklist_avail_names[B_LAST+1+U_LAST+1+MAX_NUM_WORKLISTS+1][200]; int worklist_avail_ids[B_LAST+1+U_LAST+1+MAX_NUM_WORKLISTS+1]; int worklist_avail_num_improvements; int worklist_avail_num_targets; diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/client/gui-xaw/wldlg.c freeciv/client/gui-xaw/wldlg.c --- FreecivCVS/client/gui-xaw/wldlg.c Sun Apr 2 09:46:18 2000 +++ freeciv/client/gui-xaw/wldlg.c Mon May 29 15:13:53 2000 @@ -88,8 +88,8 @@ char *worklist_names_ptrs[MAX_LEN_WORKLIST+1]; char worklist_names[MAX_LEN_WORKLIST][200]; int worklist_ids[MAX_LEN_WORKLIST]; - char *worklist_avail_names_ptrs[B_LAST+1+U_LAST+1+1]; - char worklist_avail_names[B_LAST+1+U_LAST+1][200]; + char *worklist_avail_names_ptrs[B_LAST+1+U_LAST+1+MAX_NUM_WORKLISTS+1+1]; + char worklist_avail_names[B_LAST+1+U_LAST+1+MAX_NUM_WORKLISTS+1][200]; int worklist_avail_ids[B_LAST+1+U_LAST+1+MAX_NUM_WORKLISTS+1]; int worklist_avail_num_improvements; int worklist_avail_num_targets; diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/common/map.c freeciv/common/map.c --- FreecivCVS/common/map.c Thu May 25 11:28:44 2000 +++ freeciv/common/map.c Mon May 29 15:13:53 2000 @@ -282,15 +282,15 @@ ***************************************************************/ int isnt_terrain_near_tile(int x, int y, enum tile_terrain_type t) { - if (map_get_terrain(x-1, y+1)!=t) return 1; - if (map_get_terrain(x+1, y-1)!=t) return 1; - if (map_get_terrain(x-1, y-1)!=t) return 1; - if (map_get_terrain(x+1, y+1)!=t) return 1; - if (map_get_terrain(x, y+1)!=t) return 1; - if (map_get_terrain(x-1, y)!=t) return 1; - if (map_get_terrain(x+1, y)!=t) return 1; - if (map_get_terrain(x, y-1)!=t) return 1; - return 0; + if (map_get_terrain(x-1, y+1)==t) return 0; + if (map_get_terrain(x+1, y-1)==t) return 0; + if (map_get_terrain(x-1, y-1)==t) return 0; + if (map_get_terrain(x+1, y+1)==t) return 0; + if (map_get_terrain(x, y+1)==t) return 0; + if (map_get_terrain(x-1, y)==t) return 0; + if (map_get_terrain(x+1, y)==t) return 0; + if (map_get_terrain(x, y-1)==t) return 0; + return 1; } /*************************************************************** diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/server/cityhand.c freeciv/server/cityhand.c --- FreecivCVS/server/cityhand.c Thu May 25 11:28:44 2000 +++ freeciv/server/cityhand.c Mon May 29 15:13:53 2000 @@ -563,14 +563,18 @@ if ((pcity->is_building_unit != is_unit || (!is_unit&&is_wonder(pcity->currently_building)!=is_wonder(target))) && !(pcity->turn_changed_target == game.year || - game_next_year(pcity->turn_last_built) >= game.year)) + game_next_year(pcity->turn_last_built) >= game.year)) { pcity->shield_stock /= 2; + /* Only set turn_changed_target when we actually cop the penalty - + otherwise you can change to something of the same type first, and + suffer no penalty for any later changes in the same turn */ + pcity->turn_changed_target = game.year; + } /* Change build target. */ pcity->currently_building = target; pcity->is_building_unit = is_unit; - pcity->turn_changed_target = game.year; /* What's the name of the target? */ if (is_unit) diff -ru -X /home/jjm/cvs/no.freeciv FreecivCVS/server/unithand.c freeciv/server/unithand.c --- FreecivCVS/server/unithand.c Sun May 28 00:46:55 2000 +++ freeciv/server/unithand.c Mon May 29 15:15:56 2000 @@ -298,9 +298,14 @@ if ((pcity=player_find_city_by_id(pplayer, req->city_id)) && pcity->owner == punit->owner) { unit_list_insert(&pcity->units_supported, punit); + city_refresh(pcity); + send_city_info(pplayer, pcity); - if((pcity=player_find_city_by_id(pplayer, punit->homecity))) + if((pcity=player_find_city_by_id(pplayer, punit->homecity))) { unit_list_unlink(&pcity->units_supported, punit); + city_refresh(pcity); + send_city_info(pplayer, pcity); + } punit->homecity=req->city_id; send_unit_info(pplayer, punit);