00001
00002
00003
00004
00005
00006
00007
00008 #ifndef MONPLACE_H
00009 #define MONPLACE_H
00010
00011 #include "mgen_enum.h"
00012
00013 class mons_spec;
00014 struct mgen_data;
00015
00016
00017
00018
00019
00020
00021
00022
00023 int create_monster(mgen_data mg, bool fail_msg = true);
00024
00025
00026
00027
00028
00029 int mons_place(mgen_data mg);
00030
00031
00032
00033
00034
00035
00036
00037 int place_monster(mgen_data mg, bool force_pos = false);
00038
00039 monster_type pick_random_zombie();
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 monster_type pick_local_zombifiable_monster(int power,
00050 bool hack_hd = false,
00051 monster_type cs = MONS_NO_MONSTER,
00052 const coord_def& pos = coord_def());
00053
00054 void roll_zombie_hp(monster* mon);
00055
00056 void define_zombie(monster* mon, monster_type ztype, monster_type cs);
00057
00058
00059
00060 monster_type resolve_monster_type(monster_type mon_type,
00061 dungeon_feature_type feat);
00062
00063
00064
00065
00066
00067
00068
00069 monster_type pick_random_monster_for_place(const level_id &place,
00070 monster_type zombie_monster,
00071 bool moderate_ood,
00072 bool super_ood,
00073 bool want_corpse_capable);
00074
00075
00076
00077 monster_type resolve_corpse_monster_type(monster_type mon_type,
00078 dungeon_feature_type feat,
00079 level_id place);
00080
00081
00082 class level_id;
00083
00084 monster_type pick_random_monster(const level_id &place,
00085 bool *chose_ood_monster = NULL);
00086
00087 monster_type pick_random_monster(const level_id &place,
00088 int power,
00089 int &lev_mons,
00090 bool *chose_ood_monster,
00091 bool force_mobile = false);
00092
00093 bool player_will_anger_monster(monster_type type, bool *holy = NULL,
00094 bool *unholy = NULL, bool *lawful = NULL,
00095 bool *antimagical = NULL);
00096
00097 bool player_will_anger_monster(monster* mon, bool *holy = NULL,
00098 bool *unholy = NULL, bool *lawful = NULL,
00099 bool *antimagical = NULL);
00100
00101 bool player_angers_monster(monster* mon);
00102
00103 bool empty_surrounds(const coord_def& where, dungeon_feature_type spc_wanted,
00104 int radius, bool allow_centre, coord_def& empty);
00105
00106 monster_type summon_any_demon(demon_class_type dct);
00107
00108 monster_type summon_any_holy_being(holy_being_class_type hbct);
00109
00110 monster_type summon_any_dragon(dragon_class_type dct);
00111
00112 bool drac_colour_incompatible(int drac, int colour);
00113
00114 void mark_interesting_monst(monster* mons,
00115 beh_type behaviour = BEH_SLEEP);
00116
00117 bool feat_compatible(dungeon_feature_type grid_wanted,
00118 dungeon_feature_type actual_grid);
00119 bool monster_habitable_grid(const monster* mon,
00120 dungeon_feature_type actual_grid);
00121 bool monster_habitable_grid(
00122 monster_type mt,
00123 dungeon_feature_type actual_grid,
00124 dungeon_feature_type wanted_grid_feature = DNGN_UNSEEN,
00125 int flies = -1,
00126 bool paralysed = false);
00127 bool monster_can_submerge(const monster* mon, dungeon_feature_type grid);
00128 coord_def find_newmons_square(int mons_class, const coord_def &p);
00129 coord_def find_newmons_square_contiguous(monster_type mons_class,
00130 const coord_def &start,
00131 int maxdistance = 3);
00132
00133 void spawn_random_monsters();
00134
00135 void set_vault_mon_list(const std::vector<mons_spec> &list);
00136
00137 void get_vault_mon_list(std::vector<mons_spec> &list);
00138
00139 void setup_vault_mon_list();
00140
00141 monster* get_free_monster();
00142
00143 bool can_place_on_trap(int mon_type, trap_type trap);
00144 bool mons_airborne(int mcls, int flies, bool paralysed);
00145 void mons_add_blame(monster* mon, const std::string &blame_string);
00146
00147
00148 extern band_type active_monster_band;
00149
00150 #endif // MONPLACE_H