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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines