1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/**
* @file
* @brief Spell casting functions.
**/
#ifndef SPL_CAST_H
#define SPL_CAST_H
#include "enum.h"
enum spflag_type
{
SPFLAG_NONE = 0x000000,
SPFLAG_DIR_OR_TARGET = 0x000001, // use DIR_NONE targeting
SPFLAG_TARGET = 0x000002, // use DIR_TARGET targeting
SPFLAG_GRID = 0x000004, // use DIR_GRID targeting
SPFLAG_DIR = 0x000008, // use DIR_DIR targeting
// TODO: we need a new targetting flag if we want to target corpses too.
SPFLAG_TARG_OBJ = 0x000010, // use DIR_MOVABLE_OBJECT targ.
SPFLAG_TARGETING_MASK = 0x00001f, // used to test for targeting
SPFLAG_HELPFUL = 0x000020, // TARG_FRIENDS used
SPFLAG_NEUTRAL = 0x000040, // TARG_ANY used
SPFLAG_NOT_SELF = 0x000080, // aborts on isMe
SPFLAG_UNHOLY = 0x000100, // counts as "unholy"
SPFLAG_UNCLEAN = 0x000200, // counts as "unclean"
SPFLAG_CHAOTIC = 0x000400, // counts as "chaotic"
SPFLAG_HASTY = 0x000800, // counts as "hasty"
//0x001000,
SPFLAG_ESCAPE = 0x002000, // useful for running away
SPFLAG_RECOVERY = 0x004000, // healing or recovery spell
SPFLAG_AREA = 0x008000, // area affect
SPFLAG_BATTLE = 0x010000, // a non-Conjuration spell that
// is still a battle spell
//0x020000,
SPFLAG_MONSTER = 0x040000, // monster-only spell
SPFLAG_INNATE = 0x080000, // an innate spell, even if
// use by a priest/wizard
SPFLAG_NOISY = 0x100000, // makes noise, even if innate
SPFLAG_TESTING = 0x200000, // a testing/debugging spell
SPFLAG_CORPSE_VIOLATING = 0x400000, // Conduct violation for Fedhas
SPFLAG_ALLOW_SELF = 0x800000, // Not helpful, but may want to
// target self
};
enum spret_type
{
SPRET_ABORT = 0, // should be left as 0
SPRET_FAIL,
SPRET_SUCCESS,
SPRET_NONE, // spell was not handled
};
#define fail_check() if (fail) return SPRET_FAIL
typedef bool (*spell_selector)(spell_type spell);
int list_spells(bool toggle_with_I = true, bool viewing = false,
bool allow_preselect = true,
const string &title = "Your Spells",
spell_selector selector = NULL);
int spell_fail(spell_type spell);
int calc_spell_power(spell_type spell, bool apply_intel,
bool fail_rate_chk = false, bool cap_power = true,
bool rod = false);
int calc_spell_range(spell_type spell, int power = 0, bool rod = false);
bool cast_a_spell(bool check_range, spell_type spell = SPELL_NO_SPELL);
void inspect_spells();
void do_cast_spell_cmd(bool force);
spret_type your_spells(spell_type spell, int powc = 0, bool allow_fail = true);
double get_miscast_chance(spell_type spell, int severity = 2);
int failure_rate_colour(spell_type spell);
int failure_rate_to_int(int fail);
char* failure_rate_to_string(int fail);
string spell_power_string(spell_type spell, bool rod = false);
string spell_range_string(spell_type spell, bool rod = false);
string spell_schools_string(spell_type spell);
string spell_hunger_string(spell_type spell, bool rod = false);
string spell_noise_string(spell_type spell);
bool is_prevented_teleport(spell_type spell);
bool spell_is_uncastable(spell_type spell, string &message);
void spell_skills(spell_type spell, set<skill_type> &skills);
#endif
|