Project

General

Profile

Feature #1240 ยป 0039-AI-Pass-civ_map-to-find_something_to_kill.patch

Marko Lindqvist, 02/16/2025 03:22 AM

View differences:

ai/default/daimilitary.c
goto cleanup;
}
best_choice->want = find_something_to_kill(ait, pplayer, myunit, &ptile, NULL,
best_choice->want = find_something_to_kill(ait, nmap, pplayer, myunit, &ptile, NULL,
&ferry_map, &ferryboat,
&boattype, &move_time);
if (NULL == ptile
ai/default/daiunit.c
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 void dai_military_attack(struct ai_type *ait, const struct civ_map *nmap,
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,
......
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
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).
**************************************************************************/
int build_cost_balanced(const struct unit_type *punittype)
......
punit->id == 0 means that the unit is virtual (considered to be built).
**************************************************************************/
adv_want find_something_to_kill(struct ai_type *ait, struct player *pplayer,
adv_want find_something_to_kill(struct ai_type *ait, const struct civ_map *nmap,
struct player *pplayer,
struct unit *punit,
struct tile **pdest_tile, struct pf_path **ppath,
struct pf_map **pferrymap,
......
adv_want best = 0; /* Best of all wants. */
struct tile *goto_dest_tile = NULL;
bool can_occupy;
struct civ_map *nmap = &(wld.map);
/* Very preliminary checks. */
*pdest_tile = punit_tile;
......
looking for trouble elsewhere. If there is nothing to kill, sailing units
go home, others explore while barbs go berserk.
**************************************************************************/
static void dai_military_attack(struct ai_type *ait, struct player *pplayer,
struct unit *punit)
static void dai_military_attack(struct ai_type *ait, const struct civ_map *nmap,
struct player *pplayer, struct unit *punit)
{
struct tile *dest_tile;
int id = punit->id;
......
struct unit *ferryboat;
/* Then find enemies the hard way */
find_something_to_kill(ait, pplayer, punit, &dest_tile, &path,
find_something_to_kill(ait, nmap, pplayer, punit, &dest_tile, &path,
NULL, &ferryboat, NULL, NULL);
if (!same_pos(unit_tile(punit), dest_tile)) {
if (!is_tiles_adjacent(unit_tile(punit), dest_tile)
......
If something is attacking our city, kill it yeahhh!!!.
**************************************************************************/
static void dai_manage_hitpoint_recovery(struct ai_type *ait,
const struct civ_map *nmap,
struct unit *punit)
{
struct player *pplayer = unit_owner(punit);
......
/* Oops */
UNIT_LOG(LOGLEVEL_RECOVERY, punit, "didn't find a city to recover in!");
dai_unit_new_task(ait, punit, AIUNIT_NONE, NULL);
dai_military_attack(ait, pplayer, punit);
dai_military_attack(ait, nmap, pplayer, punit);
return;
}
}
......
case AIUNIT_ATTACK:
case AIUNIT_NONE:
TIMING_LOG(AIT_ATTACK, TIMER_START);
dai_military_attack(ait, pplayer, punit);
dai_military_attack(ait, nmap, pplayer, punit);
TIMING_LOG(AIT_ATTACK, TIMER_STOP);
break;
case AIUNIT_ESCORT:
......
break;
case AIUNIT_RECOVER:
TIMING_LOG(AIT_RECOVER, TIMER_START);
dai_manage_hitpoint_recovery(ait, punit);
dai_manage_hitpoint_recovery(ait, nmap, punit);
TIMING_LOG(AIT_RECOVER, TIMER_STOP);
break;
case AIUNIT_HUNTER:
ai/default/daiunit.h
const struct unit_type *cargo_type,
const struct unit_type *ferry_type,
struct tile **ferry_dest, struct tile **beachhead_tile);
adv_want find_something_to_kill(struct ai_type *ait, struct player *pplayer,
adv_want find_something_to_kill(struct ai_type *ait, const struct civ_map *nmap,
struct player *pplayer,
struct unit *punit,
struct tile **pdest_tile,
struct pf_path **ppath,
    (1-1/1)