1 /* $Id$ */
2 /* File: defines-features.h */
3 
4 /* Purpose: global definitions of enabled features.
5    I created created this file and split off all feature #defines
6    to move them in here, so it can be included by the new .pre lua files,
7    to allow for finer #ifdef checks there.
8    So this file must ONLY contain #define <feature> basically! - C. Blue
9  */
10 
11 
12 
13 /* --------------------------------------------------------------------------*/
14 /* Features that are allowed in all build types, ie server-type independant: */
15 
16 /* Distinguished light colour for flaming lites, magic lights, vampire light */
17 #define CAVE_LITE_COLOURS
18 
19 /* Add extra character slot(s) dedicated to Ironman Deep Dive Challenge (MAX_DED_IDDC_CHARS) */
20 #define ALLOW_DED_IDDC_MODE
21 /* Add extra character slot(s) dedicated to PvP mode (MAX_DED_PVP_CHARS) */
22 #define ALLOW_DED_PVP_MODE
23 
24 /* Use daily pre-generated IDDC lineups of dungeon types, with transitions, bosses, etc? */
25 #define IRONDEEPDIVE_MIXED_TYPES
26 /* Add fixed (and safe) towns to "Ironman Deep Dive Challenge"? (at depths 2k and 4k) */
27 #define IRONDEEPDIVE_FIXED_TOWNS
28 /* Allow to withdraw prematurely in fixed Ironman Deep Dive Challenge towns.
29    (No entry to the leaderboard this way of course.) */
30 #define IRONDEEPDIVE_FIXED_TOWN_WITHDRAWAL
31 /* Fixed towns in "Ironman Deep Dive Challenge" are also static regarding objects and monsters? */
32 //#define IRONDEEPDIVE_STATIC_TOWNS
33 /* Add extra fixed towns to "Ironman Deep Dive Challenge"? (at depths 1k and 3k),
34    these are 'wild' like random towns and not as privileged (no withdrawal, no item staticness) */
35 #define IRONDEEPDIVE_EXTRA_FIXED_TOWNS
36 /* Do artifacts time out especially quickly in the IDDC? */
37 #define IDDC_ARTIFACT_FAST_TIMEOUT
38 /* Do artifacts time out especially quickly for total_winners
39    (and for once_winners if fallenkings_etiquette is set)? */
40 #define WINNER_ARTIFACT_FAST_TIMEOUT
41 
42 /* Can the first [two] speed rings be found especially easily in the IDDC? Or too much pampering? (0/[1]/2) */
43 #define IDDC_EASY_SPEED_RINGS 1
44 
45 #define DUNGEON_VISIT_BONUS	/* Experimental: Dungeons rarely visited give exp bonus - C. Blue */
46 //#define DUNGEON_VISIT_BONUS_DEPTHRANGE /* not yet implemented: enhance DUNGEON_VISIT_BONUS algorithm further (but seems inefficient atm) */
47 
48 /* Filter swearwords (depends on client-side option too) and put offenders to jail?
49    (Filer initialised from swearing.txt (vs nonswearing.txt) and init_swear_set().)
50    NOTE: Censoring can still be disabled (and reenabled) on the fly via
51          'censor_swearing' lua variable.*/
52 #define CENSOR_SWEARING
53 
54 #define ENABLE_NEW_MELEE	/* shields may block, weapons may parry */
55 #define DUAL_WIELD		/* rogues (and others too now) may dual-wield 1-hand weapons */
56 #define ENABLE_STANCES		/* combat stances for warriors */
57 #define ALLOW_SHIELDLESS_DEFENSIVE_STANCE	/* Always allow defensive stance (less effective than with shield though) */
58 
59 #define ENABLE_CLOAKING		/* cloaking mode for rogues */
60 #define NEW_DODGING		/* reworked dodging formulas to allow more armour weight while aligning it to rogues, keeping your ideas though, Adam ;) - C. Blue */
61 #define ENABLE_TECHNIQUES
62 #define NEW_HISCORE		/* extended high score options for tomenet.cfg */
63 
64 #define ENABLE_MCRAFT		/* 'Mindcrafter' class - C. Blue */
65 #define NEW_TOMES		/* customizable spellbooks */
66 
67 #define CLIENT_SIDE_WEATHER	/* server uses Send_weather() instead of displaying own weather animation */
68 #define MAX_CLOUDS 1000
69 
70 #define EXTRA_LEVEL_FEELINGS	/* enable extra level feelings, remotely angband-style, warning about dangers */
71 #define M_EGO_NEW_FLICKER	/* ego monsters flicker between base r_ptr and ego colour */
72 #define NEW_ANTIMAGIC_RATIO	/* new darksword-vs-skill ratio for antimagic: weapon up to 30%, skill up to 50% */
73 
74 #define ANTI_SEVEN_EXPLOIT	/* prevent ball-spell/explosion casters from exploiting monster movement by using a 7-shaped corridor */
75 #define DOUBLE_LOS_SAFETY	/* prevent exploit of diagonal LoS that may result in stationary monsters unable to retaliate */
76 #define STEAL_CHEEZEREDUCTION	/* reduce cheeziness of stealing by giving more expensive items a chance to turn level 0 */
77 
78 #define PLAYER_STORES		/* Enable player-run shops - C. Blue */
79 #define HOUSE_PAINTING		/* Allow players to paint their entrance area or house (for PLAYER_STORES) - C. Blue */
80 
81 #ifndef WIN32
82 #define ENABLE_GO_GAME		/* Allows players to play vs CPU games of Go/Weiqi/Baduk. - C. Blue */
83 #endif
84 #define ENABLE_MAIA		/* enable RACE_MAIA (formerly 'DIVINE' race) */
85 #define ENABLE_KOBOLD		/* enable RACE_KOBOLD */
86 
87 /* Allow monsters with AI_ASTAR r_info flag to use A* pathfinding algorithm? - C. Blue */
88 #define MONSTER_ASTAR
89 
90 /* C. Blue - Note about flow_by_sound/flow_by_smell:
91    Smell is currently not distinct from sound, but code is kind of incomplete or mixed up in some parts.
92    I added various limits for each sound and flow, although these aren't implemented yet they should be here,
93    because they won't bring additional costs! So on fixing sound/smell they should definitely be added.
94    Also, distinctions between sound/smell/ESP(new ;)) should be added, depending on monster races. */
95 
96 /* Allow monsters to use flowing pathfinding algorithm? */
97 //#define MONSTER_FLOW_BY_SOUND
98 
99 /* Allow monsters to use smelling pathfinding algorithm? */
100 //#define MONSTER_FLOW_BY_SMELL
101 
102 /* Allow monsters to use flow algorithm without range/radius (well as far as we have cpu powah..)/time restrictions?
103    Let's just use same as for MONSTER_FLOW_BY_SOUND, so we don't need more fields for cave_type.. - C. Blue */
104 //#define MONSTER_FLOW_BY_ESP
105 
106 /* Allow use of '!E' inscription to prevent earthquakes from TR5_IMPACT items? */
107 //#define ALLOW_NO_QUAKE_INSCRIPTION
108 
109 /* Allow only a limited amount of guild adders, in turn maintain an always
110    accessible list of them, which also allows for removal while they aren't on? */
111 #define GUILD_ADDERS_LIST
112 
113 /* Shorten party/guild name to (P) and (G) in party-/guild-chat for less clutter? */
114 #define GROUP_CHAT_NOCLUTTER
115 
116 /* Load 'D:' tags from a_info.txt file and display them on examining - C. Blue */
117 #define ART_DIZ
118 
119 #define ENABLE_INSTANT_RES	/* Enable the instant resurrection feature */
120 
121 #define WILDERNESS_NEW_FEATURES	/* Use new 4.4.9 wilderness features? WARNING: Changes wilderness and houses */
122 
123 #define BIG_MAP		/* Allow a larger main window with a map bigger than 66x22 - C. Blue */
124 
125 /* Use an info screen for normal ID too, not just for *ID*, and display all
126    guaranteed abilities (k_info and 100%-e_info flags/esp) in it. - C. Blue */
127 #define NEW_ID_SCREEN
128 
129 /* Load 'D:' tags from k_info.txt file and display them on examining - C. Blue */
130 #define KIND_DIZ
131 
132 /* Allow kings/queens/emperors/empresses to team up for Nether Realm.
133    Must be at the worldmap sector of NR entrance, or inside NR. */
134 #define ALLOW_NR_CROSS_PARTIES
135 /* Best to enable when ALLOW_NR_CROSS_PARTIES is enabled:
136    Allow kings/queens/emperors/empresses to trade items that were found in the
137    Nether Realm as long as the items weren't transported out of it once. */
138 #define ALLOW_NR_CROSS_ITEMS
139 
140 /* expand TV_POTION svals to make TV_POTION2 obsolete? */
141 #define EXPAND_TV_POTION
142 
143 /* Use newly reworked spell system: Discrete stages for each component of
144    compound spells, and fixed mana cost to go with it. */
145 #define DISCRETE_SPELL_SYSTEM
146 //#define DSS_EXPANDED_SCROLLS /* spell scrolls to carry all versions of a spell instead of just one specific? (Implementation not yet done) */
147 
148 /* Draconians get to pick a 'lineage trait' on birth,
149    giving specific resistances and a breath weapon. - C. Blue */
150 #define ENABLE_DRACONIAN_TRAITS
151 
152 /* Allow an OT_GUILD house for each guild. - C. Blue */
153 #define ENABLE_GUILD_HALL
154 
155 /* like BONE_AND_TREASURE_CHAMBERS, just for IDDC */
156 #define IDDC_BONE_AND_TREASURE_CHAMBERS
157 
158 
159 /* New in 4.5.1.2: Support 100% client-side animated spellcasting - C. Blue
160    Note: This must be on for clients >= 4.5.1.2.0.0 and off for those before.
161    Same for servers. */
162 #define EXTENDED_TERM_COLOURS
163 
164 /* Special extended colours that make use of background colouring - C. Blue
165    Note: This is highly EXPERIMENTAL and not even implemented atm.,
166          the only thing that works is proof of concept code that displays
167          rain in alternating colours, TERM_ORANGE and TERM2_BLUE. */
168 //#define EXTENDED_BG_COLOURS
169 
170 
171 /* better chance for non-low +hit,+dam on randart melee weapons and boomerangs */
172 #define RANDART_WEAPON_BUFF
173 
174 /* Allow usage of /hilite command (todo: turn into client option) */
175 #define ENABLE_SELF_FLASHING
176 
177 /* Allow !X pseudo-auto-identify inscription on spell books too - C. Blue
178    Note that this badly abuses the 'item-on-floor' (negative current_item value) feature,
179    which fortunately is unused in general.
180    Currently there's a harmless message inconsistency: !X from spells will output an
181    additional 'In your pack: xxxx (x)' message before the 'You have..' carry() message. */
182 #define ENABLE_XID_SPELL
183 #define XID_SPELL_AFTER_PICKUP /* this must be set to reflect 'inven_carry()' call position in 'carry()' routine! */
184 
185 /* Allow Martial Arts users to wield boomerangs? */
186 #define ENABLE_MA_BOOMERANG
187 
188 /* Warning beep on taking damage while off-panel via locate command */
189 #define ALERT_OFFPANEL_DAM
190 
191 /* Telekinesis uses server-side get_item() request instead of the
192    client-side LUA script prompting for the item? (Recommended)
193    Advantage: We only ask for the item after the spell has been cast
194    successfully.
195    Disadvantage: Macros need \wXX to wait for the server-side request.
196    (Not a real 'feature', but needs to be in here to be recognized by player.pre.) */
197 #define TELEKINESIS_GETITEM_SERVERSIDE
198 
199 /* Wilderness mapping scrolls are special: They're actually pieces of the world map. */
200 #define NEW_WILDERNESS_MAP_SCROLLS
201 
202 /* Disable manual declaration of hostility/peace */
203 #define NO_PK
204 
205 /* --------------------- Server-type dependant features -------------------- */
206 
207 #ifdef RPG_SERVER
208  /* limit to_ac to +30 instead of +35 -- Reason: Give base AC more weight!
209     Counter-balanced by different AC_CAP/AC_DIV values, so no nerf for players! */
210  #define TO_AC_CAP_30
211 
212  /* Do we want to use Kurzel's PvE/P when mode 1 PK is configured? */
213 // #define KURZEL_PK --disabled because it breaks chat highlighting
214 
215  #define BONE_AND_TREASURE_CHAMBERS	/* New experimental room types: Generate pits of bones or treasure - C. Blue */
216 
217  #define MUCHO_RUMOURS		/* print a rumour on day changes and unique kills (the_sandman) */
218 // #define PRECIOUS_STONES
219 
220  #define AUCTION_BETA		/* less restrictions while beta testing */
221  #define AUCTION_SYSTEM
222  #define AUCTION_DEBUG
223 
224  #define OPTIMIZED_ANIMATIONS	/* testing */
225 #endif
226 
227 #ifdef TEST_SERVER
228  #define NEW_REMOVE_CURSE	/* rc has fail chance; allow projecting rc spell on others */
229 
230  /* limit to_ac to +30 instead of +35 -- Reason: Give base AC more weight!
231     Counter-balanced by different AC_CAP/AC_DIV values, so no nerf for players! */
232  #define TO_AC_CAP_30		/* limit to_ac to +30 instead of +35 */
233 
234  #define ENABLE_ASSASSINATE	/* experimental fighting technique for rogues - devalues Backstabbing too much probably */
235 
236  #ifdef MAX_CLOUDS
237   #undef MAX_CLOUDS
238   #define MAX_CLOUDS 10		/* note that this number gets divided depending on season */
239  #endif
240 
241  #define AUCTION_BETA		/* less restrictions while beta testing */
242  #define AUCTION_SYSTEM
243  #define AUCTION_DEBUG
244 
245  #define OPTIMIZED_ANIMATIONS	/* testing */
246 
247  #define TELEPORT_SURPRISES	/* monsters are surprised for a short moment if a player long-range teleported next to them */
248 #endif
249 
250 #ifdef ARCADE_SERVER
251 #endif
252 
253 
254 
255 /* ------------------------ Client-side only features -----------------------*/
256 
257 #ifdef CLIENT_SIDE
258 //Originally for hybrid clients to do both old and new runemastery, now unused.
259 
260  /* Use a somewhat lighter 'dark blue' for TERM_BLUE to improve readability
261     on some screens / under certain circumstances? */
262  //#define READABILITY_BLUE --has been turned into a config file option!
263 
264  /* Use a somewhat darker 'light dark' for TERM_L_DARK to improve distinction
265     from slate tone? */
266  #define DISTINCT_DARK
267 
268  /* Remove some hard-coding in the client options */
269  #define CO_BIGMAP	7
270 
271  #ifdef TEST_CLIENT
272   #define BIGMAP_MINDLINK_HACK
273  #endif
274 #endif
275 
276 /* ----------------- Misc flags induced by above definitions ----------------*/
277 
278 /* Use new shields with block/deflect values instead of traditional ac/+ac ? */
279 #ifdef ENABLE_NEW_MELEE
280  #ifndef USE_NEW_SHIELDS
281   #define USE_NEW_SHIELDS
282   /* Shields do not have an +AC modifier anymore (aka it's zeroed)? - Note that shields still count as is_armour() though */
283   #define NEW_SHIELDS_NO_AC
284  #endif
285 /* Use blocking/parrying? if USE_NEW_SHIELDS is disabled, AC will be used to determine block chance */
286  #ifndef USE_BLOCKING
287   #define USE_BLOCKING
288  #endif
289  #ifndef USE_PARRYING
290   #define USE_PARRYING
291  #endif
292 #endif
293 
294 /* Flow by sound/smell/esp requires MONSTER_FLOW */
295 #ifdef MONSTER_FLOW_BY_SOUND
296  #define MONSTER_FLOW
297 #endif
298 #ifdef MONSTER_FLOW_BY_SMELL
299  #ifndef MONSTER_FLOW
300   #define MONSTER_FLOW
301  #endif
302 #endif
303 #ifdef MONSTER_FLOW_BY_ESP
304  #ifndef MONSTER_FLOW
305   #define MONSTER_FLOW
306  #endif
307 #endif
308 
309 /* DUNGEON_VISIT_BONUS:
310    Amount of time until a dungeon cannot be more frequented anymore (in minutes) [800].
311    The time until a dungeon goes back down to 0 ('most unexplored') is that time * 10,
312    so 800 would result in 8000 minutes aka ~6 days. */
313 #define VISIT_TIME_CAP 800
314