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