Index: ai/aiunit.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/aiunit.c,v retrieving revision 1.248 diff -u -r1.248 aiunit.c --- ai/aiunit.c 2003/01/02 11:59:29 1.248 +++ ai/aiunit.c 2003/01/02 14:34:17 @@ -33,6 +33,7 @@ #include "shared.h" #include "timing.h" #include "unit.h" +#include "unittype.h" #include "barbarian.h" #include "citytools.h" @@ -624,9 +625,11 @@ } unit_list_iterate(map_get_tile(pcity->x, pcity->y)->units, pdef) { - if (assess_defense_unit(pcity, punit, FALSE) >= 0 - && pdef != punit - && pdef->homecity == pcity->id) { + if (pdef != punit + && DEFENCE_POWER(pdef) >= 0 + && unit_type(pdef)->move_type != SEA_MOVING + && unit_type(pdef)->move_type != HELI_MOVING + && pdef->homecity == pcity->id) { has_defense = TRUE; } } unit_list_iterate_end; @@ -817,29 +820,24 @@ **************************************************************************/ static bool is_my_turn(struct unit *punit, struct unit *pdef) { - int val = unit_belligerence_primitive(punit), cur, d; + int val = unit_belligerence_primitive(punit), cur; struct tile *ptile; square_iterate(pdef->x, pdef->y, 1, i, j) { ptile = map_get_tile(i, j); unit_list_iterate(ptile->units, aunit) { - if (aunit == punit || aunit->owner != punit->owner) - continue; - if (!can_unit_attack_unit_at_tile(aunit, pdef, pdef->x, pdef->y)) - continue; - d = get_virtual_defense_power(aunit->type, pdef->type, pdef->x, - pdef->y, FALSE, FALSE); - if (d == 0) - return TRUE; /* Thanks, Markus -- Syela */ - cur = unit_belligerence_primitive(aunit) * - get_virtual_defense_power(punit->type, pdef->type, pdef->x, - pdef->y, FALSE, FALSE) / d; - if (cur > val && ai_fuzzy(unit_owner(punit), TRUE)) - return FALSE; - } - unit_list_iterate_end; - } - square_iterate_end; + if (aunit == punit + || !pplayers_allied(unit_owner(aunit), unit_owner(punit)) + || aunit->moves_left <= 0 + || !can_unit_attack_unit_at_tile(aunit, pdef, pdef->x, pdef->y)) { + continue; + } + cur = unit_belligerence_primitive(aunit); + if (cur > val) { + return FALSE; + } + } unit_list_iterate_end; + } square_iterate_end; return TRUE; }