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