/*
 * static char *rcsid_config_h =
 *   "$Id: config.h,v 1.54 1998/01/05 10:34:28 master Exp master $";
 */

/*
    CrossFire, A Multiplayer game for X-windows

    Copyright (C) 1994 Mark Wedel
    Copyright (C) 1992 Frank Tore Johansen

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    The author can be reached via e-mail to mark@pyramid.com
*/

/* define INLINE to be what will cause functions be inlined with your
 * compiler.  inline or __inline are likely candidates.  If not sure, or
 * your compiler doesn't suppor inlining functions, just set this to static,
 * and all should work OK, just a little slower.
 */

#define INLINE __inline

/* If you get a complaint about O_NDELAY not being known/undefined, try
 * uncommenting this.
 * This may cause problems - O_NONBLOCK will return -1 on blocking writes
 * and set error to EAGAIN.  O_NDELAY returns 0.  This is only if no bytes
 * can be written - otherwise, the number of bytes written will be returned
 * for both modes.
 */

/*
#define O_NDELAY O_NONBLOCK
*/

/* This determine how many entries are stored in the kill log.  You
 * can see this information with the 'party kills' command.  More entries
 * mean slower performance and more memory.  IF this is not defined, then
 * this feature is disabled.
 */

/*#define PARTY_KILL_LOG 20*/

/*
 * Set this if you want the temporary maps to be saved and reused across
 * crossfire runs.  This can be especially useful for single player
 * servers, but even holds use for multiplayer servers.  The file used
 * is updated each time a temp map is updated.
 * Note that the file used to store this information is stored in
 * the LIB directory.  Running multiple crossfires with the same LIB
 * directory will cause serious problems, simply because in order for
 * this to really work, the filename must be constant so the next run
 * knows where to find the information.
 */

#define RECYCLE_TMP_MAPS

/* Set this if you want to activate the new client/server code.
 * Being that eutl dependencies have been removed, we now select it in
 * the config file here.
 * Unless you want to work with it, I would recommend you leave this
 * off, as the code isn't totally debugged, and if someone came through
 * with a new client, it could cause problems.
 */

/*
#define ERIC_SERVER
*/

/* CSPORT is the port used for the new client/server code.  Change
 * if desired.  Only of relevance if ERIC_SERVER is set above
 */

#define CSPORT 13327 /* old port + 1 */

/* This file contains various #defines that select various options.
 * Some may not be desirable, and some just may not work.
 *
 * There are some options that are not selectable in this file which
 * may not always be undesirable.  An example would be certain
 * treasures that you may not want to have available.  To remove the
 * activation code would make these items worthless - instead remove
 * these from the treasure file.  Some things to look for are:
 *
 * prepare_weapon, improve_*: Allow characters to enchant their own
 *	weapons
 * ench_armour: Allow characters to enchant their armor.
 */

/* Enables Brian Thomas's new alchemy code.  Might unbalance the game - lets
 * characters make potions and other special items.
 */

#define ALCHEMY

/*
 * The following enables the new light/darkness code.  Basically, darkness
 * affects line of sight, depending how dark the actual map is.  There are
 * also objects that create light (torches, spells, etc), which counteract
 * this effect.
 */

#define USE_LIGHTING

/* Uncommenting the following line allows the new skill code to be used
 * (look at skills.h to see some of the skill names.)  Allowing skills
 * can really change the balance of the game, and thus might be undesirable.
 * A few notes:  The following toggle just makes it so that the player can
 * not use skills (hopefully it will work).  But the skills will still exist,
 * so skills could still be gained with this selected.  In fact, some races
 * start with skills.
 */

#define ALLOW_SKILLS

/* Following allows characters to worshsip different gods.  Has no effect
 * if ALLOW_SKILLS (above) is not defined.
 */

#define MULTIPLE_GODS


/* IF this is set, then the range type will not switch to skill when
 * you use a melee weapon - this better emulates pre-skill code.
 */

#define NO_AUTO_SKILL_SWITCH

/* Following uses a new weapon improvement system.  This makes it more
 * difficult to get a super weapon, and makes it more likely that
 * players will create weapons that help certain areas (damage, sp, etc)
 * See the doc/SurvivalGuide for exact information on how the new method
 * works.
 */
/* READ THIS:  NEW_IMPROVE_WEAPON will likely become a standard (non
 * configurable) option in the next version.  If you are still using the old
 * code and plan to in the future, send me mail (mark@pyramid.com) so that
 * I know not to remove it.
 */

#define NEW_IMPROVE_WEAPON


/* This is a modification to the cone spells.  If a cone spell hits
 * a monster, the spell stops progressing (same is true for parties
 * of players).  This weakens the cones spells a bit.  If it is not
 * define, you get the old behaviour (cone spells cover every square
 * up to their range in a 90 degree arc.
 */

/*
#define NO_CONE_PROPOGATE
*/


/*
 * BANFILE
 * A file which contains users or sites which are banned from playing.
 * wildcards can be used in the file.  Valid entries are put on seperate lines.
 * example entries:
 * "joeblow@*.*.abc.edu"   ban joeblow at the given site : note only works if
 *                         user is using a client, as telnet does not report
 *                         userid.
 * "*@*.*.abc.edu"         ban the entire site...works both with telnet and
 *                         client.
 *
 * Note - banning by user name should not be used - the client
 * (including the newclient) can easily be changed to use any
 * username.  Also, with the new client, numeric host id is
 * used (ie, 192.15.4.6).  So to ban sites, you need to find out their
 * numeric IP address - not hard, 'who reports this
 *
 * From Tyler Van Gorder <tvangod@ecst.csuchico.edu>
 */

#ifndef BANFILE
#define BANFILE         "ban_file"
#endif

/* RANDOM_ENCOUNTERS determines if random encounter maps should be
 * done.  What this means is that if you are in natural terrain
 * (grass, brush, trees, jungle, etc), there is a chance as you step into
 * that terrain that a 3x3 area will become a random encounter.  You
 * automatically enter this encounter map, monsters are placed in it,
 * and you remain in it until you get to the outside of the encounter
 * map.  Reasons for having it active might be to make things a little
 * more interesting (players can no longer be absolutely safe bringing
 * stuff back to town), and it gives low level characters a place to beat
 * up an endless supply of some monsters.  Reasons for disabling is because
 * they might just be a nuisance, or you just don't like them
 */

/*#define RANDOM_ENCOUNTERS*/

/* casting times for spells, if you have this defined then it takes a
 * specific amount of time for a spell to go off. You may attack or
 * be hit during this time, and this will cause you to lose the spell.
 * I commented this out on my copy - I don't like the 'double clutch'
 * needed to cast it (first direction key starts casting, the
 * next actually puts the spell into effect.)  It could perhaps
 * be changed so that the initial direction is where it goes, and it
 * is cast automatically in that direction (so only 1 key is needed.)
 * But this could be undesirable as various things move while you cast it.
 */

/*#define CASTING_TIME*/

/* FULL_RING_DESCRIPTION has crossfire prints out the abilities of
 * rings or amulets in the appropriate windows.  So instead of just
 * have 'ring' get printed in your inventory, ring (Cha+1) or
 * amulet (reflect missiled), etc, will be printed out.  This also applies
 * to items laying on the ground.
 * No more information will be gathered than if you left click the
 * item (so, if the item is not identified, you will see nothing
 * except the item name.)  Tastes may vary on using this option.  It
 * can make the name excessively long, especially for unpaid items,
 * causing the (unpaid) to be cut off.  On the other hand, it can save
 * a lot of time, especially if you have several rings, or are looking
 * for one in a shop with lots of rings.
 */

#define FULL_RING_DESCRIPTION

/* if EXPLORE_MODE is defined, it allows players to enter explore mode,
 * where they can not die.  Unlike other games (nethack for instance) explore
 * modes, the only thing Crossfire explore mode does is prevent death.
 * Characters in explore mode will not be able to go on the scoreboard.  Also,
 * once explore mode is entered, there is no return.  Explore mode can
 * only be entered if the person doing so is the only player in the
 * game, and once done, that person can not add new players to the
 * game.  To get into explore mode, type 'explore
 * Explore mode code added by Mark Wedel (mark@pyramid.com)
 * It's a good idea to turn off EXPLORE_MODE if you will only be running
 * on server, since it would block new players.
 */

/* #define EXPLORE_MODE */

/****************************************************************************/
/* Patch: NOT_PERMADEATH                Author: Charles Henrich             */
/* Email: henrich@crh.cl.msu.edu        Date  : April 9, 1993               */
/*                                                                          */
/* Purpose: This patch changes death from being a permanent, very painful   */
/*          thing, to a painful, but survivable thing.  More mudlike in     */
/*          nature.  With this patch defined, when a player dies, they will */
/*          permanently lose one point off of a random stat, as well as     */
/*          losing 20% of their experience points.  Then they are whisked   */
/*          to the start map.  Although this sounds very nice here, it is   */
/*          still REAL painful to die, 20% of a million is alot!            */
/*                                                                          */
/****************************************************************************/
/* Note from Frank: This really makes the game easier, and takes away
 * a lot of the nerve, but people have different tastes...
 * Note from Mark:  It can make the game much less frustrating.  Especially
 * if people are coming in through remote sites, and might get killed
 * by lag.  Also, removes a lot of incentive for one player to kill another.
 * Note: Resurrection/reincarnation/raise dead spells are meaningless
 * if NOT_PERMADEATH is set.
 */

#define NOT_PERMADEATH

/* define RESURECTION if you want to let players bring other players
 * back to life via some spells.  If RESURRECTION is undefined, then a
 * death is permanent.  NOTE: RESURRECTION (either defined or undefined)
 * has no meaning if NOT_PERMADEATH is defined.  SAVE_PLAYER also needs
 * to be defined for this to have any use
 */
#define RESURRECTION

/*
 * Enables the 'search-item command; a method to find equipment
 * in shops. 
 * This is somewhat useful is FULL_RING_DESCRIPTION is enabled (above.)
 * It matches by substrings of the name of the item as it appears in
 * the look window.  Therefor, if FULL_RING_DESCRIPTION is not enabled,
 * you can never match by ring abilities, as these are then not
 * displayed in the look window.
 * Seems like it now works, and doesn't cause the game to hang.
 */

#define SEARCH_ITEMS

/*
 *  Enables party system.  Note - this has been mostly re-written for
 * version 0.91.2
 */

#define SIMPLE_PARTY_SYSTEM

/*
 * If SECURE is defined, crossfire will not accept enviromental variables
 * as changes to the LIBDIR and other defines pointing to specific
 * directories.  The only time this should really be an issue if you are
 * running crossfire setuid/setgid and someone else could change the
 * values and get special priveledges.  If you are running with normal uid
 * privelidges, then this is not any more/less secure (user could compile
 * there own version pointing wherever they want.)  However, having nonsecure
 * can make debugging or other developement much easier, because you can
 * change the paths without forcing a recompile.
 *
 * NOTE: Prior to 0.93.2, the default was for this to be defined (ie,
 * could not change values on the command line/through environmental
 * variables.)
 */

/* #define SECURE */

/*
 * SERVER:
 * Leave this in if you want the magic server stuff.  eanders@cmu.edu
 * It is now also able to accept new players via socket without
 * the -server switch.
 *
 * LOGFILE specifies which file to log to when playing with the
 * -server option as well.
 *
 * NO_ADD:
 * If you want players to only be able to join the game by using the
 * client, and not by having other players type "'add <display>", then
 * define this.  Note that in the near future, the highscorelist will
 * depend on the username when making sure that one player can only
 * have one entry pr. class, and it's only possible to determine
 * username if they use the client.
 *
 * ONE_PLAYER_PR_UID:
 * A user can only play one player in a single crossfire at any given time.
 * Rumor has it the ONE_PLAYER_PR_UID causes some problems even with multiple
 * user ids.
 *
 * NOTE: AS of now (0.92.8) all the client really is is just a telnet front
 * end (server can not tell the different between a crossclient addition
 * and a person who telneted in.)  As such, both NO_ADD ans ONE_PLAYER_PR_UID
 * only make things slightly more difficult for some people.
 */

#define SERVER

#ifdef SERVER
#define PORT 13326 /* Crossfire => 10000+cfe => 13326 (huh?) CrossFirE :)*/
#endif

#ifndef LOGFILE
#define LOGFILE "/tmp/cross.log"
#endif
/*#define NO_ADD*/
/* #define ONE_PLAYER_PR_UID */

/*
 * DMFILE
 * A file containing valid names that can be dm, one on each line.  See
 * example dm_file for syntax help.
 */

#ifndef DMFILE
#define DMFILE "dm_file"
#endif

/*
 * Where to send error-reports.  If you're hacking at the source, define
 * this as your mail-address.
 */

#ifndef DM_MAIL
/* #define DM_MAIL "mark@pyramid.com" */
#endif

/*
 * If undefined, malloc is always used.
 * It looks like this can be oboleted.  However, it can be useful to
 * track down some bugs, as it will make sure that the entire data structure
 * is set to 0, at the expense of speed.
 * Rupert Goldie has run Purify against the code, and if this is disabled,
 * apparantly there are a lot of uninitialized memory reads - I haven't
 * seen any problem (maybe the memory reads are copies, and the destination
 * doesn't actually use the garbage values either?), but the impact on speed
 * of using this probably isn't great, and should make things more stable.
 * Msw 8-9-97
 */
#define USE_CALLOC

/*
 * If defined, two FLOOR_TYPE items can be put atop each other and
 * will be drawn correctly (i.e. a tower on top of cobblestones) -- only
 * if you use colour pixmaps of course.
 * If undefined, you will only get the topmost floor item drawn.
 * The cost is low in memory and speed and it looks a lot better, so
 * you may want to define it.
 * schmid@fb3-s7.math.tu-berlin.de
 */

#if defined(Xpm_Pix)
#define DOUBLE_FLOOR
#endif


/*
 * SWAP_STATS is fixed now - rgg.
 *
 * Swap stats allows players to swap the values for their stats around
 * in the "Roll again" phase of the character selection.  This should
 * hopefully make character selection quicker, allowing for quicker
 * game start ups. 
 * Bugs:    c.blackwood@rdt.monash.edu.au
 */ 

#define	USE_SWAP_STATS

/*
 *   Cool soda hack to sort rolled stats.
 */

#define SORT_ROLLED_STATS


/*
 * CHRFONT (Character-Font), if defined, enables the player to draw
 * themselves in their own font and include this in the game.
 * It is, as default, disabled, since it slows the game down.
 * Especially when you have a black/white screen, it slows the
 * game down heavily.
 * It also doesn't work with pixmaps (yet)
 */

/* #define	CHRFONT */ /* Not working ++kivinen 05:52 Jan 30 1994 */

/*
 * You can restrict playing in certain times by creating a PERMIT_FILE
 * in LIBDIR. here is a sample:
 * -----
Mon 8-12
Mon 13-16
Tue 8-16
Wed 8-16
Thu 8-16
Fri 8-12
msg
Playing is forbidden during working hours.
 * -----
 * Unfortunately IBMR2 isn't supported by PERM_FILE yet.  I am not sure
 * why this is so - the code doesn't look all that strange.
 */

#ifndef _IBMR2
#define PERM_FILE "forbid"
#endif

/*
 * random() is much better than rand().  If you have random(), use it instead.
 * You shouldn't need to change any of this
 *
 * 0.93.3: It looks like linux has random (previously, it was set below
 * to use rand).  Perhaps old version of linux lack rand?  IF you run into
 * problems, add || defined(linux) the #if immediately below.
 */

#if defined (hpux)
#define RANDOM() rand()
#define SRANDOM(xyz) srand(xyz)
#else
#if defined(SYSV) || defined(SVR4)
#define RANDOM() lrand48()
#define SRANDOM(xyz) srand48(xyz)
#else
#define RANDOM() random()
#define SRANDOM(xyz) srandom(xyz)
#endif
#endif

/*
 * If you feel the game is too fast or too slow, change MAX_TIME.
 * You can experiment with the 'speed <new_max_time> command first.
 * The length of a tick is MAX_TIME microseconds.  During a tick,
 * players, monsters, or items with speed 1 can do one thing.
 */

#define MAX_TIME	120000	/* How slow the game will go */

/*
 * MAP_MAXTIMEOUT tells the maximum of ticks until a map is swapped out
 * after a player has left it.  If it is set to 0, maps are
 * swapped out the instant the last player leaves it.
 * If you are low on memory, you should set this to 0.
 * Note that depending on the map timeout variable, the number of
 * objects can get quite high.  This is because depending on the maps,
 * a player could be having the objects of several maps in memory
 * (the map he is in right now, and the ones he left recently.)
 * Each map has it's own TIMEOUT value and value field and it is
 * defaulted to 300
 */

#define MAP_MAXTIMEOUT	1000	/* How many ticks till maps are swapped out */

/*
 * MAP_RESET tells whether map is reset after some time.  If it is defined,
 * the game uses weight variable of map object to tell, after how many seconds
 * the map will be reset.  If MAP_RESET is undefined, maps will never reset.
 *
 * MAP_MAXRESET is the maximum time a map can have before being reset.  It
 * will override the time value set in the map, if that time is longer than
 * MAP_MAXRESET.  This value is in seconds.  If you are low on space on the
 * TMPDIR device, set this value to somethign small.  The default
 * value in the map object is 7200 (2 hours)
 * I personally like 1 hour myself, for solo play.  It is long enough that
 * maps won't be resetting as a solve a quest, but short enough that some
 * maps (like shops and inns) will be reset during the time I play.
 * Comment out MAP_MAXRESET time if you always want to use the value
 * in the map archetype.
 */

#define MAP_RESET
#define MAP_MAXRESET	7200

/*
 * MAX_OBJECTS is no hard limit.  If this limit is exceeded, crossfire
 * will look for maps which are already scheldued for swapping, and
 * promptly swap them out before new maps are being loaded.
 * If playing only by yourself, this number can probably be as low as
 * 3000.  If in server mode, probably figure about 1000-2000 objects per
 * active player (if they typically play on different maps), for some guess
 * on how many to define.  If it is too low, maps just get swapped out
 * immediately, causing a performance hit.  If it is too high, the program
 * consumes more memory.  If you have gobs of free memory, a high number
 * might not be a bad idea.  Each object is around 300 bytes right now.
 */

#define MAX_OBJECTS	6000

/*
 * You must change LIBDIR to where you want your maps, highscore and
 * archetype file to be.  It's enough to change it in the Imakefile though.
 * The other files will be put in LIBDIR/MAPDIR, LIBDIR/PLAYERDIR, etc.
 * Remember to create the directory and move the needed files there.
 * Note: By default, what is set in config/crosssite.def (as CTop/lib)
 * will be used instead of the value below.  If you want to force the value
 * below to be used, uncomment the #undef line.
 */

/* #undef LIBDIR */
#ifndef LIBDIR
#define LIBDIR "/home/a/tars/lib"
#endif

/*
 * If you want the players to be able to save their characters between
 * games, define SAVE_PLAYER and set PLAYERDIR to the directories
 * where the player-files will be put.
 * Remember to create the directory (make install might do that though).
 * (In the future it should be possible by a define to say that save-files
 * should be kept in each players' directory, though this isn't completely
 * in the spirit of the game (it's multiplayer))
 * If SAVE_HOMEDIR is defined, the players will be saved in the homedir
 * of the _invoking_ player instead of in LIBDIR/PLAYERDIR.
 * If LOCK_PLAYER is defined, a player will be unable to enter more
 * than one game of crossfire at the same time (stops some possible cheating).
 * If you intend to run a central server, and not allow the players to
 * start their own crossfire, you won't need to define this.
 * If USE_CHECKSUM is defined, a checksum will be calculated each time
 * a player saves a character.
 * If ENABLE_CHECKSUM is defined, the players will get the cheat-flag set
 * if the checksums don't match.  If your player-files don't have checksums,
 * you'll want to leave "USE_CHECKSUM" defined for a while so they all
 * get checksums, and then define "ENABLE_CHECKSUM" to utilize this.
 */

/* CF 0.91.6 - SAVE_PLAYER now standard part of game */
/*#define SAVE_PLAYER*/

/* #define SAVE_HOMEDIR */
/* #define LOCK_PLAYER */
#define USE_CHECKSUM
/* #define ENABLE_CHECKSUM */ /* Will be default in distant future versions */

#ifndef PLAYERDIR
#define PLAYERDIR "players"
#endif

/*
 * If you have defined SAVE_PLAYER, you might want to change this, too.
 * This is the access rights for the players savefiles.
 * I think it is usefull to restrict access to the savefiles for the
 * game admin. So if you make crossfire set-uid, use 0600.
 * If you are running the game set-gid (to a games-group, for instance),
 * you must remember to make it writeable for the group (ie 0660).
 * Kjetil W. J{\o}rgensen, jorgens@pvv.unit.no
 * (Note: something should probably be done with lock-file permission)
 */
#define	SAVE_MODE	0660

/*
 * If you want use banks and inns where players can store their items
 * between games, you should define UNIQUE_ITEMS. Those objects are saved
 * to ITEMS_DIR. This flag allows also the real artifacts (i.e. one item in
 * the whole game). The graveyards also works better if this is defined.
 * If anyone can start their own server, you should also define LOCK_ITEMS
 * to avoid loosing the items and other conflicts.  [Tero.Haatanen@lut.fi]
 */

#define UNIQUE_ITEMS
#ifdef UNIQUE_ITEMS
#define ITEMS_DIR "unique-items"
#define LOCK_ITEMS
#endif

/*
 * Allow players to save their window postions with the 'X' command.
 * This only works in split window mode. If you have trouble with your
 * window manager when restoring saved positions (the windows shift
 * around slightly) try:
 * #define FUNNY_WINDOW_MANAGER
 * This bug seems to happen when using tvtwm (this has been tested to
 * work correctly on olvwm and mwm).
 */

#define SAVE_WINDOW_POSITIONS

/* NOTE ON SAVE_INTERVAL and AUTOSAVE:  Only one of these two really
 * needs to be selected.  You can set both, and things will work fine,
 * however, it just means that a lot more saving will be done, which
 * can slow things down some.
 */

/* How often (in seconds) the player is saved if he drops things.  If it is
 * set to 0, the player will be saved for every item he drops.  Otherwise,
 * if the player drops and item, and the last time he was saved
 * due to item drop is longer
 * the SAVE_INTERVAL seconds, he is then saved.  Depending on your playing
 * environment, you may want to set this to a higher value, so that
 * you are not spending too much time saving the characters.
 * This option should now work (Crossfire 0.90.5)
 */

/*#define SAVE_INTERVAL 300*/

/*
 * AUTOSAVE saves the player every AUTOSAVE ticks.  A value of
 * 5000 with MAX_TIME set at 120,000 means that the player will be
 * saved every 10 minutes.  Some effort should probably be made to
 * spread out these saves, but that might be more effort than it is
 * worth (Depending on the spacing, if enough players log on, the spacing
 * may not be large enough to save all of them.)  As it is now, it will
 * just set the base tick of when they log on, which should keep the
 * saves pretty well spread out (in a fairly random fashion.)
 */

#define AUTOSAVE 5000

/* Often, emergency save fails because the memory corruption that caused
 * the crash has trashed the characters too. Define NO_EMERGENCY_SAVE
 * to disable emergency saves.  This actually does
 * prevent emergency saves now (Version 0.90.5).
 */

#define NO_EMERGENCY_SAVE

/* By selecting the following, whenever a player does a backup save (with
 * the 'save command), the player will be saved at home (EMERGENCY_MAP_*
 * information that is specified later).  IF this is not set, the player
 * will be saved at his present location.
 */

/*#define BACKUP_SAVE_AT_HOME*/

/*
 * Define the following if you wish to allow players to set their title
 * and to save it on the disk (if SAVE_PLAYER is defined).
 */

#define SET_TITLE


/*
 * The following is only interesting if you run crossfire seteuid-flagged.
 * XOpenDisplay may want to read the .Xauthority file of the person who
 * runs the program. This can only be allowed if the system allows free
 * changing of the uid back and forth between invocation time uid
 * and the setuid uid. Otherwise we can't change euid back to suid after
 * setting it to invoking uid to read the xauth file. So far, only
 * POSIX-compatible systems and System-V derivates allow a process to
 * reset to a previous uid.
 * If this flag is left undefined, crossfire will not set uid back to
 * that of the invoking process while opening the first display connection.
 * In this case, you'll have to do xhost +machine before running crossfire,
 * 'machine' being the machine you run the program on.
 *    //magnuz@cd.chalmers.se
 */
/* #define HAVE_SAVE_UID */
#if (defined(hpux) || defined(sysv)) && !defined(HAVE_SAVE_UID)
#  define HAVE_SAVE_UID
#endif

/*
 * If you want to have a Message Of The Day file, define MOTD to be
 * the file with the message.  If the file doesn't exist or if it
 * is empty, no message will be displayed.
 * (It resides in the LIBDIR directory)
 */

#ifndef MOTD
#define MOTD "motd"
#endif

/*
 * If you want to take the game down while installing new versions, or
 * for other reasons, put a message into the SHUTDOWN_FILE file.
 * Remember to delete it when you open the game again.
 * (It resides in the LIBDIR directory)
 */

#ifndef SHUTDOWN_FILE
#define SHUTDOWN_FILE "shutdown"
#endif

/*
 * Your tmp-directory should be large enough to hold the uncompressed
 * map-files for all who are playing.
 * It ought to be locally mounted, since the function used to generate
 * unique temporary filenames isn't guaranteed to work over NFS or AFS
 * On the other hand, if you know that only one crossfire server will be
 * running using this temporary directory, it is likely to be safe to use
 * something that is NFS mounted (but performance may suffer as NFS is
 * slower than local disk)
 */

/*#define TMPDIR "/home/hugin/a/crossfire/crossfire/tmp"*/
#define TMPDIR "/tmp"

/*
 * This doesn't work yet, leave NO_LOG commented away.
 * If you want to save ram, and want absolutely _no_ output from the
 * game, even if something went very wrong, you can define NO_LOG.
 * If your system doesn't understand ANSI-C var-args, you can try
 * to define this to make it compile.
 */

/* #define NO_LOG */

/*
 * If you want to regenerate the spoiler.ps file, you have to recompile
 * the game with DUMP_SWITCHES defined.  If defined, it turns on the
 * -m -m2 -m3 -m4 switches.  There is probably no reason not to define
 * this
 */

#define DUMP_SWITCHES

/*
 * If you compress your files to save space, please define at least uncompress
 * If you change to some compression program not using ".Z" or ".gz", please
 * define COMPRESS_SUFFIX.  Note though that ".Z" and ".gz" is checked anyway.
 * The program has support built in to handle gzip and compress
 * files, however, the gzip, gunzip, compress and uncompress programs all
 * need to be in the PATH environmental variable for this to work.
 * COMPRESS is the program name to compress the file, UNCOMPRESS to
 * uncompress the file.  if COMPRESS_SUFFIX is not defined, COMPRESS
 * and UNCOMPRESS have no meaning.
 */

#ifndef COMPRESS_SUFFIX
/* #define COMPRESS_SUFFIX ".Z" */
#endif

/* #define COMPRESS <whatever> */
/* #define UNCOMPRESS <whatever> */

#ifndef COMPRESS
#  if defined (linux) || defined(SVR4)
#    define COMPRESS	"/usr/bin/compress"
#  else
#    if defined(sgi)
#      define COMPRESS	"/usr/bsd/compress"
#    else
#      if defined(ultrix) || defined(BSD) || defined(_BSD)
#        define COMPRESS	"/usr/ucb/compress"
#      else
#        define COMPRESS	"/local/bin/compress"
#      endif
#    endif
#  endif
#endif
#ifndef UNCOMPRESS
#  if defined (linux) || defined(SVR4)
#    define UNCOMPRESS	"/usr/bin/uncompress"
#  else
#    if defined(sgi)
#      define UNCOMPRESS	"/usr/bsd/uncompress"
#    else
#      if defined(ultrix) || defined(BSD) || defined(_BSD)
#        define UNCOMPRESS	"/usr/ucb/uncompress"
#      else
#        define UNCOMPRESS	"/local/bin/uncompress"
#      endif
#    endif
#  endif
#endif

/*
 * These define the players starting map and location on that map, and where
 * emergency saves are defined.  This should be left as is unless you make
 * major changes to the map.
 */

#define EMERGENCY_MAPPATH "/city/city"
#define EMERGENCY_X 15
#define EMERGENCY_Y 19

/*
 *  It shouldn't be neccessary to change the following constants, but you
 *  are free at have a look at them 8)
 */

/*
 * These defines tells where, relative to LIBDIR, the maps, the map-index,
 * archetypes highscore and treaures files and directories can be found.
 */

#define MAPDIR		"maps"
#define ARCHETYPES	"archetypes"
#define HIGHSCORE	"highscore"
#define TREASURES	"treasures"

#ifdef SOUND_EFFECTS
#  define SOUNDS_LIST	"sounds"
#endif

#define DEBUG_TIME		/* Enable the 'time command, and it's logs */
#define MAX_ERRORS	25	/* Bail out if more are received during tick */
#define STARTMAX        500     /* How big array of objects to start with */
#define OBJ_EXPAND      100     /* How big steps to use when expanding array */

#define HIGHSCORE_LENGTH 10	/* How many entries there are room for */

#define ARCHTABLE 2459		/* Used when hashing archetypes */
#define MAXSTRING 20

#define COMMAND_HASH_SIZE 107	/* If you change this, delete all characters :) */

/* DEBUG generates copious amounts of output.  I tend to change the CC options
 * in the crosssite.def file if I want this.  By default, you probably
 * dont want this defined.
 */

#ifndef DEBUG
/* #define DEBUG */
#endif


/*
 * This option creates more core files.  In some areas, there are certain
 * checks done to try and make the program more stable (ie, check
 * parameter for null, return if it is).  These checks are being done
 * for things that should not happen (ie, being supplied a null parameter).
 * What MANY_CORES does, is if one of these checks is true, it will
 * dump core at that time, allowing for fairly easy tracking down of the
 * problem.  Better to fix problems than create thousands of checks.
 */
#define MANY_CORES

/* To make loading of the XPM files more efficient, a monstage
 * of them is created.  This way, only a few XCreatePixmap...
 * calls need to be made instead of 2000+.  The values below
 * indicate the number of pixmaps wide and high the montage
 * should be.  Very large numbers have the disadvantage of
 * not being especially efficient on space, and also require more
 * server memory.  The server memory could be a problem for
 * X Terminals.  If you change these values, you will need to rebuild
 * and reinstall the lib/crossfire.pix files.
 */

#define XPM_MONTAGE_X 25
#define XPM_MONTAGE_Y 20

/*  SPELLPOINT_LEVEL_DEPEND  --  Causes the spellpoint cost
 *  of spells to vary with their power.  Spells that become very
 *  powerful at high level cost more.  The damage/time of
 *  characters increases though.
 */

#define SPELLPOINT_LEVEL_DEPEND


/* SPELL_ENCUMBRANCE -- If you're carrying a weapon or wearing heavy armour,
  you have a chance of fumbling your spellcasting with this on.  Formula is:
  encumbrance = 3*weapon_weight + armour_weight

  failure if roll from 1-200 is less than encumbrance + sp->level -
  op->level - 35
*/

#define SPELL_ENCUMBRANCE

/* SPELL_FAILURE_EFFECTS only has meaing if SPELL_ENCUMBRANCE is defined.
 * What it does, is that when the player fails a spell, various effects
 * will happen (player is paralyzed, confused, wonder spell is cast, etc.)
 * I disabled it because I think it would make life much too hazardous
 * for low level casters.  They either need to wear light armor (which
 * means that they will get pounded on by monsters), or will get
 * confused/paralyzed/other effects often.  High level casters would
 * be mostly unaffected, since they would be casting spells that are
 * below their level.
 */

/* #define SPELL_FAILURE_EFFECTS */

/* CHECK_ACTIVE_MAPS is in certain functions to determine how often
 * the process_active maps function should be called.  In general, a simple
 * count variable is used (ie, every CHECK_ACTIVE_MAPS objects loaded/saved
 * or pixmaps built, call the function.  The process_maps function will
 * return without doing any processing if not enough time has elapsed.
 * In general, a too low value for CHECK_ACTIVE_MAPS will cause some
 * loss in performance, a too high value will mean that the function is
 * not called enough, causing uneven movement.
 * If CHECK_ACTIVE_MAPS is 0, then the function is never called.
 * Also see PROCESS_WHILE_LOADING below.
 */

#define CHECK_ACTIVE_MAPS 25

/* This option will cause process_maps to be called while maps are
 * being loaded and saved.  This has the advantage that other
 * players (the one that did not enter a new map) can do whatever they
 * want while the map is loading, and are not frozen.  Same is true
 * when a map is being frozen.
 *
 * If you are on a sufficiently fast machine, the map loading and
 * saving time may be small enough, that the players don't notice
 * anything, so setting this might not be desirable.
 *
 * Also, there used to be bugs associated with this - players entering maps
 * to find that all the exits are closed, appearing the middle the
 * ocean as the exit a map, etc.  Hopefully, I have fixed those bugs,
 * but it is difficult to be sure.  If you set this, and find those
 * things happening, turn this option off, and please let me know.
 *
 * Apparantly, there are still some bugs associated with this option, so
 * it is better to leave commented out.
 *
 * Mark Wedel (mark@pyramid.com)
 */
/*#define PROCESS_WHILE_LOADING*/
