Summary: Add nativity check for find_closest_city()
                 Project: Freeciv
            Submitted by: persia
            Submitted on: Sat 20 Apr 2013 08:55:07 AM JST
                Category: general
                Priority: 5 - Normal
                  Status: None
                 Privacy: Public
             Assigned to: None
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
         Planned Release: 



The find_closest_city() function takes an is_ocean parameter that is used for
two different purposes: to identify nativity given certain assumptions, and to
find coastal/border cities.  The attached patch extends this function to take
a unit_class argument used for nativity identification, and replaces the use
of is_ocean in three places:

1) When the AI has a defending unit with nothing to do (e.g. city disbanded),
that unit currently looks for a new city with an apparently reversed nativity
check: UMT_LAND units head for coastal cities, and other units (sea/air) look
for the closest city (which may not be reachable for sea units).  This patch
causes bored defenders to seek a native city.  Autogame testing showed some
differences with this change, although I was unable to idenfity specific
generalisation of behaviour: my assumption is that sea units are more likely
to rest in cities (where they are potentially defended by land units), and
that land units might choose to fortify in other land cities (potentially
closer to land borders).

2) When creating a new unit with the editor, assign a homecity that is native
to the class being created, rather than only doing this for UMT_SEA units.

3) When teleporting a UTYF_UNDISBANDABLE unit in try_to_save_unit(), teleport
to a city native to the transport, rather than always a coastal city.  This
only affects rulesets with non-UMT_SEA transports that can carry
UTYF_UNDISBANDABLE units, so results were not shown in any of my autogame
testing (no differences, but not actually exercised meaningfully).

    This patch does not attempt to remove the is_ocean argument entirely. 
This remains useful for dai_manage_diplomat(), where the intent is to send
bored diplomats to coastal cities to help defend the edges of the continent in
cases where there is no access to other civilisations by land.  Once AI
diplomats learn how to use transport, this argument may be safely removed. 
Alternately, this could usefully be adjusted to indicate border/coastal cities
rather than is_ocean: the current model behaves suboptimally when cities are
adjacent to small lakes (also not addressed by this patch).

Note that this patch expects prior application of the wipe_unit() refactoring
from patch #3804 (and bug# 20744).


File Attachments:

Date: Sat 20 Apr 2013 08:55:07 AM JST  Name: native-find-closest-city.patch 
Size: 9kB   By: persia



Reply to this item at:


  Message sent via/by Gna!

Freeciv-dev mailing list

Reply via email to