Partially refactor _get_possible_sacrifices()
[crawl.git] / crawl-ref / source / godabil.h
1 /**
2  * @file
3  * @brief God-granted abilities.
4 **/
5
6 #ifndef GODABIL_H
7 #define GODABIL_H
8
9 #include "enum.h"
10 #include "spl-cast.h"
11
12 #define BEOGH_WPN_GIFT_KEY "given beogh weapon"
13 #define BEOGH_ARM_GIFT_KEY "given beogh armour"
14 #define BEOGH_SH_GIFT_KEY "given beogh shield"
15
16 #define HEALTH_SAC_KEY "current_health_sacrifice"
17 #define ESSENCE_SAC_KEY "current_essence_sacrifice"
18 #define PURITY_SAC_KEY "current_purity_sacrifice"
19 #define ARCANA_SAC_KEY "current_arcane_sacrifices"
20
21 struct bolt;
22 class stack_iterator;
23
24 string zin_recite_text(const int seed, const int prayertype, int step);
25 bool zin_check_able_to_recite(bool quiet = false);
26 int zin_check_recite_to_monsters(bool quiet = false);
27 bool zin_recite_to_single_monster(const coord_def& where);
28 void zin_recite_interrupt();
29 int zin_recite_power();
30 bool zin_vitalisation();
31 void zin_remove_divine_stamina();
32 bool zin_remove_all_mutations();
33 bool zin_sanctuary();
34
35 void tso_divine_shield();
36 void tso_remove_divine_shield();
37
38 void elyvilon_purification();
39 bool elyvilon_divine_vigour();
40 void elyvilon_remove_divine_vigour();
41
42 bool vehumet_supports_spell(spell_type spell);
43
44 bool trog_burn_spellbooks();
45 void trog_do_trogs_hand(int power);
46 void trog_remove_trogs_hand();
47
48 void jiyva_paralyse_jellies();
49 bool jiyva_remove_bad_mutation();
50
51 bool beogh_water_walk();
52 bool beogh_can_gift_items_to(const monster* mons, bool quiet = true);
53 bool beogh_gift_item();
54
55 bool yred_injury_mirror();
56 bool yred_can_animate_dead();
57 bool yred_animate_remains_or_dead();
58 void yred_make_enslaved_soul(monster* mon, bool force_hostile = false);
59
60 bool kiku_receive_corpses(int pow);
61 bool kiku_take_corpse();
62
63 bool fedhas_passthrough_class(const monster_type mc);
64 bool fedhas_passthrough(const monster* target);
65 bool fedhas_passthrough(const monster_info* target);
66 bool fedhas_shoot_through(const bolt& beam, const monster* victim);
67 int fedhas_fungal_bloom();
68 spret_type fedhas_sunlight(bool fail = false);
69 void process_sunlights(bool future = false);
70 bool prioritise_adjacent(const coord_def& target, vector<coord_def>& candidates);
71 bool fedhas_plant_ring_from_fruit();
72 int fedhas_rain(const coord_def &target);
73 int count_corpses_in_los(vector<stack_iterator> *positions);
74 int fedhas_check_corpse_spores(bool quiet = false);
75 int fedhas_corpse_spores(beh_type attitude = BEH_FRIENDLY);
76 bool mons_is_evolvable(const monster* mon);
77 bool fedhas_check_evolve_flora(bool quiet = false);
78 void fedhas_evolve_flora();
79
80 void lugonu_bend_space();
81
82 void cheibriados_time_bend(int pow);
83 void cheibriados_temporal_distortion();
84 bool cheibriados_slouch(int pow);
85 void cheibriados_time_step(int pow);
86 bool ashenzari_transfer_knowledge();
87 bool ashenzari_end_transfer(bool finished = false, bool force = false);
88
89 bool can_convert_to_beogh();
90 void spare_beogh_convert();
91
92 bool dithmenos_shadow_step();
93 monster* shadow_monster(bool equip = true);
94 void shadow_monster_reset(monster *mon);
95 void dithmenos_shadow_melee(actor* target);
96 void dithmenos_shadow_throw(coord_def target, const item_def &item);
97 void dithmenos_shadow_spell(bolt* orig_beam, spell_type spell);
98
99 int gozag_potion_price();
100 bool gozag_setup_potion_petition(bool quiet = false);
101 bool gozag_potion_petition();
102 int gozag_price_for_shop(bool max = false);
103 bool gozag_setup_call_merchant(bool quiet = false);
104 bool gozag_call_merchant();
105 int gozag_type_bribable(monster_type type, bool force = false);
106 branch_type gozag_bribable_branch(monster_type type);
107 bool gozag_branch_bribable(branch_type branch);
108 int gozag_branch_bribe_susceptibility(branch_type branch);
109 void gozag_deduct_bribe(branch_type br, int amount);
110 bool gozag_check_bribe_branch(bool quiet = false);
111 bool gozag_bribe_branch();
112
113 spret_type qazlal_upheaval(coord_def target, bool quiet = false,
114                            bool fail = false);
115 void qazlal_elemental_force();
116 bool qazlal_disaster_area();
117
118 void init_sac_index();
119 void ru_offer_new_sacrifices();
120 bool ru_do_sacrifice(ability_type sac);
121 bool ru_reject_sacrifices();
122 void ru_reset_sacrifice_timer(bool clear_timer = false);
123 bool will_ru_retaliate();
124 void ru_do_retribution(monster* mons, int damage);
125 void ru_draw_out_power();
126 bool ru_power_leap();
127 bool ru_apocalypse();
128 #endif