ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/living.h
Revision: 1.16
Committed: Sun Jul 1 05:00:18 2007 UTC (16 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.15: +11 -12 lines
Log Message:
- upgrade crossfire trt to the GPL version 3 (hopefully correctly).
- add a single file covered by the GNU Affero General Public License
  (which is not yet released, so I used the current draft, which is
  legally a bit wavy, but its likely better than nothing as it expresses
  direct intent by the authors, and we can upgrade as soon as it has been
  released).
  * this should ensure availability of source code for the server at least
    and hopefully also archetypes and maps even when modified versions
    are not being distributed, in accordance of section 13 of the agplv3.

File Contents

# Content
1 /*
2 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
3 *
4 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992,2007 Frank Tore Johansen
7 *
8 * Crossfire TRT 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 3 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, see <http://www.gnu.org/licenses/>.
20 *
21 * The authors can be reached via e-mail to <crossfire@schmorp.de>
22 */
23
24 #ifndef LIVING_H
25 #define LIVING_H
26
27 #include <cassert>
28
29 // corresponds to some arrays in common/living.C
30 enum {
31 STR,
32 DEX,
33 CON,
34 INT,
35 WIS,
36 POW,
37 CHA,
38 NUM_STATS
39 };
40
41 #define MAXLEVEL 110
42
43 /* Changed from NO_STAT to NO_STAT_VAL to fix conlfict on
44 * AIX systems
45 */
46 #define NO_STAT_VAL 99 /* needed by skills code -b.t. */
47
48 extern const char *const attacks[NROFATTACKS];
49
50 extern const float cha_bonus[MAX_STAT + 1];
51 extern const int dex_bonus[MAX_STAT + 1];
52 extern const int thaco_bonus[MAX_STAT + 1];
53 extern const int turn_bonus[MAX_STAT + 1];
54 extern const int max_carry[MAX_STAT + 1];
55 extern const int dam_bonus[MAX_STAT + 1];
56 extern const int learn_spell[];
57 extern const char *const restore_msg[NUM_STATS];
58 extern const char *const statname[NUM_STATS];
59 extern const char *const short_stat_name[NUM_STATS];
60 extern const char *const lose_msg[NUM_STATS];
61 extern const float speed_bonus[MAX_STAT + 1];
62 extern const uint32 weight_limit[MAX_STAT + 1];
63 extern const int cleric_chance[MAX_STAT + 1];
64 extern const int fear_bonus[MAX_STAT + 1];
65
66 /* Mostly used by "alive" objects */
67 INTERFACE_CLASS (living)
68 struct living
69 {
70 sint64 ACC (RW, exp); /* Experience. */
71 sint32 ACC (RW, food); /* How much food in stomach. 0 = starved. */
72
73 sint8 ACC (RW, Str), ACC (RW, Dex), ACC (RW, Con), ACC (RW, Int), ACC (RW, Wis), ACC (RW, Pow), ACC (RW, Cha);
74 sint8 ACC (RW, wc), ACC (RW, ac); /* Weapon Class and Armour Class */
75 sint8 ACC (RW, luck); /* Affects thaco and ac from time to time */
76 sint16 ACC (RW, dam); /* How much damage this object does when hitting */
77
78 sint16 ACC (RW, hp); /* Hit Points. */
79 sint16 ACC (RW, maxhp);
80
81 sint16 ACC (RW, sp); /* Spell points. Used to cast mage spells. */
82 sint16 ACC (RW, maxsp); /* Max spell points. */
83
84 sint16 ACC (RW, grace); /* Grace. Used to invoke clerical prayers. */
85 sint16 ACC (RW, maxgrace); /* Grace. Used to invoke clerical prayers. */
86
87 // this method enforces field ordering and should not normally result in
88 // any code being generated strictly speaking, c++ compilers may reorder
89 // stat fields, so check for it and declare those compilers unsupported.
90 void check_ordering () const
91 {
92 assert ((sint8 *)&Str - (sint8 *)&Str == STR);
93 assert ((sint8 *)&Dex - (sint8 *)&Str == DEX);
94 assert ((sint8 *)&Con - (sint8 *)&Str == CON);
95 assert ((sint8 *)&Int - (sint8 *)&Str == INT);
96 assert ((sint8 *)&Wis - (sint8 *)&Str == WIS);
97 assert ((sint8 *)&Pow - (sint8 *)&Str == POW);
98 assert ((sint8 *)&Cha - (sint8 *)&Str == CHA);
99 }
100
101 sint8 &stat (int index)
102 {
103 check_ordering ();
104 return ((sint8 *)&Str)[index];
105 }
106
107 sint8 stat (int index) const
108 {
109 check_ordering ();
110 return ((const sint8 *)&Str)[index];
111 }
112 };
113
114 #endif
115