ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/global.h
(Generate patch)

Comparing deliantra/server/include/global.h (file contents):
Revision 1.14 by root, Mon Sep 4 11:07:59 2006 UTC vs.
Revision 1.31 by root, Fri Dec 22 16:34:00 2006 UTC

1/*
2 * static char *rcsid_global_h =
3 * "$Id: global.h,v 1.14 2006/09/04 11:07:59 root Exp $";
4 */
5
6/* 1/*
7 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
8 3
9 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
10 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
21 16
22 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 20
26 The author can be reached via e-mail to crossfire-devel@real-time.com 21 The author can be reached via e-mail to crossfire@schmorp.de
27*/ 22*/
28 23
29#ifndef GLOBAL_H 24#ifndef GLOBAL_H
30#define GLOBAL_H 25#define GLOBAL_H
31 26
33#define EXTERN extern 28#define EXTERN extern
34#endif 29#endif
35 30
36#include "includes.h" 31#include "includes.h"
37 32
38 33typedef int8_t sint8;
39/* Type defines for specific signed/unsigned variables of a certain number 34typedef uint8_t uint8;
40 * of bits. Not really used anyplace, but if a certain number of bits 35typedef int16_t sint16;
41 * is required, these type defines should then be used. This will make 36typedef uint16_t uint16;
42 * porting to systems that have different sized data types easier. 37typedef int32_t sint32;
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
55typedef unsigned int uint32; 38typedef uint32_t uint32;
39typedef int64_t sint64;
40typedef uint64_t uint64;
56 41
57#ifndef UINT32_MAX 42#include "config.h"
58#define UINT32_MAX 4294967295U 43#include "define.h"
44#include "logger.h"
45
46#ifndef TRUE
47#define TRUE 1
59#endif 48#endif
60 49
61typedef signed int sint32; 50#ifndef FALSE
62#define SINT32_MAX 2147483647 51#define FALSE 0
63
64typedef unsigned short uint16;
65#ifndef UINT16_MAX
66#define UINT16_MAX 65535
67#endif 52#endif
68 53
69typedef signed short sint16; 54// used only for tagging structure members so scripting languages
70#define SINT16_MAX 32767 55// can easily parse the include files.
71 56#define ACC_CLASS(name)
72typedef unsigned char uint8; 57#define ACC(meta,member) member
73#ifndef UINT8_MAX
74#define UINT8_MAX 255
75#endif
76
77typedef signed char sint8;
78#define SINT8_MAX 127
79
80
81typedef 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 */
86typedef unsigned __int64 uint64;
87typedef 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
98typedef unsigned long uint64;
99typedef signed long sint64;
100#elif SIZEOF_LONG_LONG == 8
101typedef unsigned long long uint64;
102typedef 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#include <vector>
111 58
112#include "keyword.h" 59#include "keyword.h"
113#include "traits.h" 60#include "traits.h"
114#include "dynbuf.h" 61#include "dynbuf.h"
115#include "util.h" 62#include "util.h"
116#include "shstr.h" 63#include "shstr.h"
117 64
118/* This blob, in this order, is needed to actually define maps */ 65/* This blob, in this order, is needed to actually define maps */
119#include "face.h" 66#include "face.h"
120/* Include the basic defines from spells.h */ 67
68#include "spells.h"
69
121#include "attack.h" /* needs to be before material.h */ 70#include "attack.h" /* needs to be before material.h */
122#include "material.h" 71#include "material.h"
123#include "living.h" 72#include "living.h"
124#include "object.h" 73#include "object.h"
125#include "map.h" 74#include "map.h"
126#include "tod.h" 75#include "tod.h"
127 76
128#include "skills.h" 77#include "skills.h"
129 78
130/* Pull in the socket structure - used in the player structure */ 79/* Pull in the socket structure - used in the player structure */
131#include "newserver.h" 80#include "network.h"
81#include "client.h"
132 82
133/* Pull in the player structure */ 83/* Pull in the player structure */
134#include "player.h" 84#include "player.h"
135 85
136/* pull in treasure structure */ 86/* pull in treasure structure */
142#include "book.h" 92#include "book.h"
143/* 93/*
144 * So far only used when dealing with artifacts. 94 * So far only used when dealing with artifacts.
145 * (now used by alchemy and other code too. Nov 95 b.t). 95 * (now used by alchemy and other code too. Nov 95 b.t).
146 */ 96 */
147typedef struct linked_char { 97struct linked_char
98{
148 shstr name; 99 shstr name;
149 struct linked_char *next; 100 struct linked_char *next;
150} linked_char; 101};
151
152 102
153/* Pull in artifacts */ 103/* Pull in artifacts */
154#include "artifact.h" 104#include "artifact.h"
155 105
156/* Now for gods */ 106/* Now for gods */
159/* Now for races */ 109/* Now for races */
160#include "race.h" 110#include "race.h"
161 111
162/* Now for recipe/alchemy */ 112/* Now for recipe/alchemy */
163#include "recipe.h" 113#include "recipe.h"
164
165/* Now for spells */
166#include "spells.h"
167 114
168#include "funcpoint.h" 115#include "funcpoint.h"
169 116
170/***************************************************************************** 117/*****************************************************************************
171 * GLOBAL VARIABLES: * 118 * GLOBAL VARIABLES: *
175 122
176/* 123/*
177 * These are the beginnings of linked lists: 124 * These are the beginnings of linked lists:
178 */ 125 */
179EXTERN player *first_player; 126EXTERN player *first_player;
180EXTERN mapstruct *first_map; 127EXTERN maptile *first_map;
181EXTERN region *first_region; 128EXTERN region *first_region;
182EXTERN treasurelist *first_treasurelist; 129EXTERN treasurelist *first_treasurelist;
183EXTERN artifactlist *first_artifactlist; 130EXTERN artifactlist *first_artifactlist;
184EXTERN archetype *first_archetype; 131EXTERN archetype *first_archetype;
185EXTERN objectlink *first_friendly_object; /* Objects monsters will go after */ 132EXTERN objectlink *first_friendly_object; /* Objects monsters will go after */
223/* 170/*
224 * Used in treasure.c 171 * Used in treasure.c
225 */ 172 */
226EXTERN archetype *ring_arch,*amulet_arch,*staff_arch,*crown_arch; 173EXTERN archetype *ring_arch,*amulet_arch,*staff_arch,*crown_arch;
227 174
228extern std::vector<Animations> animations; 175EXTERN std::vector<Animations> animations;
229EXTERN int num_animations,animations_allocated, bmaps_checksum; 176EXTERN int num_animations,animations_allocated, bmaps_checksum;
230 177
231/* Rotate right from bsd sum. This is used in various places for checksumming */ 178/* Rotate right from bsd sum. This is used in various places for checksumming */
232#define ROTATE_RIGHT(c) if ((c) & 01) (c) = ((c) >>1) + 0x80000000; else (c) >>= 1; 179#define ROTATE_RIGHT(c) if ((c) & 01) (c) = ((c) >>1) + 0x80000000; else (c) >>= 1;
233 180
234
235#define SET_ANIMATION(ob,newanim) ob->face=&new_faces[animations[ob->animation_id].faces[newanim]] 181#define SET_ANIMATION(ob,newanim) ob->face = new_faces + animations [ob->animation_id].faces [newanim]
236#define GET_ANIMATION(ob,anim) (animations[ob->animation_id].faces[anim]) 182#define GET_ANIMATION(ob,anim) animations [ob->animation_id].faces [anim]
237#define GET_ANIM_ID(ob) (ob->animation_id) 183#define GET_ANIM_ID(ob) (ob->animation_id)
238/* NUM_ANIMATIONS returns the number of animations allocated. The last 184/* NUM_ANIMATIONS returns the number of animations allocated. The last
239 * usuable animation will be NUM_ANIMATIONS-1 (for example, if an object 185 * usuable animation will be NUM_ANIMATIONS-1 (for example, if an object
240 * has 8 animations, NUM_ANIMATIONS will return 8, but the values will 186 * has 8 animations, NUM_ANIMATIONS will return 8, but the values will
241 * range from 0 through 7. 187 * range from 0 through 7.
250 196
251extern New_Face *blank_face, *empty_face; 197extern New_Face *blank_face, *empty_face;
252extern New_Face *dark_faces[]; 198extern New_Face *dark_faces[];
253extern New_Face *smooth_face; 199extern New_Face *smooth_face;
254 200
255
256extern long max_time; /* loop time */
257extern NewSocket *init_sockets; 201extern client *init_sockets;
258 202
259
260EXTERN char *font_graphic;
261
262#ifndef __CEXTRACT__
263#include "libproto.h" 203#include "libproto.h"
264#include "sockproto.h" 204#include "sockproto.h"
265#endif
266
267 205
268#define decrease_ob(xyz) decrease_ob_nr(xyz,1) 206#define decrease_ob(xyz) decrease_ob_nr(xyz,1)
269 207
270/* FREE_AND_CLEAR frees the pointer and then sets it to NULL. 208ACC_CLASS (Settings)
271 * This is generally done as a safety, and having this macro
272 * makes the code a bit cleaner when doing so.
273 */
274#define FREE_AND_CLEAR(xyz) {free(xyz); xyz=NULL; }
275
276#ifdef CALLOC
277#undef CALLOC
278#endif
279
280#ifdef USE_CALLOC
281# define CALLOC(x,y) calloc(x,y)
282# define CFREE(x) free(x)
283#else
284# define CALLOC(x,y) malloc(x*y)
285# define CFREE(x) free(x)
286#endif
287
288#ifndef WIN32 /* ---win32 we define this stuff in win32.h */
289#if HAVE_DIRENT_H
290# include <dirent.h>
291# define NAMLEN(dirent) strlen((dirent)->d_name)
292#else
293# define dirent direct
294# define NAMLEN(dirent) (dirnet)->d_namlen
295# if HAVE_SYS_NDIR_H
296# include <sys/ndir.h>
297# endif
298# if HAVE_SYS_DIR_H
299# include <sys/dir.h>
300# endif
301# if HAVE_NDIR_H
302# include <ndir.h>
303# endif
304#endif
305#endif
306
307typedef struct Settings { 209struct Settings {
308 char *logfilename; /* logfile to use */ 210 char *ACC (RO, logfilename); /* logfile to use */
309 uint16 csport; /* port for new client/server */ 211 int ACC (RW, csport); /* port for new client/server */
310 LogLevel debug; /* Default debugging level */ 212 int ACC (RW, debug); /* Default debugging level */
311 uint8 dumpvalues; /* Set to dump various values/tables */ 213 uint8 dumpvalues; /* Set to dump various values/tables */
312 char *dumparg; /* additional argument for some dump functions */ 214 char *dumparg; /* additional argument for some dump functions */
313 uint8 daemonmode; /* If true, detach and become daemon */ 215 uint8 daemonmode; /* If true, detach and become daemon */
314 int argc; /* parameters that were passed to the program */ 216 int argc; /* parameters that were passed to the program */
315 char **argv; /* Only used by xio.c, so will go away at some time */ 217 char **argv; /* Only used by xio.c, so will go away at some time */
316 char *confdir; /* configuration files */ 218 char *ACC (RO, confdir); /* configuration files */
317 char *datadir; /* read only data files */ 219 char *ACC (RO, datadir); /* read only data files */
318 char *localdir; /* read/write data files */ 220 char *ACC (RO, localdir); /* read/write data files */
319 char *playerdir; /* Where the player files are */ 221 char *ACC (RO, playerdir); /* Where the player files are */
320 char *mapdir; /* Where the map files are */ 222 char *ACC (RO, mapdir); /* Where the map files are */
321 char *archetypes; /* name of the archetypes file - libdir is prepended */ 223 char *ACC (RO, archetypes); /* name of the archetypes file - libdir is prepended */
322 char *regions; /* name of the regions file - libdir is prepended */ 224 char *ACC (RO, regions); /* name of the regions file - libdir is prepended */
323 char *treasures; /* location of the treasures file. */ 225 char *ACC (RO, treasures); /* location of the treasures file. */
324 char *uniquedir; /* directory for the unique items */ 226 char *ACC (RO, uniquedir); /* directory for the unique items */
325 char *templatedir; /* directory for the template map */ 227 char *ACC (RO, templatedir); /* directory for the template map */
326 char *tmpdir; /* Directory to use for temporary files */ 228 char *ACC (RO, tmpdir); /* Directory to use for temporary files */
327 uint8 stat_loss_on_death; /* If true, chars lose a random stat when they die */
328 sint16 pk_luck_penalty; /* Amount by which player luck is reduced if they PK */ 229 sint16 ACC (RW, pk_luck_penalty); /* Amount by which player luck is reduced if they PK */
230 uint8 ACC (RW, stat_loss_on_death); /* If true, chars lose a random stat when they die */
329 uint8 permanent_exp_ratio; /* how much exp should be 'permenant' and unable to be lost*/ 231 uint8 ACC (RW, permanent_exp_ratio); /* how much exp should be 'permenant' and unable to be lost*/
330 uint8 death_penalty_ratio; /* how much exp should be lost at death */ 232 uint8 ACC (RW, death_penalty_ratio); /* how much exp should be lost at death */
331 uint8 death_penalty_level; /* how many levels worth of exp may be lost on one death */ 233 uint8 ACC (RW, death_penalty_level); /* how many levels worth of exp may be lost on one death */
332 uint8 balanced_stat_loss; /* If true, Death stat depletion based on level etc */ 234 uint8 ACC (RW, balanced_stat_loss); /* If true, Death stat depletion based on level etc */
333 uint8 not_permadeth; /* if true, death is non-permament */ 235 uint8 ACC (RW, not_permadeth); /* if true, death is non-permament */
334 uint8 simple_exp; /* If true, use the simple experience system */ 236 uint8 ACC (RW, simple_exp); /* If true, use the simple experience system */
335 int reset_loc_time; /* Number of seconds to put player back at home */ 237 int ACC (RW, reset_loc_time); /* Number of seconds to put player back at home */
336 uint8 set_title; /* players can set thier title */ 238 uint8 ACC (RW, set_title); /* players can set thier title */
337 uint8 resurrection; /* ressurection possible w/ permadeth on */ 239 uint8 ACC (RW, resurrection); /* ressurection possible w/ permadeth on */
338 uint8 search_items; /* search_items command */ 240 uint8 ACC (RW, search_items); /* search_items command */
339 uint8 spell_encumbrance; /* encumbrance effects spells */ 241 uint8 ACC (RW, spell_encumbrance); /* encumbrance effects spells */
340 uint8 spell_failure_effects; /* nasty backlash to spell failures */ 242 uint8 ACC (RW, spell_failure_effects); /* nasty backlash to spell failures */
341 uint16 set_friendly_fire; /* Percent of damage done by peaceful player vs player damage */ 243 uint16 ACC (RW, set_friendly_fire); /* Percent of damage done by peaceful player vs player damage */
342 uint8 casting_time; /* it takes awhile to cast a spell */ 244 uint8 ACC (RW, casting_time); /* it takes awhile to cast a spell */
343 uint8 real_wiz; /* use mud-like wizards */ 245 uint8 ACC (RW, real_wiz); /* use mud-like wizards */
344 uint8 recycle_tmp_maps; /* re-use tmp maps. */
345 uint8 explore_mode; /* explore mode allowed? */ 246 uint8 ACC (RW, explore_mode); /* explore mode allowed? */
346 uint8 spellpoint_level_depend; /* spell costs go up with level */ 247 uint8 ACC (RW, spellpoint_level_depend); /* spell costs go up with level */
347 char who_format[MAX_BUF]; /* The format that the who command should use */
348 char who_wiz_format[MAX_BUF]; /* The format that the who command should use when called by a dm*/
349 char motd[MAX_BUF]; /* name of the motd file */ 248 char ACC (RW, motd)[MAX_BUF]; /* name of the motd file */
350 char *rules; /* name of rules file*/ 249 char *ACC (RO, rules); /* name of rules file*/
351 char *news; /* name of news file*/ 250 char *ACC (RO, news); /* name of news file*/
352 char dm_mail[MAX_BUF]; /* DM's Email address */ 251 char ACC (RW, dm_mail)[MAX_BUF]; /* DM's Email address */
353 252
354 /* The meta_ is information for the metaserver. These are set in
355 * the lib/settings file.
356 */
357 uint8 meta_on:1; /* True if we should send updates */
358 char meta_server[MAX_BUF]; /* Hostname/ip addr of the metaserver */
359 char meta_host[MAX_BUF]; /* Hostname of this host */
360 uint16 meta_port; /* Port number to use for updates */
361 char meta_comment[MAX_BUF]; /* Comment we send to the metaserver */
362
363 uint32 worldmapstartx; /* starting x tile for the worldmap */ 253 uint32 ACC (RW, worldmapstartx); /* starting x tile for the worldmap */
364 uint32 worldmapstarty; /* starting y tile for the worldmap */ 254 uint32 ACC (RW, worldmapstarty); /* starting y tile for the worldmap */
365 uint32 worldmaptilesx; /* number of tiles wide the worldmap is */ 255 uint32 ACC (RW, worldmaptilesx); /* number of tiles wide the worldmap is */
366 uint32 worldmaptilesy; /* number of tiles high the worldmap is */ 256 uint32 ACC (RW, worldmaptilesy); /* number of tiles high the worldmap is */
367 uint32 worldmaptilesizex; /* number of squares wide in a wm tile */ 257 uint32 ACC (RW, worldmaptilesizex); /* number of squares wide in a wm tile */
368 uint32 worldmaptilesizey; /* number of squares high in a wm tile */ 258 uint32 ACC (RW, worldmaptilesizey); /* number of squares high in a wm tile */
369 uint16 dynamiclevel; /* how dynamic is the world? */ 259 uint16 ACC (RW, dynamiclevel); /* how dynamic is the world? */
370 uint8 fastclock; /* if true, clock goes warp 9 */ 260 uint8 ACC (RW, fastclock); /* if true, clock goes warp 9 */
371 261
372 char *emergency_mapname; /* map to return players to in emergency */ 262 char *ACC (RW, emergency_mapname); /* map to return players to in emergency */
373 uint16 emergency_x, emergency_y; /* coordinates to use on that map */ 263 uint16 ACC (RW, emergency_x), ACC (RW, emergency_y); /* coordinates to use on that map */
374 264
375 sint16 max_level; /* This is read out of exp_table */ 265 int ACC (RW, max_level); /* This is read out of exp_table */
376 float item_power_factor; /* See note in setings file */ 266 float ACC (RW, item_power_factor); /* See note in setings file */
377 267
378 int armor_max_enchant; /* Maximum number of times an armor can be enchanted */ 268 int ACC (RW, armor_max_enchant); /* Maximum number of times an armor can be enchanted */
379 int armor_weight_reduction; /* Weight reduction per enchantment */ 269 int ACC (RW, armor_weight_reduction); /* Weight reduction per enchantment */
270 int ACC (RW, armor_speed_improvement); /* Speed improvement */
380 uint8 armor_weight_linear; /* If 1, weight reduction is linear, else exponantiel */ 271 uint8 ACC (RW, armor_weight_linear); /* If 1, weight reduction is linear, else exponantiel */
381 int armor_speed_improvement; /* Speed improvement */
382 uint8 armor_speed_linear; /* If 1, speed improvement is linear, else exponantiel */ 272 uint8 ACC (RW, armor_speed_linear); /* If 1, speed improvement is linear, else exponantiel */
383 uint8 no_player_stealing; /* If 1, can not steal from other players */ 273 uint8 ACC (RW, no_player_stealing); /* If 1, can not steal from other players */
384 uint8 create_home_portals; /* If 1, can create portals in personal maps */ 274 uint8 ACC (RW, create_home_portals); /* If 1, can create portals in personal maps */
385} Settings; 275};
386 276
387extern Settings settings; 277extern Settings settings;
388
389/* 0.94.1 - change to GETTIMEOFDAY macro - SNI systems only one one option.
390 * rather than have complex #ifdefs throughout the file, lets just figure
391 * it out once, here at the top.
392 * Have no idea if that is the right symbol to check on for NetBSD,
393 * but NetBSD does use 2 params.
394 * Move this to global.h from time.c since its also used in arch.c
395 */
396
397#ifdef GETTIMEOFDAY_TWO_ARGS
398#define GETTIMEOFDAY(last_time) gettimeofday(last_time, (struct timezone *) NULL);
399#else
400#define GETTIMEOFDAY(last_time) gettimeofday(last_time);
401#endif
402 278
403#include "plugin.h" 279#include "plugin.h"
404#include "cfperl.h" 280#include "cfperl.h"
405 281
406//TODO: various TEMPORARY link guards to avoid doing the wrong thing
407void free (object *);
408void free (archetype *);
409void free (recipe *);
410void free (linked_char *);
411void free (godlink *);
412void free (mapstruct *);
413void free (key_value *);
414void free (treasure *);
415void free (materialtype_t *);
416void free (player *);
417void free (New_Face *);
418
419#endif /* GLOBAL_H */ 282#endif /* GLOBAL_H */
420 283

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines