Atrinik Server  4.0
power_crystal.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 
36 #include <global.h>
37 #include <object.h>
38 #include <object_methods.h>
39 
41 static int
42 apply_func (object *op, object *applier, int aflags)
43 {
44  HARD_ASSERT(op != NULL);
45  HARD_ASSERT(applier != NULL);
46 
47  int power_available = applier->stats.sp - applier->stats.maxsp;
48  int power_space = op->stats.maxsp - op->stats.sp;
49  int power_grab = 0;
50 
51  if (power_available >= 0 && power_space > 0) {
52  power_grab = MIN(power_space, applier->stats.sp / 2);
53  }
54 
55  if (power_available < 0 && op->stats.sp > 0) {
56  power_grab = -MIN(-power_available, op->stats.sp);
57  }
58 
59  applier->stats.sp -= power_grab;
60  op->stats.sp += power_grab;
61 
62  return OBJECT_METHOD_OK;
63 }
64 
69 {
71 }
static const char *const stats[]
Definition: stats.c:38
int16_t sp
Definition: living.h:78
int16_t maxsp
Definition: living.h:81
#define POWER_CRYSTAL
Definition: define.h:530
static int apply_func(object *op, object *applier, int aflags)
Definition: power_crystal.c:42
living stats
Definition: object.h:481
#define OBJECT_METHODS(type)
#define OBJECT_METHOD_OK
OBJECT_TYPE_INIT_DEFINE(power_crystal)
Definition: power_crystal.c:68