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.17 by root, Sat Sep 16 22:06:17 2006 UTC vs.
Revision 1.34 by root, Sun Dec 31 21:02:04 2006 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines