dawn/notes/
dawn/src/
dawn/src/docs/
/**************************************************************************/
// gameset.h - see below
/***************************************************************************
 * The Dawn of Time v1.69r (c)1997-2004 Michael Garratt                    *
 * >> A number of people have contributed to the Dawn codebase, with the   *
 *    majority of code written by Michael Garratt - www.dawnoftime.org     *
 * >> To use this source code, you must fully comply with the dawn license *
 *    in licenses.txt... In particular, you may not remove this copyright  *
 *    notice.                                                              *
 **************************************************************************/
/***************************************************************************
 *  FILE: gameset.h - game settings system
 *  - All things are contained in here to make the code compile quicker.
 ***************************************************************************/
#ifndef GAMESET_H
#define GAMESET_H

extern const struct flag_type  game_settings_flags[];
extern const struct flag_type game_settings_flags2[];
extern const struct flag_type game_settings_flags3[];
extern const struct flag_type game_settings_flags4[];

enum gameset_value_cat{GSVC_GENERAL, GSVC_ROOM, GSVC_OBJECT, GSVC_MOB, GSVC_NONE};
/**************************************************************************/
struct gameset_value_type{
	gameset_value_cat category;
	int offset;	
	char *name;
	char *description;
};
#define GSBYTE_OFFSET(field) (int)(((char*) &(tgs.field)) \
		-((char*) &tgs)) 

#define GSINT( offset) *((int*)(((char*) game_settings)+(offset))) 

/**************************************************************************/
enum area_import_format_enum {AIF_STOCK, AIF_FORMAT2, AIF_FORMAT3 };

/**************************************************************************/
// game settings checking macros
#define GAMESETTING(flag)  (IS_SET(game_settings->flags, flag))
#define GAMESETTING2(flag) (IS_SET(game_settings->flags2, flag))
#define GAMESETTING3(flag) (IS_SET(game_settings->flags3, flag))
#define GAMESETTING4(flag) (IS_SET(game_settings->flags4, flag))
#define GAMESETTING5(flag) (IS_SET(game_settings->flags5, flag))

#define GAMESETTINGS_FILE   "gameset.txt"   // Settings for the game
#define AREA_IMPORT_FORMAT(value)  (game_settings->area_import_format==value)
#define AREA_IMPORT_FLAG(flag)  (IS_SET(game_settings->area_import_flags, flag))
/**************************************************************************/
struct game_settings_type{
	char	*gamename;
	char	*irclogs_dir;	
	char	*msp_url;
	char	*style_sheet;
	char	*login_prompt;	
	char	*default_prompt;
	char	*password_creation;
	char	*password_player_connect;
	char	*listen_on;	
	char	*default_who_format;		// text version used to load/save
	char	*realm_name;
	char	*mud_default_battlelag_text;

	// config section - 
	int		config_create_coredump_at_end_of_nasty_signal_handler;

	int		default_who_format_index;	// index value used within the game
	int		unique_id;

	char	*help_header_bar;	// bar shown as help header 
	char	*help_footer_bar;	// bar shown as help footer
	char	*help_prevnext_footer_bar;	// bar shown as help footer after a [PREV][NEXT]
	
	char	*no_resolve_ip_text;// ip address to not bother looking up because

	area_import_format_enum area_import_format; // semi generically support importing 
												// different formatted areas
	long	area_import_flags;
	unsigned int max_string;
	long	flags;
	long	flags2;
	long	flags3;
	long	flags4;
	long	flags5;

	int		roll_min_total; // >=0, <=500
	int		roll_max_total; // <=600, <=1000

	int		alarm_boot_db_abort_threshold;
	int		alarm_running_abort_threshold;
	int		alarm_running_dns_abort_threshold;
	int		alarm_frequency;

	int		default_newbie_security_on_olc_port;
	int		damage_scale_value; // in the range 4000 to 150, dawn is 2625

	int		automatic_offlineletgain_after_x_days;
	
	int		icyear_offset; 
	int		min_level_to_load_objects;
	int		max_hp_from_heal_spell;
	// vnum stuff
	int		roomvnum_newbie_recall; // default recall vnum for levels 1 to 5

	int		roomvnum_starttelnet;
	int		roomvnum_startirc;
	int		roomvnum_limbo;
	int		roomvnum_court_recall;
	int		roomvnum_ooc;
	int		roomvnum_good_recall;
	int		roomvnum_evil_recall;
	int		roomvnum_pkport_death_room;
	int		roomvnum_weapon_donate;
	int		roomvnum_armor_donate;
	int		roomvnum_misc_donate;
	int		roomvnum_newbieweapon_donate;
	int		roomvnum_newbiearmor_donate;
	int		roomvnum_newbiemisc_donate;

	int		roomvnum_jail;
	int		roomvnum_morgue;		// silly idea for some but requested by another mud

	int		global_scale_hitpoints_regen_rate;
	int		global_scale_mana_regen_rate;
	int		global_scale_movement_regen_rate;

 	int		newbie_start_gold;
	int		newbie_start_silver;
	int		newbie_start_practice;
	int		newbie_start_train;

	int		global_xp_scale_value; // used for globally scaling the amount of xp rewarded
	int		minimum_note_notify_level;
 
	// auras around objects - used by format_obj_to_char()
	char	*aura_invis;
	char	*aura_evil;
	char	*aura_good;
	char	*aura_magical;
	char	*aura_glowing;
	char	*aura_chaos;
	char	*aura_hum;
	char	*aura_buried;
	char	*aura_holy;
	char	*aura_unholy;
	char	*aura_flaming;
	char	*aura_vampric;
	char	*aura_shocking;
	char	*aura_frost;

	// automated removal of laston players
	int		laston_remove_deleted_players_0_4;
	int		laston_remove_deleted_players_5_34;
	int		laston_remove_deleted_players_35_64;
	int		laston_remove_deleted_players_65_91;
	int		laston_remove_deleted_players_92;
	int		laston_level_for_immortal_version;

	int		olc_max_vnum; // maximum possible vnum (65000 by default)
	int		max_level_before_letgaining;
	int		max_rerolls;
	int		max_mob_level; // maximum possible mob level
	int		max_obj_level; // maximum possible object level
	int		xp_loss_for_fleeing;

	int		obj_vnum_world_map;
	int		obj_vnum_good_city_map;
	int		obj_vnum_evil_city_map;
	int		obj_vnum_divine_light;
	int		obj_vnum_rose;
	int		obj_vnum_raft;
	int		obj_vnum_newbie_guide;
	int		obj_vnum_rp_item;
	int		obj_vnum_spirit_hammer;
	int		obj_vnum_staff;
	int		obj_vnum_druidstaff;
	int		obj_vnum_totemstaff;
	int		obj_vnum_pit;
	int		obj_vnum_summon_justice;

	int		obj_vnum_outfit_mace;
	int		obj_vnum_outfit_dagger;
	int		obj_vnum_outfit_sword;
	int		obj_vnum_outfit_staff;
	int		obj_vnum_outfit_axe;
	int		obj_vnum_outfit_flail;
	int		obj_vnum_outfit_whip;
	int		obj_vnum_outfit_polearm;
	int		obj_vnum_outfit_sickle;
	int		obj_vnum_outfit_shield;
	int		obj_vnum_outfit_vest;
	int		obj_vnum_outfit_light;
	int		obj_vnum_outfit_sleeves;
	int		obj_vnum_outfit_cap;
	int		obj_vnum_outfit_gloves;
	int		obj_vnum_outfit_leggings;
	int		obj_vnum_outfit_boots;
	int		obj_vnum_outfit_belt;

	int		mob_vnum_summon_guardian;
	int		mob_vnum_vyr_good;
	int		mob_vnum_vyr_bad;

	int		days_lockers_stored_for;
	int		webserver_default_remort;	

	// Note: The port_default value defaults to 4000 but can be over ridden
	// at bootup, e.g. 'dawn 9000' starts the mud with mud_port set to 9000.
	// ADDITIONAL PORT VALUES
	// The following port numbers are relevative to the mud_port
	// e.g. irc_port == mud_port + irc_port_offset
	// setting any of these to 0 will mean the mud use that service
	int		port_default;

	int		thief_system_tagged_duration; // in minutes
	int		killer_system_tagged_duration; // in minutes
	int		killer_system_death_reduction_duration; // in minutes

	long	uneditable_flags;

	game_settings_type *next; // put here so GIO_LOAD/SAVE_LIST can be used	
};
/**************************************************************************/
extern game_settings_type *game_settings;
/**************************************************************************/
#define GAMESET_CHANGED						(A)	// gameset.txt needs saving
#define GAMESET_NOPERMDEATH					(B) // prevents karns going below 0
#define GAMESET_NOSHORT_DESCRIPTS			(C) // dont use short descriptions
#define GAMESET_HOLYNAME_FOR_ALL			(D) // everyone gets holyname
#define GAMESET_REMORT_SUPPORTED			(E) // remort system
#define GAMESET_REMORT_IN_SCORE				(F) // remort number shown in score
#define GAMESET_SUBLEVELS_ENABLED			(G) // sublevel system used
#define GAMESET_ROLE_ROLEMASTER_STATS		(H) 
#define GAMESET_USE_ROLEMASTER_MODIFIERS	(I) 
#define GAMESET_NO_BIAS_AGAINST_REROLLING	(J) 
#define GAMESET_NO_LETGAINING_REQUIRED		(K) 
#define GAMESET_BARDDONE					(L)
#define GAMESET_CLASS_CREATION_NO_STAR		(M)
#define GAMESET_MAX_ALIGN_RANGE22			(N)
#define GAMESET_ALWAYS_ALLOW_SETAGE			(O)
#define GAMESET_RESTRICTED_GROUPING			(P)
#define GAMESET_MORGUE_ENABLED				(Q)
#define GAMESET_MSP_CHECK_FILEEXIST			(R)
#define GAMESET_PEACEFUL_MUD				(S)
#define GAMESET_DONT_PERFORM_IDENT_LOOKUPS	(U)
#define GAMESET_PLAYERS_CANT_ACCESS_OTHERS_COLOURS  (V)
#define GAMESET_PERFORM_LOCAL_DNS_LOOKUPS	(W)
#define GAMESET_LOG_ALL_IP_CONNECTS			(X)
#define GAMESET_DISABLE_RPS_SYSTEM			(Y) // no rps is given when enabled
#define GAMESET_OUTFIT_DISABLED				(Z) 
#define GAMESET_SHOW_STAT_AVERAGES_IN_CREATION	(aa) 
#define GAMESET_NEWBIE_LOCKED				(bb) 
#define GAMESET_PLAYER_LOCKED				(cc) 

// Second set of flags
#define GAMESET2_NO_SECOND_SKILL_REQUIRED		(A) 
#define GAMESET2_DONT_AUTOOUTFIT_ON_NEWBIE_LOGIN (B) 
#define GAMESET2_AUTONOTE_RENAMES_TO_ADMIN		(C)
#define GAMESET2_AUTONOTE_IMMPKILLS_TO_ADMIN	(D)
#define GAMESET2_NO_WEBLOG						(1<<4) //(E)
#define GAMESET2_USE_LASTON_IMM_VALUE			(F) 
#define GAMESET2_CAN_ATTACK_SHOPKEEPERS			(G) 
#define GAMESET2_SHOPKEEPERS_CAN_BE_KILLED		(H) 
#define GAMESET2_HIDE_AREA_SHORTNAMES			(I) 
#define GAMESET2_DONT_SAVE_LASTEDITORS			(J)
#define GAMESET2_DONT_SAVE_MOBPROG_AUTHORS		(K)
#define GAMESET2_NEWBIES_GET_ALL_MAPS			(L)
#define GAMESET2_TELL_RESTRICTIONS				(M)
#define GAMESET2_BYPASSDUEL_REDUCES_KARNS		(N)
#define GAMESET2_NO_DUEL_REQUIRED				(O)
#define GAMESET2_VERBOSE_DATES_IN_LOGS			(P)
#define GAMESET2_DISABLE_VERBOSE_OLC_LOGGING	(Q)
#define GAMESET2_NOCHARM_HAS_NOAFFECT			(R)
#define GAMESET2_NO_MSG_ABOUT_OLD_MUDCLIENTS	(S)
#define GAMESET2_NO_AUTODAMAGE_COMMAND			(T)
#define GAMESET2_NO_AUTOLOGOFF_FOR_IMM			(U)
#define GAMESET2_WHOLIST_SORT_BY_LEVEL			(V)
#define GAMESET2_WHOLIST_IMMS_BEFORE_MORTS		(W)
#define GAMESET2_DONT_DISPLAY_CODEBASE_4_LOGIN  (X)
#define GAMESET2_DONT_DISPLAY_WHO_4_LOGIN		(Y)
// feel free as a developer to put additional 
// flags you want to use in here Z -> ee


// third set of flags
#define GAMESET3_GAIN_HP_WHEN_LEVELING			(A)
#define GAMESET3_GAIN_ONE_TRAIN_WHEN_LEVELING	(B)
#define GAMESET3_INFO_BROADCASTS_ENABLED		(C)
#define GAMESET3_WHO_TITLE_DISABLED				(D)
#define GAMESET3_MORTLASTON_REQUIRES_PART_OF_NAME	(E)
#define GAMESET3_MORTLASTON_REQUIRES_FULL_IMM_NAME	(F)
#define GAMESET3_LANGUAGE_NOT_SCRAMBLED			(G)
#define GAMESET3_LANGUAGE_NAME_NOT_IN_SAYS		(H)
#define GAMESET3_NO_DECREASING_MAX_KARN			(I)
#define GAMESET3_NO_CLANTALK					(J)
#define GAMESET3_EXPERIMENTAL_DAMAGE_SCALING	(K)
#define GAMESET3_DISPLAY_P_RESET_BUGS_ON_WIZNET	(M)
#define GAMESET3_AUTOAFK_DISABLED				(N)
#define GAMESET3_STORM_DAMAGE_MESSAGES			(O)
#define GAMESET3_SHOW_QP_IN_SCORE				(P)
#define GAMESET3_AUTOMATIC_LETHEROING			(Q)
#define GAMESET3_CAN_TEACH_SPELLS_WHILE_UNLEARNED	(R)
#define GAMESET3_DISABLE_EXTENDED_ASCII_CHARACTERS	(S)
#define GAMESET3_USE_DYNAMIC_WIZLIST				(T)
#define GAMESET3_LOCKERS_DISABLED					(U)
#define GAMESET3_HELP_HEADER_FOOTER_BAR_DISABLED	(V)
#define GAMESET3_CIRCLE_ALLOWED_WITHOUT_CLEAR_SHOT	(W)
#define GAMESET3_THIEF_SYSTEM_ENABLED				(X)
#define GAMESET3_KILLER_SYSTEM_ENABLED				(Y)
#define GAMESET3_ALWAYS_NO_NEGATIVE_HP_AT_AFFECTOFF (Z)
#define GAMESET3_MORTLASTON_REDUCED_TO2HOURS_ON_MORTS	(aa)
#define GAMESET3_MORTLASTON_REDUCED_LASTDAY_ON_IMMS		(bb)

// fourth set of flags
#define GAMESET4_ROOM_INVITES_DISABLED				(A)
#define GAMESET4_AUTOLOG_ALL_NEW_PLAYERS			(B)
#define GAMESET4_HELP_PREV_NEXT_SEPARATE_FROM_FOOTER (C)
#define GAMESET4_HELP_PREV_NEXT_ABOVE_SEE_ALSO		(D)
#define GAMESET4_PREVENT_STEALING_FROM_PLAYERS		(E)
#define GAMESET4_OOC_PREVENTION_MESSAGES			(F)
#define GAMESET4_DUEL_SYSTEM_DISABLED				(G)
#define GAMESET4_NO_KARN_IN_SCORE					(H)
#define GAMESET4_LEVELSORT_IMMORTALS_ON_WHO			(I)
#define GAMESET4_LEVELSORT_MORTALS_ON_WHO			(J)
#define GAMESET4_USE_GRANTGROUPS_FOR_IMM			(K)
#define GAMESET4_SHOW_IMMROLE_IN_SCORE_INSTEAD_OF_LEVEL	(L)
#define GAMESET4_3TIER_IMMRANKS_IN_WHO				(M)
#define GAMESET4_REDIRECT_CHANNEL_OOC_TO_CHAT		(N)
#define GAMESET4_REDIRECT_CHANNEL_CHAT_TO_OOC		(O)
#define GAMESET4_NO_STEALING_OUTSIDE_10_LEVELS		(P)
#define GAMESET4_NO_STEALING_FROM_NON_LETGAINED		(Q)
#define GAMESET4_NO_STEALING_FROM_NON_CLANNED		(R)
#define GAMESET4_MUST_BE_LETGAINED_TO_STEAL_FROM_PLAYERS	(S)
#define GAMESET4_MUST_BE_IN_CLAN_TO_STEAL_FROM_PLAYERS		(T)
#define GAMESET4_LOGINWHO_HIDES_IMMS_FROM_MORTS		(U)
#define GAMESET4_REPORT_MISSING_OUTFIT_ITEMS_TO_PLAYERS	(V)
#define GAMESET4_GAMEDEFAULT_COLOUR_IN_SOCIALS_ON	(W)

// fifth set of flags
#define GAMESET5_RACEINFO_DISABLED_IN_CREATION		(A)
#define GAMESET5_RACEINFO_DISABLED_IN_WEBSERVER		(B)
#define GAMESET5_RESTRICTED_CREATIONS_PER_HOUR		(C)
#define GAMESET5_AUTODAMAGE_DEFAULTS_OFF			(D)
#define GAMESET5_CREATION_ASK_IF_WANT_AUTOMAP_ON	(E)
#define GAMESET5_CREATION_DISABLE_CUSTOMIZATION		(F)
#define GAMESET5_DEDICATED_PKILL_STYLE_MUD			(G)
#define GAMESET5_DEDICATED_OLC_BUILDING_MUD			(H)
#define GAMESET5_DISABLE_TILDE_CONVERSION			(I)
#define GAMESET5_VERBOSE_INTRODUCTION_LOGGING		(J)
#define GAMESET5_NO_STEALING_FROM_FIGHTING_CHARACTERS (K)
#define GAMESET5_MUST_BE_ACTIVE_TO_BE_INVOLVED_IN_STEALING (L)
#define GAMESET5_HEROS_DONT_LOSE_XP_FOR_DYING		(M)
#define GAMESET5_ADDICT_XP_BONUS					(N)
#define GAMESET5_NOTES_TO_RACE_NAMES_SUPPORTED		(O)
#define GAMESET5_NOTES_TO_CLASS_NAMES_SUPPORTED		(P)
#define GAMESET5_HUNGER_AND_THIRST_CAUSES_DAMAGE	(Q)
#define GAMESET5_CLASSINFO_DISABLED_IN_CREATION		(R)
#define GAMESET5_CLASSINFO_DISABLED_IN_WEBSERVER	(S)
#define GAMESET5_MXP_EDIT_AT_BOTTOM_OF_HELPS		(T)
#define GAMESET5_HIDE_SOCKET_BINDINGS_FROM_GAMESET	(U)

/**************************************************************************/
#define AREAIMPORTFLAG_IMPORTING_ENABLED			(A) // can't disable this
#define AREAIMPORTFLAG_IGNORE_HELPS_IN_AREAFILES	(B)
#define AREAIMPORTFLAG_DISCARD_UNFOUND_MOBPROGS		(C)
#define AREAIMPORTFLAG_READ_TO_EOL_ON_ACT_AFF_LINE	(D)

/**************************************************************************/
#define DEFAULT_LOGIN_PROMPT	"`WBy What Name Do You Wish To Be Called?`x "
#define LOGIN_PROMPT			(game_settings->login_prompt)
#define DEFAULT_PROMPT	"[`#`Y%e`g %t `R%h/%Hhp `B%m/%Mm `m%vmv `g%Xxp%d`^> "
//#define DEFAULT_PROMPT "[`#`Y%e`g %t `x%l `Y%g`yg `s%s`ws `R%h/`r%Hhp " 
//                                "`B%m/`b%Mm `M%v/`m%Vmv `G%X`gxp%d`^> "

/**************************************************************************/
#define GAMESETUNEDIT_MANUAL_COLOUR_CONVERT_PERFORMED	(A)
/**************************************************************************/

#endif // GAMESET_H