/* * File: spl-mis.h * Summary: Spell miscast class. * Written by: Matthew Cline */ #ifndef SPL_MIS_H #define SPL_MIS_H #include "enum.h" #include "beam.h" #include "monster.h" #include "mpr.h" #include "spl-util.h" #define ZOT_TRAP_MISCAST (NON_MONSTER + 1) #define WIELD_MISCAST (NON_MONSTER + 2) #define MELEE_MISCAST (NON_MONSTER + 3) #define MISC_KNOWN_MISCAST (NON_MONSTER + 4) #define MISC_UNKNOWN_MISCAST (NON_MONSTER + 5) enum nothing_happens_when_type { NH_DEFAULT, NH_NEVER, NH_ALWAYS }; class actor; class MiscastEffect { public: MiscastEffect(actor* _target, int _source, spell_type _spell, int _pow, int _fail, std::string _cause = "", nothing_happens_when_type _nothing_happens = NH_DEFAULT, int _lethality_margin = 0, std::string _hand_str = "", bool _can_plural_hand = true); MiscastEffect(actor* _target, int _source, spschool_flag_type _school, int _level, std::string _cause, nothing_happens_when_type _nothing_happens = NH_DEFAULT, int _lethality_margin = 0, std::string _hand_str = "", bool _can_plural_hand = true); MiscastEffect(actor* _target, int _source, spschool_flag_type _school, int _pow, int _fail, std::string _cause, nothing_happens_when_type _nothing_happens = NH_DEFAULT, int _lethality_margin = 0, std::string _hand_str = "", bool _can_plural_hand = true); ~MiscastEffect(); void do_miscast(); private: actor* target; int source; std::string cause; spell_type spell; spschool_flag_type school; int pow; int fail; int level; private: kill_category kc; killer_type kt; nothing_happens_when_type nothing_happens_when; int lethality_margin; std::string hand_str; bool can_plural_hand; int kill_source; actor* act_source; bool source_known; bool target_known; bolt beam; std::string all_msg; std::string you_msg; std::string mon_msg; std::string mon_msg_seen; std::string mon_msg_unseen; msg_channel_type msg_ch; int sound_loudness; int recursion_depth; bool did_msg; private: void init(); std::string get_default_cause(bool attribute_to_user) const; monsters* target_as_monster() { return dynamic_cast(target); } monsters* source_as_monster() { return dynamic_cast(act_source); } bool neither_end_silenced(); void do_msg(bool suppress_nothing_happens = false); bool _ouch(int dam, beam_type flavour = BEAM_NONE); bool _explosion(); bool _big_cloud(cloud_type cl_type, int pow, int size, int spread_rate = -1); bool _lose_stat(unsigned char which_stat, unsigned char stat_loss); void _potion_effect(int pot_eff, int pow); bool _create_monster(monster_type what, int abj_deg, bool alert = false); void send_abyss(); bool avoid_lethal(int dam); void _conjuration(int severity); void _enchantment(int severity); void _translocation(int severity); void _summoning(int severity); void _divination_you(int severity); void _divination_mon(int severity); void _necromancy(int severity); void _transmutation(int severity); void _fire(int severity); void _ice(int severity); void _earth(int severity); void _air(int severity); void _poison(int severity); }; #endif