/* config.h */

#ifndef __CONFIG_H
#define __CONFIG_H

#include "copyright.h"
#include "version.h"

/* *********** READ THIS BEFORE YOU MODIFY ANYTHING IN THIS FILE *********** */
/* WARNING:  All options in this file have the ability to signifigantly change
 * the look and feel and sometimes even internal behavior of the program.
 * The ones shipped as the default have been extensively tested.  Others have
 * been tested to a (usually) lesser degree, and therefore might still have
 * latent bugs.  If you change any of them from the default, PLEASE check
 * to make sure that you know the full effects of what you are changing. And
 * if you encounter any errors or compile time problems with any options
 * other than the default settings, PLEASE inform jt1o@andrew.cmu.edu
 * immediately, so that they can be fixed.  The same goes for any other bug
 * you might find in using this software.  All efforts will be made to fix
 * errors encountered, but unless given a FULL description of the error,
 * (IE telling me that logging in doesn't work is insufficient.  telling
 * me that logging in with WCREAT undefined still gives you the registration
 * message is a lot better.  MOST effective would be a full dbx trace, or a
 * patch for the bug.)  Enjoy using the program.
 */
/* ************************************************************************* */

/* Uncomment this of on a Xenix System.  */
/* #define XENIX */

/* Uncomment this if on a Xenix system with Xsockets. */
/* #define XSOCKET */

/* Uncomment this if you want to use the Virus (Robert Hood) Concentrator
 * package.  A must if you want to have more than fifty-odd (depending
 * on your system) users at once.
 */
/* #define CONCENTRATOR */

/* Uncomment this if you want the machine to return a name instead of an
 * IP number.  The code without this defined looks screwy, so I would leave
 * it defined unless you feel like fixing it.
 */
#define HOST_NAME

/* Define this if you want the ability to lock out certain sites.  This code
 * now works.  Coming soon: more reasonable matching abilities, and
 * wildcards.
 */
#define LOCKOUT

/* Define this if you are running 24 hours a day and wish to autorestart */
/* #define AUTORESTART */

/* Define this if you want to run with registration.  Undefining this lets
 * anyone create characters.
 */
/* #define WCREAT */

/* Define this if you want an "official" guest character. A guest character
 * may not change his name or password, and may not build. You may wish to
 * describe and @atrlock the guest. You will probably want this option if
 * you use WCREAT.
 */
/* #define GUEST_RESTRICT */

/* This should only be defined if your machine does not have toupper and
 * memcpy already defined.
 */
/* #define BRAIN_DAMAGE */

/* Define this if you wish to allow objects to be recycled. */
#define DESTROY

/* One method of slowing bloat.  This method requires all builders to have
 * a builder bit to build.
 */
/* #define RESTRICTED_BUILDING */

/* Defining this adds a simple tracking allocator of allocs and frees that
 * keeps ref counts of what sort of memory is allocated, and how many.
 * Good for testing for Memory leaks.
 */
/* #define MEM_CHECK */

/* An alternate method of slowing bloat.  This allows builders only X objects
 * period.  Wizards can check and set quotas on players.  If used in
 * conjunction with RESTRICTED_BUILDING, expect VERY slow growth.
 */
/* #define QUOTA */

/* Define the following if you want the database stored in compressed format
 * via the compress system command.  If this is enabled PANIC saves will NOT
 * be compressed, so you will need to compress them before restarting if they
 * are good saves.
 */
#define DBCOMP

/* Defining the following will log ALL commands typed by every user.  Good
 * catching what command the game coredumps on.
 */
/* #define LOG_COMMANDS */

/* Defining the following produces a log of all commands that produce a Huh?
 * message for a player.
 */
/* #define LOG_FAILED_COMMANDS */

/* Define the following if you are running on a machine so small that you
 * cannnot fork a process off to do the save.
 */
/* #define NO_FORK */

#ifndef NO_FORK
/* Define this if you wish to use vfork() instead of fork() */
/* #define USE_VFORK */
#endif

/* Defining the following will show an expanded flag name list when you 
 * examine an object
 */
#define FLAGS_ON_EXAMINE

/* Defining this will cause passwords to be stored as straight text rather
 * that encrypted via the unix crypt() command.
 */
/* #define NOCRYPT */

/* Boolexp_debugging should only be defined if you are testing new boolexp
 * locks, etc.  otherwise, leave it undefined.
 */
/* #define BOOLEXP_DEBUGGING */

/* Define the following if you wish to allow object building.  Only useful
 * if RESTRICTED_BUILDING is defined.
 */
/* #define FREE_OBJECTS */

/* Define the following for increased wizard invisibility.  If it's enabled,
 * says and poses by DARK wizards will show up as 'Someone ....'
 * pages are not affected.
 */
#define FULL_INVIS

/* Define the following if you wish to have a TinyTIM like @doing command.
 */
#define AT_DOING

/*
 * Define the following to enable the ROYALTY flag.  Players with
 * this flag set have limited wiz powers: ie, they can look, examine,
 * and @tel like wizards, but may not change things like wizards.
 */
#define ROYALTY_FLAG

/* Define the following to enable @whereis commands, and loc() on players
 * by other players.  Both of these commands are modified by the effect
 * of the PLAYER_DARK flag.
 */
#define PLAYER_LOCATE

/* Comment this out if you don't wish to use the built-in mail system. 
 * The @mail command provides a flexible hardcoded mail system, which
 * uses its own database to store messages. This system is the work of
 * Joarm of Spellbound MUSH (Justin McKinnerney)
 */
#define USE_MAILER

/* Define the following if you wish to enable global exits and commands.
 * Exits in the Master Room are considered global, as are user-defined
 * $commands on objects in the Master Room.
  */
#define DO_GLOBALS

/* Define the following if you need to modify the database to use
 * zones. You must do this the first time you convert an existing
 * database.
 */
#define ADD_ZONES

/* Comment this out if you wish to run without the INHERIT flag. This
 * flag prevents objects without it from @forcing, @setting, or
 * @triggering objects with the flag, or with a wizbit. This makes doing
 * secure objects much easier. However, it can make programming certain
 * objects somewhat clumsy, and may cause some initial confusion and
 * frustration when first used on a MUSH not used to it.
 */
#define INHERIT_FLAG

/* Define the following if you are converting an older database to this
 * version of code. This modifies the database for page and enter locks.
 * Compile and start the game with this option the first time, then do an
 * immediate @shutdown, recompile with this undefined, and restart. If
 * Warning: if you do not remember to recompile, any enter or page locks
 * will be lost.
 */
/* #define ADD_LOCKS */

/* Define the following if you want an inactivity timeout - the game
 * will automatically boot players who idle too long.
 */
/* #define IDLE_TIMEOUT */

#ifdef USE_SMALLOC
/* Define the following ONLY if using SMALLOC.C, and if you want accurate
 * malloc stats.
 */
/* #define SLOW_STATISTICS */
#endif /* USE_SMALLOC */

/* Define the following to get extra debug info into the log file */
/* #define DEBUG */

#ifdef CONCENTRATOR
/* 
 * Define the following if you want consistancy checking while using
 * the Virus concentrator code.
 */
#define CHECKC
#endif

/* default files */
#define  DEF_DB_IN	"indb.Z"	/* default startup database */
#define  DEF_DB_OUT	"outdb.Z"	/* default dump database */
#define  HELPTEXT	"helptext"	/* help text file */
#define  HELPINDX	"helpindx"	/* help index file */

#define NEW_CONNECT_MSG_FILE  "create.txt"
#define CONNECT_MSG_FILE      "connect.txt"
#define WELCOME_MSG_FILE      "welcome.txt"
#define WIZARD_MSG_FILE       "wizard.txt"
#define REGISTER_MSG_FILE     "register.txt"
#define LEAVE_MSG_FILE        "leave.txt"
#define DISABLE_MSG_FILE      "disable.txt"

#define HELP_FILE "help.txt"

#define NEWS_FILE "news.txt"
#define NEWSINDX   "newsindx"


#ifdef LOCKOUT
#define LOCKOUT_FILE "lockout.txt"
#endif                          /* LOCKOUT */

/* name of the monetary unit */
#define MONEY "Penny"
#define MONIES "Pennies"

/* room number of player start location */
#define PLAYER_START ((dbref) 0)

/* Uber-wizard */
#define GOD ((dbref) 1)
#define God(x) ((x) == GOD)

/* Guest character */
#ifdef GUEST_RESTRICT
/* you'll almost definitely want to change this */
#define GUEST_PLAYER ((dbref) 3)
#define Guest(x) ((x) == GUEST_PLAYER)
#endif

/* Master room for global exits and commands */
#ifdef DO_GLOBALS
/* probably want to change this later */
#define MASTER_ROOM ((dbref) 2)
#endif

/* Inactivity timeout limit - boots players after certain amount of idling */
/* This must be an integer value, in minutes */
#ifdef IDLE_TIMEOUT
#define INACTIVITY_LIMIT 60
#endif

/* minimum cost to create various things */
#define OBJECT_COST 10
#define EXIT_COST 1
#define LINK_COST 1
#define ROOM_COST 10
#define QUEUE_COST 10		/* deposit on commands in the queue */
#define QUOTA_COST 1		/* quota cost of building an object */

/* cost for various special commands */
#define FIND_COST 100
#define PAGE_COST 0

/* costs of kill command */
#define KILL_BASE_COST 100      /* prob = expenditure/KILL_BASE_COST */
#define KILL_MIN_COST 10
#define KILL_BONUS 50           /* paid to victim */
#define MAX_ARG 100             /* maximum comma's arguments to function
				 * (like @switch) */

#define QUEUE_LOSS 63		/* one command in 16 will cost one penny */
                                /* must be a power of two minus 1 */

#define QUEUE_QUOTA 100		/* number of pending commands per player */
                                /* used to prevent robots from getting out */
                                /* of hand */

#define START_BONUS 100		/* starting salary for new players */
#define PAY_CHECK 50		/* daily income for active players */

#ifdef QUOTA
#define START_QUOTA "20"	/* starting building quota for new players */
#endif /* QUOTA */

/* limit on player name length */
#define PLAYER_NAME_LIMIT 16

/* magic cookies */
#define NOT_TOKEN '!'
#define AND_TOKEN '&'
#define OR_TOKEN '|'
#define LOOKUP_TOKEN '*'
#define NUMBER_TOKEN '#'
#define AT_TOKEN '@'
#define IN_TOKEN '+'
#define IS_TOKEN '='
#define ARG_DELIMITER '='

/* magic command cookies */
#define SAY_TOKEN '"'
#define POSE_TOKEN ':'
#define SEMI_POSE_TOKEN ';'

/* delimiter for lists of exit aliases */
#define EXIT_DELIMITER ';'

/* amount of object endowment, based on cost */
#define MAX_OBJECT_ENDOWMENT 100
/* max value a wiz can put on an object */
#define MAX_WIZ_OBJECT_ENDOWMENT 2000

#define OBJECT_ENDOWMENT(cost) (((cost)-5)/5)

/* !!! added for recycling, return value of object */
#ifdef DESTROY
#define OBJECT_DEPOSIT(pennies) ((pennies)*5+5)
#endif /* DESTROY */

/* amount at which temple stops being so profitable */
#define MAX_PENNIES 100000

/* How deep can indirect locks go? */
#define MAX_DEPTH 10

#ifndef TINYPORT
#define TINYPORT 4201
#endif

#ifdef CONCENTRATOR
/* port used if the virus concentrator is installed */
#define INTERNAL_PORT 7372
#endif /* CONCENTRATOR */

#define QUIT_COMMAND "QUIT"
#define WHO_COMMAND "WHO"

#ifdef AT_DOING
#define DOING_COMMAND "DOING"
#endif

#ifdef RWHO_SEND
#ifdef FULL_RWHO
#define RWHO_COMMAND "RWHO"
#endif 
#endif

#define PREFIX_COMMAND "OUTPUTPREFIX"
#define SUFFIX_COMMAND "OUTPUTSUFFIX"

#ifdef RWHO_SEND
#define RWHOSERV "milo.mit.edu"
/* See the README file for info on this */
#define RWHOPORT 6889			/* this should NEVER be changed */
#define RWHOPASS "get_yours"		/* This SHOULD be changed!! */
#endif

/* timer.c defines */
/* Note: Don't make times multiples of each other */
/* otherwise players will have to wait a long time when */
/* two or more events coincide */
/* time is in seconds */
#define FIXUP_INTERVAL 600	/* fixup free list every 10 minutes */
#define DUMP_INTERVAL 10801	/* dump every 3 hours*/

#ifdef RWHO_SEND
#define RWHO_INTERVAL 241	/* update RWHO ever 4 minutes */
#endif

#define GARBAGE_CHUNK 3		/* recopy 3 objetcs/sec */

/* interface.c stuff */
#ifdef XENIX
#define MAX_INPUT 4096		/* only used in xenix.c */
#endif
#define MAX_OUTPUT 16384
#define COMMAND_TIME_MSEC 1000	/* time slice length in milliseconds */
#define COMMAND_BURST_SIZE 100	/* commands allowed per user in a burst */
#define COMMANDS_PER_TIME 1	/* commands per time slice after burst */

/* If this is a xenix system redefine srandom and random */
#ifdef XENIX
#define random rand
#define srandom srand
#endif

#ifdef i386			/* if SYSV */
#define srand srandom
#define rand random
#endif

#ifdef BRAIN_DAMAGE		/* a kludge to get it to work on a mutant
				 * DENIX system */
#undef toupper
#endif

#endif /* __CONFIG_H */