1 |
/* |
2 |
CrossFire, A Multiplayer game for X-windows |
3 |
|
4 |
Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
5 |
Copyright (C) 1992 Frank Tore Johansen |
6 |
|
7 |
This program is free software; you can redistribute it and/or modify |
8 |
it under the terms of the GNU General Public License as published by |
9 |
the Free Software Foundation; either version 2 of the License, or |
10 |
(at your option) any later version. |
11 |
|
12 |
This program is distributed in the hope that it will be useful, |
13 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 |
GNU General Public License for more details. |
16 |
|
17 |
You should have received a copy of the GNU General Public License |
18 |
along with this program; if not, write to the Free Software |
19 |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
20 |
|
21 |
The author can be reached via e-mail to crossfire-devel@real-time.com |
22 |
*/ |
23 |
|
24 |
#ifndef GLOBAL_H |
25 |
#define GLOBAL_H |
26 |
|
27 |
#ifndef EXTERN |
28 |
#define EXTERN extern |
29 |
#endif |
30 |
|
31 |
#include "includes.h" |
32 |
|
33 |
typedef int8_t sint8; |
34 |
typedef uint8_t uint8; |
35 |
typedef int16_t sint16; |
36 |
typedef uint16_t uint16; |
37 |
typedef int32_t sint32; |
38 |
typedef uint32_t uint32; |
39 |
typedef int64_t sint64; |
40 |
typedef uint64_t uint64; |
41 |
|
42 |
typedef unsigned short Fontindex; |
43 |
|
44 |
#include <vector> |
45 |
|
46 |
#define ACC_CLASS(name) |
47 |
#define ACC(meta,member) member |
48 |
|
49 |
#include "keyword.h" |
50 |
#include "traits.h" |
51 |
#include "dynbuf.h" |
52 |
#include "util.h" |
53 |
#include "shstr.h" |
54 |
|
55 |
/* This blob, in this order, is needed to actually define maps */ |
56 |
#include "face.h" |
57 |
/* Include the basic defines from spells.h */ |
58 |
#include "attack.h" /* needs to be before material.h */ |
59 |
#include "material.h" |
60 |
#include "living.h" |
61 |
#include "object.h" |
62 |
#include "map.h" |
63 |
#include "tod.h" |
64 |
|
65 |
#include "skills.h" |
66 |
|
67 |
/* Pull in the socket structure - used in the player structure */ |
68 |
#include "newserver.h" |
69 |
|
70 |
/* Pull in the player structure */ |
71 |
#include "player.h" |
72 |
|
73 |
/* pull in treasure structure */ |
74 |
#include "treasure.h" |
75 |
|
76 |
#include "commands.h" |
77 |
|
78 |
/* pull in book structures */ |
79 |
#include "book.h" |
80 |
/* |
81 |
* So far only used when dealing with artifacts. |
82 |
* (now used by alchemy and other code too. Nov 95 b.t). |
83 |
*/ |
84 |
struct linked_char |
85 |
{ |
86 |
shstr name; |
87 |
struct linked_char *next; |
88 |
}; |
89 |
|
90 |
/* Pull in artifacts */ |
91 |
#include "artifact.h" |
92 |
|
93 |
/* Now for gods */ |
94 |
#include "god.h" |
95 |
|
96 |
/* Now for races */ |
97 |
#include "race.h" |
98 |
|
99 |
/* Now for recipe/alchemy */ |
100 |
#include "recipe.h" |
101 |
|
102 |
/* Now for spells */ |
103 |
#include "spells.h" |
104 |
|
105 |
#include "funcpoint.h" |
106 |
|
107 |
/***************************************************************************** |
108 |
* GLOBAL VARIABLES: * |
109 |
*****************************************************************************/ |
110 |
|
111 |
extern New_Face *new_faces; |
112 |
|
113 |
/* |
114 |
* These are the beginnings of linked lists: |
115 |
*/ |
116 |
EXTERN player *first_player; |
117 |
EXTERN maptile *first_map; |
118 |
EXTERN region *first_region; |
119 |
EXTERN treasurelist *first_treasurelist; |
120 |
EXTERN artifactlist *first_artifactlist; |
121 |
EXTERN archetype *first_archetype; |
122 |
EXTERN objectlink *first_friendly_object; /* Objects monsters will go after */ |
123 |
EXTERN godlink *first_god; |
124 |
EXTERN racelink *first_race; |
125 |
|
126 |
/* |
127 |
* The editor uses these (will get them out of here later): |
128 |
*/ |
129 |
|
130 |
EXTERN long editor; /* if true, edit maps instead of playing (almost obsolete) */ |
131 |
|
132 |
/* |
133 |
* Variables set by different flags (see init.c): |
134 |
*/ |
135 |
|
136 |
EXTERN long warn_archetypes; /* If true, write warnings when failing */ |
137 |
/* to find archetypes when loading from file */ |
138 |
EXTERN long init_done; /* Ignores signals until init_done is true */ |
139 |
EXTERN long trying_emergency_save; /* True when emergency_save() is reached */ |
140 |
EXTERN long nroferrors; /* If it exceeds MAX_ERRORS, call fatal() */ |
141 |
|
142 |
extern long pticks; /* used by various function to determine */ |
143 |
/* how often to save the character */ |
144 |
/* |
145 |
* Misc global variables: |
146 |
*/ |
147 |
EXTERN FILE *logfile; /* Used by server/daemon.c */ |
148 |
EXTERN int exiting; /* True if the game is about to exit */ |
149 |
EXTERN long nroftreasures; /* Only used in malloc_info() */ |
150 |
EXTERN long nrofartifacts; /* Only used in malloc_info() */ |
151 |
EXTERN long nrofallowedstr; /* Only used in malloc_info() */ |
152 |
|
153 |
EXTERN archetype *empty_archetype; /* Nice to have fast access to it */ |
154 |
EXTERN archetype *map_archeytpe; |
155 |
EXTERN char first_map_path[MAX_BUF]; /* The start-level */ |
156 |
EXTERN char first_map_ext_path[MAX_BUF]; /* Path used for per-race start maps */ |
157 |
|
158 |
EXTERN char errmsg[HUGE_BUF]; |
159 |
EXTERN long ob_count; |
160 |
/* |
161 |
* Used in treasure.c |
162 |
*/ |
163 |
EXTERN archetype *ring_arch,*amulet_arch,*staff_arch,*crown_arch; |
164 |
|
165 |
extern std::vector<Animations> animations; |
166 |
EXTERN int num_animations,animations_allocated, bmaps_checksum; |
167 |
|
168 |
/* Rotate right from bsd sum. This is used in various places for checksumming */ |
169 |
#define ROTATE_RIGHT(c) if ((c) & 01) (c) = ((c) >>1) + 0x80000000; else (c) >>= 1; |
170 |
|
171 |
|
172 |
#define SET_ANIMATION(ob,newanim) ob->face=&new_faces[animations[ob->animation_id].faces[newanim]] |
173 |
#define GET_ANIMATION(ob,anim) (animations[ob->animation_id].faces[anim]) |
174 |
#define GET_ANIM_ID(ob) (ob->animation_id) |
175 |
/* NUM_ANIMATIONS returns the number of animations allocated. The last |
176 |
* usuable animation will be NUM_ANIMATIONS-1 (for example, if an object |
177 |
* has 8 animations, NUM_ANIMATIONS will return 8, but the values will |
178 |
* range from 0 through 7. |
179 |
*/ |
180 |
#define NUM_ANIMATIONS(ob) (animations[ob->animation_id].num_animations) |
181 |
#define NUM_FACINGS(ob) (animations[ob->animation_id].facings) |
182 |
|
183 |
extern short freearr_x[SIZEOFFREE], freearr_y[SIZEOFFREE]; |
184 |
extern int maxfree[SIZEOFFREE], freedir[SIZEOFFREE]; |
185 |
extern int rightof_x[9], rightof_y[9]; |
186 |
extern int leftof_x[9], leftof_y[9]; |
187 |
|
188 |
extern New_Face *blank_face, *empty_face; |
189 |
extern New_Face *dark_faces[]; |
190 |
extern New_Face *smooth_face; |
191 |
|
192 |
|
193 |
extern long max_time; /* loop time */ |
194 |
extern NewSocket *init_sockets; |
195 |
|
196 |
|
197 |
EXTERN char *font_graphic; |
198 |
|
199 |
#ifndef __CEXTRACT__ |
200 |
#include "libproto.h" |
201 |
#include "sockproto.h" |
202 |
#endif |
203 |
|
204 |
|
205 |
#define decrease_ob(xyz) decrease_ob_nr(xyz,1) |
206 |
|
207 |
/* FREE_AND_CLEAR frees the pointer and then sets it to NULL. |
208 |
* This is generally done as a safety, and having this macro |
209 |
* makes the code a bit cleaner when doing so. |
210 |
*/ |
211 |
#define FREE_AND_CLEAR(xyz) {free(xyz); xyz=NULL; } |
212 |
|
213 |
#ifdef CALLOC |
214 |
#undef CALLOC |
215 |
#endif |
216 |
|
217 |
#ifdef USE_CALLOC |
218 |
# define CALLOC(x,y) calloc(x,y) |
219 |
# define CFREE(x) free(x) |
220 |
#else |
221 |
# define CALLOC(x,y) malloc(x*y) |
222 |
# define CFREE(x) free(x) |
223 |
#endif |
224 |
|
225 |
#if HAVE_DIRENT_H |
226 |
# include <dirent.h> |
227 |
# define NAMLEN(dirent) strlen((dirent)->d_name) |
228 |
#else |
229 |
# define dirent direct |
230 |
# define NAMLEN(dirent) (dirnet)->d_namlen |
231 |
# if HAVE_SYS_NDIR_H |
232 |
# include <sys/ndir.h> |
233 |
# endif |
234 |
# if HAVE_SYS_DIR_H |
235 |
# include <sys/dir.h> |
236 |
# endif |
237 |
# if HAVE_NDIR_H |
238 |
# include <ndir.h> |
239 |
# endif |
240 |
#endif |
241 |
|
242 |
typedef struct Settings { |
243 |
char *logfilename; /* logfile to use */ |
244 |
uint16 csport; /* port for new client/server */ |
245 |
LogLevel debug; /* Default debugging level */ |
246 |
uint8 dumpvalues; /* Set to dump various values/tables */ |
247 |
char *dumparg; /* additional argument for some dump functions */ |
248 |
uint8 daemonmode; /* If true, detach and become daemon */ |
249 |
int argc; /* parameters that were passed to the program */ |
250 |
char **argv; /* Only used by xio.c, so will go away at some time */ |
251 |
char *confdir; /* configuration files */ |
252 |
char *datadir; /* read only data files */ |
253 |
char *localdir; /* read/write data files */ |
254 |
char *playerdir; /* Where the player files are */ |
255 |
char *mapdir; /* Where the map files are */ |
256 |
char *archetypes; /* name of the archetypes file - libdir is prepended */ |
257 |
char *regions; /* name of the regions file - libdir is prepended */ |
258 |
char *treasures; /* location of the treasures file. */ |
259 |
char *uniquedir; /* directory for the unique items */ |
260 |
char *templatedir; /* directory for the template map */ |
261 |
char *tmpdir; /* Directory to use for temporary files */ |
262 |
uint8 stat_loss_on_death; /* If true, chars lose a random stat when they die */ |
263 |
sint16 pk_luck_penalty; /* Amount by which player luck is reduced if they PK */ |
264 |
uint8 permanent_exp_ratio; /* how much exp should be 'permenant' and unable to be lost*/ |
265 |
uint8 death_penalty_ratio; /* how much exp should be lost at death */ |
266 |
uint8 death_penalty_level; /* how many levels worth of exp may be lost on one death */ |
267 |
uint8 balanced_stat_loss; /* If true, Death stat depletion based on level etc */ |
268 |
uint8 not_permadeth; /* if true, death is non-permament */ |
269 |
uint8 simple_exp; /* If true, use the simple experience system */ |
270 |
int reset_loc_time; /* Number of seconds to put player back at home */ |
271 |
uint8 set_title; /* players can set thier title */ |
272 |
uint8 resurrection; /* ressurection possible w/ permadeth on */ |
273 |
uint8 search_items; /* search_items command */ |
274 |
uint8 spell_encumbrance; /* encumbrance effects spells */ |
275 |
uint8 spell_failure_effects; /* nasty backlash to spell failures */ |
276 |
uint16 set_friendly_fire; /* Percent of damage done by peaceful player vs player damage */ |
277 |
uint8 casting_time; /* it takes awhile to cast a spell */ |
278 |
uint8 real_wiz; /* use mud-like wizards */ |
279 |
uint8 recycle_tmp_maps; /* re-use tmp maps. */ |
280 |
uint8 explore_mode; /* explore mode allowed? */ |
281 |
uint8 spellpoint_level_depend; /* spell costs go up with level */ |
282 |
char who_format[MAX_BUF]; /* The format that the who command should use */ |
283 |
char who_wiz_format[MAX_BUF]; /* The format that the who command should use when called by a dm*/ |
284 |
char motd[MAX_BUF]; /* name of the motd file */ |
285 |
char *rules; /* name of rules file*/ |
286 |
char *news; /* name of news file*/ |
287 |
char dm_mail[MAX_BUF]; /* DM's Email address */ |
288 |
|
289 |
/* The meta_ is information for the metaserver. These are set in |
290 |
* the lib/settings file. |
291 |
*/ |
292 |
uint8 meta_on:1; /* True if we should send updates */ |
293 |
char meta_server[MAX_BUF]; /* Hostname/ip addr of the metaserver */ |
294 |
char meta_host[MAX_BUF]; /* Hostname of this host */ |
295 |
uint16 meta_port; /* Port number to use for updates */ |
296 |
char meta_comment[MAX_BUF]; /* Comment we send to the metaserver */ |
297 |
|
298 |
uint32 worldmapstartx; /* starting x tile for the worldmap */ |
299 |
uint32 worldmapstarty; /* starting y tile for the worldmap */ |
300 |
uint32 worldmaptilesx; /* number of tiles wide the worldmap is */ |
301 |
uint32 worldmaptilesy; /* number of tiles high the worldmap is */ |
302 |
uint32 worldmaptilesizex; /* number of squares wide in a wm tile */ |
303 |
uint32 worldmaptilesizey; /* number of squares high in a wm tile */ |
304 |
uint16 dynamiclevel; /* how dynamic is the world? */ |
305 |
uint8 fastclock; /* if true, clock goes warp 9 */ |
306 |
|
307 |
char *emergency_mapname; /* map to return players to in emergency */ |
308 |
uint16 emergency_x, emergency_y; /* coordinates to use on that map */ |
309 |
|
310 |
sint16 max_level; /* This is read out of exp_table */ |
311 |
float item_power_factor; /* See note in setings file */ |
312 |
|
313 |
int armor_max_enchant; /* Maximum number of times an armor can be enchanted */ |
314 |
int armor_weight_reduction; /* Weight reduction per enchantment */ |
315 |
uint8 armor_weight_linear; /* If 1, weight reduction is linear, else exponantiel */ |
316 |
int armor_speed_improvement; /* Speed improvement */ |
317 |
uint8 armor_speed_linear; /* If 1, speed improvement is linear, else exponantiel */ |
318 |
uint8 no_player_stealing; /* If 1, can not steal from other players */ |
319 |
uint8 create_home_portals; /* If 1, can create portals in personal maps */ |
320 |
} Settings; |
321 |
|
322 |
extern Settings settings; |
323 |
|
324 |
/* 0.94.1 - change to GETTIMEOFDAY macro - SNI systems only one one option. |
325 |
* rather than have complex #ifdefs throughout the file, lets just figure |
326 |
* it out once, here at the top. |
327 |
* Have no idea if that is the right symbol to check on for NetBSD, |
328 |
* but NetBSD does use 2 params. |
329 |
* Move this to global.h from time.c since its also used in arch.c |
330 |
*/ |
331 |
|
332 |
#ifdef GETTIMEOFDAY_TWO_ARGS |
333 |
#define GETTIMEOFDAY(last_time) gettimeofday(last_time, (struct timezone *) NULL); |
334 |
#else |
335 |
#define GETTIMEOFDAY(last_time) gettimeofday(last_time); |
336 |
#endif |
337 |
|
338 |
#include "plugin.h" |
339 |
#include "cfperl.h" |
340 |
|
341 |
//TODO: various TEMPORARY link guards to avoid doing the wrong thing |
342 |
void free (object *); |
343 |
void free (archetype *); |
344 |
void free (recipe *); |
345 |
void free (linked_char *); |
346 |
void free (godlink *); |
347 |
void free (objectlink *); |
348 |
void free (oblinkpt *); |
349 |
void free (maptile *); |
350 |
void free (key_value *); |
351 |
void free (treasure *); |
352 |
void free (materialtype_t *); |
353 |
void free (player *); |
354 |
void free (New_Face *); |
355 |
void free (racelink *); |
356 |
|
357 |
#endif /* GLOBAL_H */ |
358 |
|