Freeciv-3.2
Loading...
Searching...
No Matches
Data Structures | Macros | Functions | Variables
daiunit.c File Reference
#include <math.h>
#include "bitvector.h"
#include "log.h"
#include "mem.h"
#include "nation.h"
#include "rand.h"
#include "registry.h"
#include "shared.h"
#include "timing.h"
#include "city.h"
#include "combat.h"
#include "game.h"
#include "government.h"
#include "map.h"
#include "movement.h"
#include "packets.h"
#include "specialist.h"
#include "traderoutes.h"
#include "unit.h"
#include "unitlist.h"
#include "caravan.h"
#include "pf_tools.h"
#include "barbarian.h"
#include "citytools.h"
#include "cityturn.h"
#include "diplomats.h"
#include "maphand.h"
#include "srv_log.h"
#include "unithand.h"
#include "unittools.h"
#include "advbuilding.h"
#include "advgoto.h"
#include "advtools.h"
#include "autoexplorer.h"
#include "autosettlers.h"
#include "difficulty.h"
#include "handicaps.h"
#include "aiair.h"
#include "aidiplomat.h"
#include "aiferry.h"
#include "aiguard.h"
#include "aihand.h"
#include "aihunt.h"
#include "aiparatrooper.h"
#include "aitools.h"
#include "daicity.h"
#include "daidata.h"
#include "daieffects.h"
#include "dailog.h"
#include "daimilitary.h"
#include "daiplayer.h"
#include "daiunit.h"

Go to the source code of this file.

Data Structures

struct  role_unit_cb_data
 

Macros

#define LOGLEVEL_RECOVERY   LOG_DEBUG
 
#define LOG_CARAVAN   LOG_DEBUG
 
#define LOG_CARAVAN2   LOG_DEBUG
 
#define LOG_CARAVAN3   LOG_DEBUG
 

Functions

static bool dai_find_boat_for_unit (struct ai_type *ait, struct unit *punit)
 
static bool dai_caravan_can_trade_cities_diff_cont (struct player *pplayer, struct unit *punit)
 
static void dai_manage_caravan (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
static void dai_manage_barbarian_leader (struct ai_type *ait, struct player *pplayer, struct unit *leader)
 
static void dai_military_findjob (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
static void dai_military_defend (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
static void dai_military_attack (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
static bool unit_role_defender (const struct unit_type *punittype)
 
static int unit_def_rating_squared (const struct unit *punit, const struct unit *pdef)
 
static struct cityfind_neediest_airlift_city (struct ai_type *ait, const struct player *pplayer)
 
static void dai_airlift (struct ai_type *ait, struct player *pplayer)
 
static bool has_defense (struct city *pcity)
 
int build_cost_balanced (const struct unit_type *punittype)
 
static int unit_att_rating_now (const struct unit *punit)
 
static int unit_att_rating_squared (const struct unit *punit)
 
static int unit_def_rating (const struct unit *attacker, const struct unit *defender)
 
int unittype_def_rating_squared (const struct unit_type *att_type, const struct unit_type *def_type, struct player *def_player, struct tile *ptile, bool fortified, int veteran)
 
adv_want kill_desire (adv_want benefit, int attack, int loss, int vuln, int victim_count)
 
static int avg_benefit (int benefit, int loss, double chance)
 
static void reinforcements_cost_and_value (struct unit *punit, struct tile *ptile0, int *value, int *cost)
 
static bool is_my_turn (struct unit *punit, struct unit *pdef)
 
static int dai_rampage_want (struct unit *punit, struct tile *ptile)
 
static struct pf_pathfind_rampage_target (struct unit *punit, int thresh_adj, int thresh_move)
 
bool dai_military_rampage (struct unit *punit, int thresh_adj, int thresh_move)
 
static void dai_military_bodyguard (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
adv_want look_for_charge (struct ai_type *ait, struct player *pplayer, struct unit *punit, struct unit **aunit, struct city **acity)
 
bool dai_can_unit_type_follow_unit_type (const struct unit_type *follower, const struct unit_type *followee, struct ai_type *ait)
 
static void single_invader (struct ai_city *city_data, const struct unit_type *utype, int which)
 
static void invasion_funct (struct ai_type *ait, struct unit *punit, bool dest, int radius, int which)
 
bool find_beachhead (const struct player *pplayer, struct pf_map *ferry_map, struct tile *dest_tile, const struct unit_type *cargo_type, struct tile **ferry_dest, struct tile **beachhead_tile)
 
adv_want find_something_to_kill (struct ai_type *ait, struct player *pplayer, struct unit *punit, struct tile **pdest_tile, struct pf_path **ppath, struct pf_map **pferrymap, struct unit **pferryboat, const struct unit_type **pboattype, int *pmove_time)
 
struct cityfind_nearest_safe_city (struct unit *punit)
 
static void dai_military_attack_barbarian (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
bool uclass_need_trans_between (struct unit_class *pclass, struct tile *ctile, struct tile *ptile)
 
static void dai_caravan_goto (struct ai_type *ait, struct player *pplayer, struct unit *punit, const struct city *dest_city, bool help_wonder, bool required_boat, bool request_boat)
 
static void caravan_optimize_callback (const struct caravan_result *result, void *data)
 
static bool dai_is_unit_tired_waiting_boat (struct ai_type *ait, struct unit *punit)
 
static bool search_homecity_for_caravan (struct ai_type *ait, struct unit *punit)
 
static void dai_manage_hitpoint_recovery (struct ai_type *ait, struct unit *punit)
 
void dai_manage_military (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
static void dai_manage_settler (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
void dai_manage_unit (struct ai_type *ait, struct player *pplayer, struct unit *punit)
 
static void dai_set_defenders (struct ai_type *ait, struct player *pplayer)
 
void dai_manage_units (struct ai_type *ait, struct player *pplayer)
 
const struct impr_typeutype_needs_improvement (const struct unit_type *putype, const struct city *pcity)
 
bool is_on_unit_upgrade_path (const struct unit_type *test, const struct unit_type *base)
 
void dai_consider_tile_dangerous (struct ai_type *ait, struct tile *ptile, struct unit *punit, enum override_bool *result)
 
static void update_simple_ai_types (void)
 
void dai_units_ruleset_init (struct ai_type *ait)
 
void dai_units_ruleset_close (struct ai_type *ait)
 
void dai_unit_init (struct ai_type *ait, struct unit *punit)
 
void dai_unit_turn_end (struct ai_type *ait, struct unit *punit)
 
void dai_unit_close (struct ai_type *ait, struct unit *punit)
 
void dai_unit_save (struct ai_type *ait, const char *aitstr, struct section_file *file, const struct unit *punit, const char *unitstr)
 
void dai_unit_load (struct ai_type *ait, const char *aitstr, const struct section_file *file, struct unit *punit, const char *unitstr)
 
static bool role_unit_cb (struct unit_type *ptype, void *data)
 
struct unit_typedai_role_utype_for_terrain_class (struct city *pcity, int role, enum terrain_class tc)
 
bool dai_unit_can_strike_my_unit (const struct unit *attacker, const struct unit *defender)
 
void dai_switch_to_explore (struct ai_type *ait, struct unit *punit, struct tile *target, enum override_bool *allow)
 

Variables

struct unit_typesimple_ai_types [U_LAST]
 

Macro Definition Documentation

◆ LOG_CARAVAN

#define LOG_CARAVAN   LOG_DEBUG

Definition at line 88 of file daiunit.c.

◆ LOG_CARAVAN2

#define LOG_CARAVAN2   LOG_DEBUG

Definition at line 89 of file daiunit.c.

◆ LOG_CARAVAN3

#define LOG_CARAVAN3   LOG_DEBUG

Definition at line 90 of file daiunit.c.

◆ LOGLEVEL_RECOVERY

#define LOGLEVEL_RECOVERY   LOG_DEBUG

Definition at line 87 of file daiunit.c.

Function Documentation

◆ avg_benefit()

static int avg_benefit ( int  benefit,
int  loss,
double  chance 
)
static

Compute how much we want to kill certain victim we've chosen, counted in SHIELDs. See comment to kill_desire().

chance – the probability the action will succeed, benefit – the benefit (in shields) that we are getting in the case of success loss – the loss (in shields) that we suffer in the case of failure

Essentially returns the probabilistic average win amount: benefit * chance - loss * (1 - chance)

Definition at line 366 of file daiunit.c.

Referenced by dai_rampage_want().

◆ build_cost_balanced()

int build_cost_balanced ( const struct unit_type punittype)

In the words of Syela: "Using funky fprime variable instead of f in the denom, so that def=1 units are penalized correctly."

Translation (GB): build_cost_balanced is used in the denominator of the want equation (see, e.g. find_something_to_kill) instead of just build_cost to make AI build more balanced units (with def > 1).

Definition at line 250 of file daiunit.c.

Referenced by dai_evaluate_tile_for_air_attack(), find_something_to_kill(), and process_attacker_want().

◆ caravan_optimize_callback()

static void caravan_optimize_callback ( const struct caravan_result result,
void data 
)
static

For debugging, print out information about every city we come to when optimizing the caravan.

Definition at line 2096 of file daiunit.c.

Referenced by dai_manage_caravan().

◆ dai_airlift()

static void dai_airlift ( struct ai_type ait,
struct player pplayer 
)
static

Move defenders around with airports. Since this expends all our movement, a valid question is - why don't we do this on turn end? That's because we want to avoid emergency actions to protect the city during the turn if that isn't necessary.

Definition at line 169 of file daiunit.c.

Referenced by dai_manage_units().

◆ dai_can_unit_type_follow_unit_type()

bool dai_can_unit_type_follow_unit_type ( const struct unit_type follower,
const struct unit_type followee,
struct ai_type ait 
)

See if the follower can follow the followee

Definition at line 835 of file daiunit.c.

Referenced by look_for_charge(), and process_attacker_want().

◆ dai_caravan_can_trade_cities_diff_cont()

static bool dai_caravan_can_trade_cities_diff_cont ( struct player pplayer,
struct unit punit 
)
static

Check if a caravan can make a trade route to a city on a different continent (means, need a boat). FIXME: in a one-continent game it can be much more advantageous to cross straits on a trireme than to march through all the world.

Definition at line 2174 of file daiunit.c.

Referenced by dai_manage_caravan().

◆ dai_caravan_goto()

static void dai_caravan_goto ( struct ai_type ait,
struct player pplayer,
struct unit punit,
const struct city dest_city,
bool  help_wonder,
bool  required_boat,
bool  request_boat 
)
static

Send the caravan to the specified city, or make it help the wonder / trade, if it's already there. After this call, the unit may no longer exist (it might have been used up, or may have died travelling). It uses the ferry system to trade among continents.

Definition at line 1984 of file daiunit.c.

Referenced by dai_manage_caravan().

◆ dai_consider_tile_dangerous()

void dai_consider_tile_dangerous ( struct ai_type ait,
struct tile ptile,
struct unit punit,
enum override_bool result 
)

Are there dangerous enemies at or adjacent to the tile 'ptile'?

Always override advisor danger detection since we are omniscient and advisor is not.

Definition at line 3121 of file daiunit.c.

Referenced by cai_consider_tile_dangerous(), and texwai_consider_tile_dangerous().

◆ dai_find_boat_for_unit()

static bool dai_find_boat_for_unit ( struct ai_type ait,
struct unit punit 
)
static

Request a boat for a unit to transport it to another continent. Return whether is alive or not

Definition at line 1900 of file daiunit.c.

Referenced by dai_caravan_goto().

◆ dai_is_unit_tired_waiting_boat()

static bool dai_is_unit_tired_waiting_boat ( struct ai_type ait,
struct unit punit 
)
static

Evaluate if a unit is tired of waiting for a boat at home continent

Definition at line 2115 of file daiunit.c.

Referenced by dai_manage_caravan().

◆ dai_manage_barbarian_leader()

static void dai_manage_barbarian_leader ( struct ai_type ait,
struct player pplayer,
struct unit leader 
)
static

Barbarian leader tries to stack with other barbarian units, and if it's not possible it runs away. When on coast, it may disappear with 33% chance.

Definition at line 2948 of file daiunit.c.

Referenced by dai_manage_unit().

◆ dai_manage_caravan()

static void dai_manage_caravan ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)
static

Use caravans for building wonders, or send caravans to establish trade with a city, owned by yourself or an ally.

We use ferries for trade across the sea.

Definition at line 2256 of file daiunit.c.

Referenced by dai_manage_unit().

◆ dai_manage_hitpoint_recovery()

static void dai_manage_hitpoint_recovery ( struct ai_type ait,
struct unit punit 
)
static

This function goes wait a unit in a city for the hitpoints to recover. If something is attacking our city, kill it yeahhh!!!.

Definition at line 2424 of file daiunit.c.

Referenced by dai_manage_military().

◆ dai_manage_military()

void dai_manage_military ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)

Decide what to do with a military unit. It will be managed once only. It is up to the caller to try again if it has moves left.

Definition at line 2499 of file daiunit.c.

Referenced by dai_manage_paratrooper(), and dai_manage_unit().

◆ dai_manage_settler()

static void dai_manage_settler ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)
static

Manages settlers.

Definition at line 2632 of file daiunit.c.

Referenced by dai_manage_unit().

◆ dai_manage_unit()

void dai_manage_unit ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)

manage one unit Careful: punit may have been destroyed upon return from this routine!

Gregor: This function is a very limited approach because if a unit has several flags the first one in order of appearance in this function will be used.

Definition at line 2654 of file daiunit.c.

Referenced by dai_manage_barbarian_leader(), and dai_manage_units().

◆ dai_manage_units()

void dai_manage_units ( struct ai_type ait,
struct player pplayer 
)

Master manage unit function.

A manage function should set the unit to 'done' when it should no longer be touched by this code, and its role should be reset to IDLE when its role has accomplished its mission or the manage function fails to have or no longer has any use for the unit.

Definition at line 2861 of file daiunit.c.

Referenced by dai_do_first_activities().

◆ dai_military_attack()

static void dai_military_attack ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)
static

This does the attack until we have used up all our movement, unless we should safeguard a city. First we rampage nearby, then we go looking for trouble elsewhere. If there is nothing to kill, sailing units go home, others explore while barbs go berserk.

Definition at line 1746 of file daiunit.c.

Referenced by dai_manage_hitpoint_recovery(), and dai_manage_military().

◆ dai_military_attack_barbarian()

static void dai_military_attack_barbarian ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)
static

Go berserk, assuming there are no targets nearby. TODO: Is it not possible to remove this special casing for barbarians? FIXME: enum unit_move_result

Definition at line 1683 of file daiunit.c.

Referenced by dai_military_attack().

◆ dai_military_bodyguard()

static void dai_military_bodyguard ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)
static

If we are not covering our charge's ass, go do it now. Also check if we can kick some ass, which is always nice.

Definition at line 634 of file daiunit.c.

Referenced by dai_manage_military().

◆ dai_military_defend()

static void dai_military_defend ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)
static

Send a unit to the city it should defend. If we already have a city it should defend, use the punit->server.ai->charge field to denote this. Otherwise, it will stay put in the city it is in, or find a city to reside in, or travel all the way home.

TODO: Add make homecity. TODO: Add better selection of city to defend.

Definition at line 945 of file daiunit.c.

Referenced by dai_manage_military(), dai_manage_unit(), and dai_military_attack().

◆ dai_military_findjob()

static void dai_military_findjob ( struct ai_type ait,
struct player pplayer,
struct unit punit 
)
static

See if we have a specific job for the unit.

Definition at line 853 of file daiunit.c.

Referenced by dai_manage_military().

◆ dai_military_rampage()

bool dai_military_rampage ( struct unit punit,
int  thresh_adj,
int  thresh_move 
)

Find and kill anything reachable within this turn and worth more than the relevant of the given thresholds until we have run out of juicy targets or movement. The first threshold is for attacking which will leave us where we stand (attacking adjacent units), the second is for attacking distant (but within reach) targets.

For example, if unit is a bodyguard on duty, it should call dai_military_rampage(punit, 100, RAMPAGE_FREE_CITY_OR_BETTER) meaning "we will move _only_ to pick up a free city but we are happy to attack adjacent squares as long as they are worthy of it".

Returns TRUE if survived the rampage session.

Definition at line 601 of file daiunit.c.

Referenced by dai_manage_hitpoint_recovery(), dai_manage_paratrooper(), dai_military_attack(), dai_military_bodyguard(), and dai_military_defend().

◆ dai_rampage_want()

static int dai_rampage_want ( struct unit punit,
struct tile ptile 
)
static

This function appraises the location (x, y) for a quick hit-n-run operation. We do not take into account reinforcements: rampage is for loners.

Returns value as follows: -RAMPAGE_FREE_CITY_OR_BETTER means undefended enemy city -RAMPAGE_HUT_OR_BETTER means hut RAMPAGE_ANYTHING ... RAMPAGE_HUT_OR_BETTER - 1 is value of enemy unit weaker than our unit 0 means nothing found or error Here the minus indicates that you need to enter the target tile (as opposed to attacking it, which leaves you where you are).

Definition at line 457 of file daiunit.c.

Referenced by find_rampage_target().

◆ dai_role_utype_for_terrain_class()

struct unit_type * dai_role_utype_for_terrain_class ( struct city pcity,
int  role,
enum terrain_class  tc 
)

Get unit type player can build, suitable to role, with given move type.

Definition at line 3432 of file daiunit.c.

Referenced by contemplate_terrain_improvements(), and dai_city_choose_build().

◆ dai_set_defenders()

static void dai_set_defenders ( struct ai_type ait,
struct player pplayer 
)
static

Master city defense function. We try to pick up the best available defenders, and not disrupt existing roles.

TODO: Make homecity, respect homecity.

Definition at line 2766 of file daiunit.c.

Referenced by dai_manage_units().

◆ dai_switch_to_explore()

void dai_switch_to_explore ( struct ai_type ait,
struct unit punit,
struct tile target,
enum override_bool allow 
)

Switch to autoexploring.

Definition at line 3476 of file daiunit.c.

Referenced by cai_switch_to_explore(), and texwai_switch_to_explore().

◆ dai_unit_can_strike_my_unit()

bool dai_unit_can_strike_my_unit ( const struct unit attacker,
const struct unit defender 
)

Returns whether 'attacker' can attack 'defender' immediately.

Definition at line 3443 of file daiunit.c.

Referenced by dai_hunter_try_launch().

◆ dai_unit_close()

void dai_unit_close ( struct ai_type ait,
struct unit punit 
)

Free unit from use with default AI.

Definition at line 3344 of file daiunit.c.

Referenced by cai_unit_close(), and texwai_unit_free().

◆ dai_unit_init()

void dai_unit_init ( struct ai_type ait,
struct unit punit 
)

Initialize unit for use with default AI.

Definition at line 3310 of file daiunit.c.

Referenced by cai_unit_init(), and texwai_unit_alloc().

◆ dai_unit_load()

void dai_unit_load ( struct ai_type ait,
const char aitstr,
const struct section_file file,
struct unit punit,
const char unitstr 
)

Load AI data of a unit.

Definition at line 3381 of file daiunit.c.

Referenced by cai_unit_load(), and texwai_unit_load().

◆ dai_unit_save()

void dai_unit_save ( struct ai_type ait,
const char aitstr,
struct section_file file,
const struct unit punit,
const char unitstr 
)

Save AI data of a unit.

Definition at line 3362 of file daiunit.c.

Referenced by cai_unit_save(), and texwai_unit_save().

◆ dai_unit_turn_end()

void dai_unit_turn_end ( struct ai_type ait,
struct unit punit 
)

Free unit from use with default AI.

Definition at line 3332 of file daiunit.c.

Referenced by cai_unit_turn_end(), and texwai_unit_turn_end().

◆ dai_units_ruleset_close()

void dai_units_ruleset_close ( struct ai_type ait)

Close AI unit type data

Definition at line 3292 of file daiunit.c.

Referenced by cai_units_ruleset_close(), and texwai_units_ruleset_close().

◆ dai_units_ruleset_init()

void dai_units_ruleset_init ( struct ai_type ait)

Initialise the unit data from the ruleset for the AI.

Definition at line 3201 of file daiunit.c.

Referenced by cai_units_ruleset_init(), and texwai_units_ruleset_init().

◆ find_beachhead()

bool find_beachhead ( const struct player pplayer,
struct pf_map ferry_map,
struct tile dest_tile,
const struct unit_type cargo_type,
struct tile **  ferry_dest,
struct tile **  beachhead_tile 
)

Returns TRUE if a beachhead has been found to reach 'dest_tile'.

Definition at line 1061 of file daiunit.c.

Referenced by find_something_to_kill(), and process_attacker_want().

◆ find_nearest_safe_city()

struct city * find_nearest_safe_city ( struct unit punit)

Find safe city to recover in. An allied player's city is just as good as one of our own, since both replenish our hitpoints and reduce unhappiness.

TODO: Actually check how safe the city is. This is a difficult decision not easily taken, since we also want to protect unsafe cities, at least most of the time.

Definition at line 1632 of file daiunit.c.

Referenced by dai_find_boat_for_unit(), dai_manage_hitpoint_recovery(), dai_manage_paratrooper(), and dai_military_attack().

◆ find_neediest_airlift_city()

static struct city * find_neediest_airlift_city ( struct ai_type ait,
const struct player pplayer 
)
static

Returns the city with the most need of an airlift.

To be considerd, a city must have an air field. All cities with an urgent need for units are serviced before cities in danger.

Return value may be NULL, this means no servicable city found.

parameter pplayer may not be NULL.

Definition at line 138 of file daiunit.c.

Referenced by dai_airlift().

◆ find_rampage_target()

static struct pf_path * find_rampage_target ( struct unit punit,
int  thresh_adj,
int  thresh_move 
)
static

Look for worthy targets within a one-turn horizon.

Definition at line 522 of file daiunit.c.

Referenced by dai_military_rampage().

◆ find_something_to_kill()

adv_want find_something_to_kill ( struct ai_type ait,
struct player pplayer,
struct unit punit,
struct tile **  pdest_tile,
struct pf_path **  ppath,
struct pf_map **  pferrymap,
struct unit **  pferryboat,
const struct unit_type **  pboattype,
int pmove_time 
)

Find something to kill! This function is called for units to find targets to destroy and for cities that want to know if they should build offensive units. Target location returned in 'dest_tile', want as function return value.

punit->id == 0 means that the unit is virtual (considered to be built).

Definition at line 1136 of file daiunit.c.

Referenced by dai_military_attack(), and kill_something_with().

◆ has_defense()

static bool has_defense ( struct city pcity)
static

This is a much simplified form of assess_defense (see daimilitary.c), but which doesn't use pcity->server.ai.wallvalue and just returns a boolean value. This is for use with "foreign" cities, especially non-ai cities, where ai.wallvalue may be out of date or uninitialized –dwp

Definition at line 222 of file daiunit.c.

Referenced by invasion_funct().

◆ invasion_funct()

static void invasion_funct ( struct ai_type ait,
struct unit punit,
bool  dest,
int  radius,
int  which 
)
static

Mark invasion possibilities of punit in the surrounding cities. The given radius limites the area which is searched for cities. The center of the area is either the unit itself (dest FALSE) or the destination of the current goto (dest TRUE). The invasion threat is marked in pcity->server.ai.invasion by setting the "which" bit (to tell attack which can only kill units from occupy possibility).

If dest is TRUE then a valid goto is presumed.

Definition at line 1019 of file daiunit.c.

Referenced by find_something_to_kill().

◆ is_my_turn()

static bool is_my_turn ( struct unit punit,
struct unit pdef 
)
static

Is there another unit which really should be doing this attack? Checks all adjacent tiles and the tile we stand on for such units.

Definition at line 400 of file daiunit.c.

Referenced by dai_rampage_want().

◆ is_on_unit_upgrade_path()

bool is_on_unit_upgrade_path ( const struct unit_type test,
const struct unit_type base 
)

Whether unit_type test is on the "upgrade path" of unit_type base, even if we can't upgrade now.

Definition at line 2930 of file daiunit.c.

◆ kill_desire()

adv_want kill_desire ( adv_want  benefit,
int  attack,
int  loss,
int  vuln,
int  victim_count 
)

Compute how much we want to kill certain victim we've chosen, counted in SHIELDs.

FIXME?: The equation is not accurate as the other values can vary for other victims on same tile (we take values from best defender) - however I believe it's accurate just enough now and lost speed isn't worth that. –pasky

Benefit is something like 'attractiveness' of the victim, how nice it would be to destroy it. Larger value, worse loss for enemy.

Attack is the total possible attack power we can throw on the victim. Note that it usually comes squared.

Loss is the possible loss when we would lose the unit we are attacking with (in SHIELDs).

Vuln is vulnerability of our unit when attacking the enemy. Note that it usually comes squared as well.

Victim count is number of victims stacked in the target tile. Note that we shouldn't treat cities as a stack (despite the code using this function) - the scaling is probably different. (extremely dodgy usage of it – GB)

Definition at line 342 of file daiunit.c.

Referenced by dai_evaluate_tile_for_air_attack(), find_something_to_kill(), and process_attacker_want().

◆ look_for_charge()

adv_want look_for_charge ( struct ai_type ait,
struct player pplayer,
struct unit punit,
struct unit **  aunit,
struct city **  acity 
)

See if we can find something to defend. Called both by wannabe bodyguards and building want estimation code. Returns desirability for using this unit as a bodyguard or for defending a city.

We do not consider units with higher movement than us, or units that are native to terrains or extras not native to us, as potential charges. Nor do we attempt to bodyguard units with higher defense than us, or military units with lower attack than us that are not transports.

Definition at line 715 of file daiunit.c.

Referenced by dai_military_findjob(), and dai_unit_consider_bodyguard().

◆ reinforcements_cost_and_value()

static void reinforcements_cost_and_value ( struct unit punit,
struct tile ptile0,
int value,
int cost 
)
static

Calculates the value and cost of nearby allied units to see if we can expect any help in our attack. Base function.

Definition at line 375 of file daiunit.c.

Referenced by find_something_to_kill().

◆ role_unit_cb()

static bool role_unit_cb ( struct unit_type ptype,
void data 
)
static

Filter callback for role unit iteration

Definition at line 3410 of file daiunit.c.

Referenced by dai_role_utype_for_terrain_class().

◆ search_homecity_for_caravan()

static bool search_homecity_for_caravan ( struct ai_type ait,
struct unit punit 
)
static

Try to move caravan to suitable city and to make it caravan's homecity. Returns FALSE iff caravan dies.

Definition at line 2219 of file daiunit.c.

Referenced by dai_manage_caravan().

◆ single_invader()

static void single_invader ( struct ai_city city_data,
const struct unit_type utype,
int  which 
)
static

Mark invasion possibilities of single unit in a city.

Definition at line 991 of file daiunit.c.

Referenced by invasion_funct().

◆ uclass_need_trans_between()

bool uclass_need_trans_between ( struct unit_class pclass,
struct tile ctile,
struct tile ptile 
)

If a unit of pclass needs some transport or road to go from ctile to ptile, maybe omitting way ends. Maybe it should return fc_tristate?

This depends on wld.map, cannot be used for determining situation in other maps.

Definition at line 1945 of file daiunit.c.

Referenced by dai_caravan_goto(), and dai_manage_caravan().

◆ unit_att_rating_now()

static int unit_att_rating_now ( const struct unit punit)
static

Attack rating of this particular unit right now.

Definition at line 259 of file daiunit.c.

Referenced by dai_rampage_want(), and is_my_turn().

◆ unit_att_rating_squared()

static int unit_att_rating_squared ( const struct unit punit)
static

Square of the adv_unit_att_rating() function - used in actual computations.

Definition at line 268 of file daiunit.c.

Referenced by find_something_to_kill().

◆ unit_def_rating()

static int unit_def_rating ( const struct unit attacker,
const struct unit defender 
)
static

Defense rating of this particular unit against this attacker.

Definition at line 278 of file daiunit.c.

Referenced by unit_def_rating_squared().

◆ unit_def_rating_squared()

static int unit_def_rating_squared ( const struct unit attacker,
const struct unit defender 
)
static

Square of the unit_def_rating() - used in actual computations.

Definition at line 291 of file daiunit.c.

Referenced by find_something_to_kill().

◆ unit_role_defender()

static bool unit_role_defender ( const struct unit_type punittype)
static

Does the unit with the id given have the flag L_DEFEND_GOOD?

Definition at line 700 of file daiunit.c.

Referenced by dai_military_findjob().

◆ unittype_def_rating_squared()

int unittype_def_rating_squared ( const struct unit_type att_type,
const struct unit_type def_type,
struct player def_player,
struct tile ptile,
bool  fortified,
int  veteran 
)

Defense rating of def_type unit against att_type unit, squared. See get_virtual_defense_power() for the arguments att_type, def_type, x, y, fortified and veteran.

Definition at line 304 of file daiunit.c.

Referenced by find_something_to_kill(), kill_something_with(), and process_attacker_want().

◆ update_simple_ai_types()

static void update_simple_ai_types ( void  )
static

Updates the global array simple_ai_types.

Definition at line 3177 of file daiunit.c.

Referenced by dai_units_ruleset_init().

◆ utype_needs_improvement()

const struct impr_type * utype_needs_improvement ( const struct unit_type putype,
const struct city pcity 
)

Returns an improvement that will make it possible to build units of the specified type the specified city. Returns NULL if no new improvement will make it possible or if no improvement is needed.

Definition at line 2896 of file daiunit.c.

Referenced by dai_wants_defender_against(), dai_wants_role_unit(), and process_attacker_want().

Variable Documentation

◆ simple_ai_types

struct unit_type* simple_ai_types[U_LAST]

Definition at line 126 of file daiunit.c.

Referenced by update_simple_ai_types().