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