Atrinik Server  4.0
spell.c
Go to the documentation of this file.
1 /*************************************************************************
2  * Atrinik, a Multiplayer Online Role Playing Game *
3  * *
4  * Copyright (C) 2009-2014 Alex Tokar and Atrinik Development Team *
5  * *
6  * Fork from Crossfire (Multiplayer game for X-windows). *
7  * *
8  * This program is free software; you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation; either version 2 of the License, or *
11  * (at your option) any later version. *
12  * *
13  * This program is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16  * GNU General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License *
19  * along with this program; if not, write to the Free Software *
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
21  * *
22  * The author can be reached at admin@atrinik.org *
23  ************************************************************************/
24 
32 #include <global.h>
33 #include <object.h>
34 #include <object_methods.h>
35 
37 static int
38 ranged_fire_func (object *op, object *shooter, int dir, double *delay)
39 {
40  HARD_ASSERT(op != NULL);
41  HARD_ASSERT(shooter != NULL);
42 
43  int cost = cast_spell(shooter,
44  shooter,
45  dir,
46  op->stats.sp,
47  0,
49  NULL);
50  if (cost != 0) {
51  shooter->stats.sp -= cost;
52 
53  if (delay != NULL) {
54  *delay = spells[op->stats.sp].time;
55  }
56 
57  return OBJECT_METHOD_OK;
58  }
59 
61 }
62 
67 {
68  OBJECT_METHODS(SPELL)->apply_func = object_apply_item;
69  OBJECT_METHODS(SPELL)->ranged_fire_func = ranged_fire_func;
70 }
int16_t sp
Definition: living.h:78
int cast_spell(object *op, object *caster, int dir, int type, int ability, int item, const char *stringarg)
Definition: spell_util.c:192
int time
Definition: spells.h:138
#define OBJECT_METHOD_UNHANDLED
spell_struct spells[NROFREALSPELLS]
Definition: spellist.h:34
int object_apply_item(object *op, object *applier, int aflags)
Definition: apply.c:110
living stats
Definition: object.h:481
#define OBJECT_METHODS(type)
OBJECT_TYPE_INIT_DEFINE(spell)
Definition: spell.c:66
#define OBJECT_METHOD_OK
#define CAST_NORMAL
Definition: spells.h:275
static int ranged_fire_func(object *op, object *shooter, int dir, double *delay)
Definition: spell.c:38
#define SPELL
Definition: define.h:210