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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines