1 /**
2  * @file
3  * @brief Passive god effects.
4 **/
5 
6 #pragma once
7 
8 #include "enum.h"
9 #include "wu-jian-attack-type.h"
10 #include "player.h"
11 
12 class monster;
13 class dist;
14 
15 // Passive god abilities.
16 enum class passive_t
17 {
18     /// Placeholder for absence of a passive ability.
19     none = 0,
20 
21     /// The god prefers that items be cursed: acquirement grants cursed items,
22     /// enchant scrolls and miscasts preserve curse status, and identify
23     /// allows selecting a subset of items to uncurse.
24     want_curses,
25 
26     /// You detect the presence of portals.
27     detect_portals,
28 
29     /// You identity items on sight, including monster equipment.
30     identify_items,
31 
32     /// You have (improved) automatic mapping.
33     auto_map,
34 
35     /// You detect the threat level of monsters.
36     detect_montier,
37 
38     /// You detect the presence of items.
39     detect_items,
40 
41     /// You avoid explore-based traps.
42     avoid_traps,
43 
44     /// You have innate see invisible.
45     sinv,
46 
47     /// You have innate clarity.
48     clarity,
49 
50     /// You have astral sight.
51     xray_vision,
52 
53     /// You get a boost to skills from cursed slots.
54     bondage_skill_boost,
55 
56     /// You convert orcs into followers.
57     convert_orcs,
58 
59     /// You can walk on water.
60     water_walk,
61 
62     /// You share experience with followers.
63     share_exp,
64 
65     /// Your god blesses your followers.
66     bless_followers,
67 
68     /// Your god blesses your followers when they kill evil things.
69     bless_followers_vs_evil,
70 
71     /// You cannot be hasted.
72     no_haste,
73 
74     /// You move slowly.
75     slowed,
76 
77     /// Fewer creatures spawn on the orb run.
78     slow_orb_run,
79 
80     /// Fewer creatures spawn in the Abyss, and it morphs less quickly.
81     slow_abyss,
82 
83     /// The Zot clock runs more slowly.
84     slow_zot,
85 
86     /// Your attributes are boosted.
87     stat_boost,
88 
89     /// Poison affects you more slowly.
90     slow_poison,
91 
92     /// You have an umbra.
93     umbra,
94 
95     /// You emit clouds when hit.
96     hit_smoke,
97 
98     /// Your shadow attacks alongside you.
99     shadow_attacks,
100 
101     /// Your shadow casts attack spells alongside you.
102     shadow_spells,
103 
104     /// No accuracy penalty in umbra. Gain stealth in umbra.
105     nightvision,
106 
107     /// No distortion unwield effects.
108     safe_distortion,
109 
110     /// Less map rot in the abyss.
111     map_rot_res_abyss,
112 
113     /// Higher chance for spawning the abyssal rune.
114     attract_abyssal_rune,
115 
116     /// Potentially save allies from death. Holy or natural, in LOS.
117     protect_ally,
118 
119     /// Chance to nullify a deadly blow, dependent on piety.
120     protect_from_harm,
121 
122     /// Divine halo around the player, size increases with piety.
123     halo,
124 
125     /// Protect allies from abjuration by decreasing the power to half.
126     abjuration_protection,
127 
128     /// Protect allies from abjuration by decreasing the power. Higher HD means
129     /// better protection.
130     abjuration_protection_hd,
131 
132     /// Gain HP when killing monsters.
133     restore_hp,
134 
135     /// Gain HP and MP when killing evil monsters.
136     restore_hp_mp_vs_evil,
137 
138     /// Mutation resistance increasing with piety.
139     resist_mutation,
140 
141     /// Polymorph resistance increasing with piety.
142     resist_polymorph,
143 
144     /// Chance of avoiding hell effects, increasing with piety.
145     resist_hell_effects,
146 
147     /// Warning about shapeshifters when they come to view.
148     warn_shapeshifter,
149 
150     /// Cleanse mutation potions (they only delete mutations).
151     cleanse_mut_potions,
152 
153     /// Torment resistance, piety dependent.
154     resist_torment,
155 
156     /// Protection against necromancy miscasts and mummy death curses.
157     miscast_protection_necromancy,
158 
159     /// Chance to extend berserk duration and avoid paralysis, piety dependent.
160     extend_berserk,
161 
162     /// Gold aura that distracts enemies.
163     gold_aura,
164 
165     /// Corpses turn to gold.
166     goldify_corpses,
167 
168     /// You detect the presence of gold. Gold is moved on top in stacks.
169     detect_gold,
170 
171     /// Allied plants are friendly towards you
172     friendly_plants,
173 
174     /// You can walk through plants
175     pass_through_plants,
176 
177     /// You can fire through allied plants
178     shoot_through_plants,
179 
180     /// Slimes and eye monsters are neutral towards you
181     neutral_slimes,
182 
183     /// Items consumed by your fellow slimes feed you
184     slime_feed,
185 
186     /// You are immune to slime covered walls
187     slime_wall_immune,
188 
189     /// Jiyva protects you from corrosion
190     resist_corrosion,
191 
192     /// Items consumed by your fellow slimes restores your mana reserve
193     slime_mp,
194 
195     /// Items consumed by your fellow slimes restores your health
196     slime_hp,
197 
198     /// Jiyva summons jellies to protect you
199     jellies_army,
200 
201     /// Jiyva allows jellies to eats off-level and seen items.
202     jelly_eating,
203 
204     /// Jiyva adjusts your stats as needed.
205     fluid_stats,
206 
207     // You have a chance to spawn slimes when hit hard
208     spawn_slimes_on_hit,
209 
210     /// Jiyva grants you access to the hidden treasures of the Slime Pits
211     unlock_slime_vaults,
212 
213     /// You have a chance to gain mana when you kill
214     mp_on_kill,
215 
216     /// You are less likely to miscat destructive spells
217     spells_success,
218 
219     /// You can cast destructive spells farther
220     spells_range,
221 
222     /// Clouds don't harm you
223     cloud_immunity,
224 
225     /// You generate elemental clouds to protect you
226     storm_shield,
227 
228     /// Chances to be struck by projectiles are reduced
229     upgraded_storm_shield,
230 
231     /// Elemental attacks leaves you somewhat more resistant to them
232     elemental_adaptation,
233 
234     /// Your enemies will sometime fail their attack or even hit themselves
235     aura_of_power,
236 
237     /// Enemies that inflict damage upon you will sometime receive a detrimental status effect
238     upgraded_aura_of_power,
239 
240     /// Pakellas prevents you from regenerating your mana reserve
241     no_mp_regen,
242 
243     /// Pakellas identifies wands and rods
244     identify_devices,
245 
246     /// Pakellas collects and distills extra MP from your kills
247     bottle_mp,
248 
249     /// Hep's transfer drains enemies adjacent to the effect's target
250     transfer_drain,
251 
252     /// Hep reduces your max HP
253     frail,
254 
255     // TSO prevents you from stabbing
256     no_stabbing,
257 
258     /// Martial attacks
259     wu_jian_lunge,
260     wu_jian_whirlwind,
261     wu_jian_wall_jump,
262 };
263 
264 enum ru_interference
265 {
266     DO_NOTHING,
267     DO_BLOCK_ATTACK,
268     DO_REDIRECT_ATTACK
269 };
270 
271 bool god_gives_passive(god_type god, passive_t passive);
272 bool have_passive(passive_t passive);
273 bool will_have_passive(passive_t passive);
274 int rank_for_passive(passive_t passive);
275 int chei_stat_boost(int piety = you.piety);
276 void jiyva_eat_offlevel_items();
277 int ash_scry_radius();
278 void ash_check_bondage();
279 bool god_id_item(item_def& item, bool silent = true);
280 int ash_detect_portals(bool all);
281 monster_type ash_monster_tier(const monster *mon);
282 unsigned int ash_skill_point_boost(skill_type sk, int scaled_skill);
283 int ash_skill_boost(skill_type sk, int scale);
284 bool ash_has_skill_boost(skill_type sk);
285 int gozag_gold_in_los(actor* whom);
286 void gozag_detect_level_gold(bool count);
287 int qazlal_sh_boost(int piety = you.piety);
288 int tso_sh_boost();
289 void qazlal_storm_clouds();
290 void qazlal_element_adapt(beam_type flavour, int strength);
291 bool does_ru_wanna_redirect(monster* mon);
292 ru_interference get_ru_attack_interference_level();
293 monster* shadow_monster(bool equip = true);
294 void shadow_monster_reset(monster *mon);
295 void dithmenos_shadow_melee(actor* target);
296 void dithmenos_shadow_throw(const dist &d, const item_def &item);
297 void dithmenos_shadow_spell(bolt* orig_beam, spell_type spell);
298 void uskayaw_prepares_audience();
299 void uskayaw_bonds_audience();
300 
301 void wu_jian_heaven_tick();
302 void wu_jian_decrement_heavenly_storm();
303 void wu_jian_end_heavenly_storm();
304 void wu_jian_wall_jump_effects();
305 bool wu_jian_has_momentum(wu_jian_attack_type);
306 bool wu_jian_post_move_effects(bool did_wall_jump,
307                                const coord_def& initial_position);
308