summaryrefslogtreecommitdiff
path: root/src/map/magic-interpreter-base.hpp
blob: 8c05df06a6a73c17bc44de8e0c070bbd0c18c951 (plain) (blame)
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
#pragma once
//    magic-interpreter-base.hpp - Core of the old magic system.
//
//    Copyright © 2004-2011 The Mana World Development Team
//    Copyright © 2011-2014 Ben Longbons <b.r.longbons@gmail.com>
//
//    This file is part of The Mana World (Athena server)
//
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.

#include "fwd.hpp"

#include "../strings/fwd.hpp"

#include "../generic/fwd.hpp"

#include "../mmo/fwd.hpp"


namespace tmwa
{
namespace magic
{
extern magic_conf_t magic_conf; /* Global magic conf */
extern env_t magic_default_env; /* Fake default environment */

/**
 * Adds a component selection to a component holder (which may initially be nullptr)
 */
void magic_add_component(dumb_ptr<component_t> *component_holder, ItemNameId id, int count);

/**
 * Identifies the invocation used to trigger a spell
 *
 * Returns empty string if not found
 */
AString magic_find_invocation(XString spellname);

/**
 * Identifies the invocation used to denote a teleport location
 *
 * Returns empty string if not found
 */
AString magic_find_anchor_invocation(XString teleport_location);

dumb_ptr<teleport_anchor_t> magic_find_anchor(XString name);

dumb_ptr<env_t> spell_create_env(magic_conf_t *conf, dumb_ptr<spell_t> spell,
        dumb_ptr<map_session_data> caster, int spellpower, XString param);

void magic_free_env(dumb_ptr<env_t> env);

/**
 * near_miss is set to nonzero iff the spell only failed due to ephemereal issues (spell delay in effect, out of mana, out of components)
 */
effect_set_t *spell_trigger(dumb_ptr<spell_t> spell,
        dumb_ptr<map_session_data> caster,
        dumb_ptr<env_t> env, int *near_miss);

dumb_ptr<invocation> spell_instantiate(effect_set_t *effect, dumb_ptr<env_t> env);

/**
 * Bind a spell to a subject (this is a no-op for `local' spells).
 */
void spell_bind(dumb_ptr<map_session_data> subject, dumb_ptr<invocation> invocation);

// 1 on failure
int spell_unbind(dumb_ptr<map_session_data> subject, dumb_ptr<invocation> invocation);

/**
 * Clones a spell to run the at_effect field
 */
dumb_ptr<invocation> spell_clone_effect(dumb_ptr<invocation> source);

dumb_ptr<spell_t> magic_find_spell(XString invocation);

void spell_update_location(dumb_ptr<invocation> invocation);
} // namespace magic
} // namespace tmwa