<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40636 >
This patch adds vision range property to bases. Vision is given to player who owns the tile where base is. Applies on top of #40635 - ML
diff -Nurd -X.diff_ignore freeciv/common/base.h freeciv/common/base.h --- freeciv/common/base.h 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/common/base.h 2009-01-07 18:42:38.000000000 +0200 @@ -48,6 +48,7 @@ int build_time; int defense_bonus; int border_sq; + int vision_sq; bv_unit_classes native_to; bv_base_flags flags; diff -Nurd -X.diff_ignore freeciv/common/packets.def freeciv/common/packets.def --- freeciv/common/packets.def 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/common/packets.def 2009-01-07 18:59:19.000000000 +0200 @@ -430,7 +430,7 @@ UINT8 forced_science; UINT8 forced_luxury; UINT8 forced_gold; - BOOL city_reveal_tiles; + BOOL vision_reveal_tiles; UINT8 min_city_center_output[O_MAX]; UINT8 min_dist_bw_cities; UINT8 init_vis_radius_sq; @@ -1317,7 +1317,9 @@ BASE_GUI gui_type; BV_UNIT_CLASSES native_to; UINT8 build_time; + UINT8 defense_bonus; UINT8 border_sq; + UINT8 vision_sq; BV_BASE_FLAGS flags; end diff -Nurd -X.diff_ignore freeciv/server/citytools.c freeciv/server/citytools.c --- freeciv/server/citytools.c 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/server/citytools.c 2009-01-07 19:05:33.000000000 +0200 @@ -874,7 +874,7 @@ old_vision = pcity->server.vision; new_vision = vision_new(ptaker, pcenter); pcity->server.vision = new_vision; - vision_reveal_tiles(new_vision, game.info.city_reveal_tiles); + vision_reveal_tiles(new_vision, game.info.vision_reveal_tiles); vision_layer_iterate(v) { vision_change_sight(new_vision, v, vision_get_sight(old_vision, v)); @@ -1084,7 +1084,7 @@ /* Before arranging workers to show unknown land */ pcity->server.vision = vision_new(pplayer, ptile); - vision_reveal_tiles(pcity->server.vision, game.info.city_reveal_tiles); + vision_reveal_tiles(pcity->server.vision, game.info.vision_reveal_tiles); city_refresh_vision(pcity); city_list_prepend(pplayer->cities, pcity); diff -Nurd -X.diff_ignore freeciv/server/maphand.c freeciv/server/maphand.c --- freeciv/server/maphand.c 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/server/maphand.c 2009-01-07 19:00:00.000000000 +0200 @@ -603,12 +603,12 @@ } /************************************************************************** -There doesn't have to be a city. + There doesn't have to be a city. **************************************************************************/ -static void map_refog_circle(struct player *pplayer, struct tile *ptile, - int old_radius_sq, int new_radius_sq, - bool can_reveal_tiles, - enum vision_layer vlayer) +void map_refog_circle(struct player *pplayer, struct tile *ptile, + int old_radius_sq, int new_radius_sq, + bool can_reveal_tiles, + enum vision_layer vlayer) { if (old_radius_sq != new_radius_sq) { int max_radius = MAX(old_radius_sq, new_radius_sq); @@ -1547,6 +1547,23 @@ } } + if (ploser != powner) { + base_type_iterate(pbase) { + if (tile_has_base(ptile, pbase) + && pbase->vision_sq >= 0) { + /* Transfer base provided vision to new owner */ + if (powner) { + map_refog_circle(powner, ptile, -1, pbase->vision_sq, + game.info.vision_reveal_tiles, V_MAIN); + } + if (ploser) { + map_refog_circle(ploser, ptile, pbase->vision_sq, -1, + game.info.vision_reveal_tiles, V_MAIN); + } + } + } base_type_iterate_end; + } + tile_set_owner(ptile, powner, psource); if (ploser != powner) { diff -Nurd -X.diff_ignore freeciv/server/maphand.h freeciv/server/maphand.h --- freeciv/server/maphand.h 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/server/maphand.h 2009-01-07 18:56:22.000000000 +0200 @@ -61,6 +61,10 @@ void map_show_tile(struct player *pplayer, struct tile *ptile); void map_show_circle(struct player *pplayer, struct tile *ptile, int radius_sq); +void map_refog_circle(struct player *pplayer, struct tile *ptile, + int old_radius_sq, int new_radius_sq, + bool can_reveal_tiles, + enum vision_layer vlayer); void map_show_all(struct player *pplayer); bool map_is_known_and_seen(const struct tile *ptile, struct player *pplayer, diff -Nurd -X.diff_ignore freeciv/server/ruleset.c freeciv/server/ruleset.c --- freeciv/server/ruleset.c 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/server/ruleset.c 2009-01-07 18:58:59.000000000 +0200 @@ -2017,6 +2017,8 @@ pbase->build_time = secfile_lookup_int(file, "%s.build_time", section); pbase->border_sq = secfile_lookup_int_default(file, -1, "%s.border_sq", section); + pbase->vision_sq = secfile_lookup_int_default(file, -1, "%s.vision_sq", + section); pbase->defense_bonus = secfile_lookup_int_default(file, 0, "%s.defense_bonus", section); @@ -2842,7 +2844,7 @@ } /* civ1 & 2 didn't reveal tiles */ - game.info.city_reveal_tiles = + game.info.vision_reveal_tiles = secfile_lookup_bool_default(file, FALSE, "parameters.vision_reveal_tiles"); /* City Styles ... */ @@ -3440,7 +3442,9 @@ packet.gui_type = b->gui_type; packet.build_time = b->build_time; + packet.defense_bonus = b->defense_bonus; packet.border_sq = b->border_sq; + packet.vision_sq = b->vision_sq; packet.flags = b->flags; diff -Nurd -X.diff_ignore freeciv/server/savegame.c freeciv/server/savegame.c --- freeciv/server/savegame.c 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/server/savegame.c 2009-01-07 19:06:37.000000000 +0200 @@ -2833,7 +2833,7 @@ /* adding the city contribution to fog-of-war */ pcity->server.vision = vision_new(plr, pcenter); - vision_reveal_tiles(pcity->server.vision, game.info.city_reveal_tiles); + vision_reveal_tiles(pcity->server.vision, game.info.vision_reveal_tiles); city_refresh_vision(pcity); city_list_append(plr->cities, pcity); diff -Nurd -X.diff_ignore freeciv/server/unittools.c freeciv/server/unittools.c --- freeciv/server/unittools.c 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/server/unittools.c 2009-01-07 19:00:28.000000000 +0200 @@ -730,8 +730,17 @@ if (what != S_LAST) { if (what == S_PILLAGE_BASE) { if (territory_claiming_base(first_base)) { + /* Clearing borders will take care of the vision providing + * bases as well. */ map_clear_border(ptile); map_claim_ownership(ptile, NULL, NULL); + } else if (first_base->vision_sq >= 0) { + /* Base provides vision, but no borders. */ + struct player *owner = tile_owner(ptile); + if (owner) { + map_refog_circle(owner, ptile, first_base->vision_sq, -1, + game.info.vision_reveal_tiles, V_MAIN); + } } tile_remove_base(ptile, first_base); } else { @@ -802,6 +811,13 @@ if (territory_claiming_base(old_base)) { map_clear_border(ptile); map_claim_ownership(ptile, NULL, NULL); + } else if (old_base->vision_sq >= 0) { + /* Base provides vision, but no borders. */ + struct player *owner = tile_owner(ptile); + if (owner) { + map_refog_circle(owner, ptile, old_base->vision_sq, -1, + game.info.vision_reveal_tiles, V_MAIN); + } } tile_remove_base(ptile, old_base); } @@ -819,6 +835,12 @@ map_claim_border(ptile, unit_owner(punit)); city_thaw_workers_queue(); city_refresh_queue_processing(); + } else if (new_base->vision_sq > 0) { + struct player *owner = tile_owner(ptile); + if (owner) { + map_refog_circle(owner, ptile, -1, new_base->vision_sq, + game.info.vision_reveal_tiles, V_MAIN); + } } unit_activity_done = TRUE; diff -Nurd -X.diff_ignore freeciv/version.in freeciv/version.in --- freeciv/version.in 2009-01-07 18:39:50.000000000 +0200 +++ freeciv/version.in 2009-01-07 18:41:09.000000000 +0200 @@ -23,5 +23,5 @@ # - Avoid adding a new mandatory capability to the development branch for # as long as possible. We want to maintain network compatibility with # the stable branch for as long as possible. -NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel.2009.Jan.07-2" +NETWORK_CAPSTRING_MANDATORY="+Freeciv.Devel.2009.Jan.07-3" NETWORK_CAPSTRING_OPTIONAL=""
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev