Index: ai/advmilitary.c =================================================================== RCS file: /home/freeciv/CVS/freeciv/ai/advmilitary.c,v retrieving revision 1.107 diff -u -r1.107 advmilitary.c --- ai/advmilitary.c 2002/08/07 10:42:17 1.107 +++ ai/advmilitary.c 2002/08/24 13:52:11 @@ -479,7 +479,8 @@ } /************************************************************************** -How much we would want that unit..? + How much we would want that unit to defend a city? (Do not use this + function to find bodyguards for ships or air units.) **************************************************************************/ int unit_desirability(Unit_Type_id i, bool defender) { @@ -487,33 +488,37 @@ int attack = get_unit_type(i)->attack_strength; int defense = get_unit_type(i)->defense_strength; - if (unit_types[i].move_type != SEA_MOVING || !defender) { - desire *= get_unit_type(i)->firepower; - } - - /* It's irrelevant for defenders how fast they move. */ - desire *= defender ? SINGLE_MOVE : get_unit_type(i)->move_rate; - if (defender) { + if (unit_types[i].move_type != LAND_MOVING + && unit_types[i].move_type != HELI_MOVING) { + /* Sea units get 1 firepower in Pearl Harbour, + * and helicopters very bad against air units */ + desire *= get_unit_type(i)->firepower; + } desire *= defense; - } else if (defense > attack) { - /* We shouldn't use defense units as attackers. */ - return 0; + desire += get_unit_type(i)->move_rate; + desire += attack; + if (unit_type_flag(i, F_PIKEMEN)) { + desire += desire / 2; + } } else { + desire *= get_unit_type(i)->move_rate; + desire *= get_unit_type(i)->firepower; desire *= attack; + desire += defense; + if (unit_type_flag(i, F_IGTER)) { + desire += desire / 2; + } + if (unit_type_flag(i, F_IGTIRED)) { + desire += desire / 4; + } + if (unit_type_flag(i, F_MARINES)) { + desire += desire / 4; + } + if (unit_type_flag(i, F_IGWALL)) { + desire += desire / 4; + } } - - if (unit_type_flag(i, F_IGTER) && !defender) { - desire *= 3; - } - if (unit_type_flag(i, F_PIKEMEN) && defender) { - desire = (3 * desire) / 2; - } - if (unit_types[i].move_type == LAND_MOVING && defender) { - /* Irnoclads could be *so* tempting.. */ - desire = (3 * desire) / 2; - } - return desire; }