Author: sveinung
Date: Sun Jul 27 00:12:47 2014
New Revision: 25731

URL: http://svn.gna.org/viewcvs/freeciv?rev=25731&view=rev
Log:
Make the nativity limits on the source tile for regular attacks consistent

Make everything test if the attacking unit can exist on its tile like
unit_move_to_tile_test() already did. This also makes the limits on the source
tile of regular attacks consistent with those on spy actions.

See bug #22381

Modified:
    branches/S2_5/common/aicore/pf_tools.c
    branches/S2_5/common/combat.c

Modified: branches/S2_5/common/aicore/pf_tools.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/common/aicore/pf_tools.c?rev=25731&r1=25730&r2=25731&view=diff
==============================================================================
--- branches/S2_5/common/aicore/pf_tools.c      (original)
+++ branches/S2_5/common/aicore/pf_tools.c      Sun Jul 27 00:12:47 2014
@@ -31,6 +31,36 @@
 #include "unittype.h"
 
 #include "pf_tools.h"
+
+/**************************************************************************
+  Return TRUE iff a unit of the given unit type can "exist" at this
+  location. This means it can physically be present on the tile (without
+  the use of a transporter).
+
+  A version of can_unit_exist_at_tile()
+**************************************************************************/
+static bool can_exist_at_tile_pf(const struct pf_parameter *param,
+                                 const struct tile *ptile)
+{
+  /* Cities are safe havens except for units in the middle of non-native
+   * terrain. This can happen if adjacent terrain is changed after unit
+   * arrived to city. */
+  if (NULL != tile_city(ptile)
+      && (uclass_has_flag(param->uclass, UCF_BUILD_ANYWHERE)
+          || is_native_near_tile(param->uclass, ptile)
+          || (1 == game.info.citymindist
+              && is_city_channel_tile(param->uclass, ptile, NULL)))) {
+    return TRUE;
+  }
+
+  /* A trireme unit cannot exist in an ocean tile without access to
+   * land. */
+  if (BV_ISSET(param->unit_flags, UTYF_TRIREME) && !is_safe_ocean(ptile)) {
+    return FALSE;
+  }
+
+  return is_native_tile_to_class(param->uclass, ptile);
+}
 
 /*************************************************************
   Cost of moving one normal step.
@@ -191,7 +221,7 @@
     } else {
       move_cost = PF_IMPOSSIBLE_MC;
     }
-  } else if (!is_native_tile_to_class(param->uclass, ptile)) {
+  } else if (!can_exist_at_tile_pf(param, ptile)) {
     if (!BV_ISSET(param->unit_flags, UTYF_MARINES)
         && !uclass_has_flag(param->uclass, UCF_ATT_FROM_NON_NATIVE)
         && (is_non_allied_unit_tile(ptile1, param->owner) 
@@ -226,7 +256,7 @@
     } else {
       move_cost = PF_IMPOSSIBLE_MC;
     }
-  } else if (!is_native_tile_to_class(param->uclass, src_tile)) {
+  } else if (!can_exist_at_tile_pf(param, src_tile)) {
 
     /* Sea-to-Land. */
     if (!is_non_allied_unit_tile(tgt_tile, param->owner)
@@ -339,7 +369,7 @@
     } else {
       move_cost = PF_IMPOSSIBLE_MC;
     }
-  } else if (!is_native_tile_to_class(param->uclass, ptile)) {
+  } else if (!can_exist_at_tile_pf(param, ptile)) {
     if (!BV_ISSET(param->unit_flags, UTYF_MARINES)
         && !uclass_has_flag(param->uclass, UCF_ATT_FROM_NON_NATIVE)
         && (is_non_allied_unit_tile(ptile1, param->owner) 

Modified: branches/S2_5/common/combat.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/common/combat.c?rev=25731&r1=25730&r2=25731&view=diff
==============================================================================
--- branches/S2_5/common/combat.c       (original)
+++ branches/S2_5/common/combat.c       Sun Jul 27 00:12:47 2014
@@ -133,7 +133,7 @@
   }
 
   /* 3. Can't attack with ground unit from ocean, except for marines */
-  if (!is_native_tile(unit_type(punit), unit_tile(punit))
+  if (!can_exist_at_tile(unit_type(punit), unit_tile(punit))
       && !can_attack_from_non_native(unit_type(punit))) {
     return ATT_NONNATIVE_SRC;
   }


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to