1 /* Definitions common to all AIs.
2    Copyright (C) 2004 Eric A. McDonald
3 
4 Xconq is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2, or (at your option)
7 any later version.  See the file COPYING.  */
8 
9 /*! \file aiutil.h
10  * Declaration of generic functions that may be of use to an AI or
11  * intelligent UI.
12  */
13 
14 #include "parambox.h"
15 
16 typedef enum a_occ_status {
17     CANNOT_HAVE_OCCS,
18     MAYBE_HAS_OCCS,
19     DEFINITELY_HAS_OCCS,
20     DEFINITELY_HAS_NO_OCCS
21 } OccStatus;
22 
23 #define DAMAGE_TYPE_NONE        0
24 #define DAMAGE_TYPE_ATTACK      1
25 #define DAMAGE_TYPE_FIRE        2
26 #define DAMAGE_TYPE_HIT         (DAMAGE_TYPE_ATTACK | DAMAGE_TYPE_FIRE)
27 #define DAMAGE_TYPE_EXPLODE     4
28 #define DAMAGE_TYPE_USE_OCC     8
29 #define DAMAGE_TYPE_USE_TSPT    16
30 
31 #define VICTIM_NOTHING_SPECIAL  0
32 #define VICTIM_CAPTURABLE       1
33 #define VICTIM_SHAKEABLE        2
34 #define VICTIM_ENCOUNTERABLE    4
35 
36 extern int dice_roll_min(int dicerep);
37 extern int dice_roll_mean(int dicerep);
38 extern int dice_roll_max(int dicerep);
39 
40 extern int could_damage(int u, int u2);
41 extern int could_destroy(int u, int u2);
42 
43 extern int type_attack_damage_max(int u, int u2);
44 extern int type_attack_damage_min(int u, int u2);
45 extern int type_fire_damage_max(int u, int u2);
46 extern int type_fire_damage_min(int u, int u2);
47 extern int type_damage_max(int u, int u2);
48 
49 extern int type_attack_range_max(int u, int u2);
50 extern int type_fire_range_max(int u, int u2);
51 extern int type_hit_range_max(int u, int u2);
52 extern int type_ideal_attack_range_max(int u, int u2);
53 extern int type_ideal_fire_range_max(int u, int u2);
54 extern int type_ideal_hit_range_max(int u, int u2);
55 
56 extern int type_possible_damage_methods(int u, int u2);
57 
58 extern OccStatus occ_status(UnitView *uview);
59 
60 extern int planning_to_hit_type_at(Unit *unit, int u, int x, int y);
61 extern int planning_to_capture_type_at(Unit *unit, int u, int x, int y);
62 extern int side_planning_to_hit_type_at(Side *side, int u, int x, int y);
63 extern int n_planning_to_hit_type_at(Side *side, int u, int x, int y);
64 extern int side_planning_to_capture_type_at(Side *side, int u, int x, int y);
65 extern int n_planning_to_capture_type_at(Side *side, int u, int x, int y);
66 
67 extern int has_enough_of_material(Unit *unit, int m);
68 extern int needs_n_of_material(Unit *unit, int m);
69 extern int has_full_amount_of_material(Unit *unit, int m);
70 extern int wants_n_of_material(Unit *unit, int m);
71 extern int would_starve_without_material(int u, int m);
72 extern int will_starve_wrt_material(Unit *unit, int m);
73 extern int can_donate_n_of_material(Unit *unit, int m);
74 extern int can_sacrifice_n_of_material(Unit *unit, int m);
75 extern int has_enough_of_all_materials(Unit *unit);
76 extern int has_full_amount_of_all_materials(Unit *unit);
77 extern int will_starve(Unit *unit);
78 extern int critically_needed_material(Unit *unit);
79 extern int most_needed_material(Unit *unit, int *nmost);
80 extern int most_wanted_material(Unit *unit, int *nmost);
81 
82 extern int can_be_blocked_by_any_known_enemy_at_if_at(int x, int y,
83                                                       int *counter,
84                                                       ParamBox *parambox);
85 extern int can_be_blocked_by_any_known_enemy_if_at(int x, int y, int *counter,
86                                                    ParamBox *parambox);
87