Make note_skill_levels default to what it used to, make it a simple list option.
[crawl.git] / crawl-ref / source / options.h
1 #ifndef OPTIONS_H
2 #define OPTIONS_H
3
4 #include "feature.h"
5 #include "pattern.h"
6 #include "newgame_def.h"
7
8 typedef std::map<monster_type, mon_display> mon_glyph_map;
9
10 class LineInput;
11 struct game_options
12 {
13 public:
14     game_options();
15     void reset_options();
16
17     void read_option_line(const std::string &s, bool runscripts = false);
18     void read_options(LineInput &, bool runscripts,
19                       bool clear_aliases = true);
20
21     void include(const std::string &file, bool resolve, bool runscript);
22     void report_error(PRINTF(1, ));
23
24     std::string resolve_include(const std::string &file,
25                                 const char *type = "");
26
27     bool was_included(const std::string &file) const;
28
29     static std::string resolve_include(
30         std::string including_file,
31         std::string included_file,
32         const std::vector<std::string> *rcdirs = NULL)
33                throw (std::string);
34
35 public:
36     std::string filename;     // The name of the file containing options.
37     std::string basefilename; // Base (pathless) file name
38     int         line_num;     // Current line number being processed.
39
40     // View options
41     std::vector<feature_override> feature_overrides;
42     mon_glyph_map mon_glyph_overrides;
43     ucs_t cset_override[NUM_DCHAR_TYPES];
44
45     std::string save_dir;       // Directory where saves and bones go.
46     std::string macro_dir;      // Directory containing macro.txt
47     std::string morgue_dir;     // Directory where character dumps and morgue
48                                 // dumps are saved. Overrides crawl_dir.
49     std::string shared_dir;     // Directory where the logfile, scores and bones
50                                 // are stored.  On a multi-user system, this dir
51                                 // should be accessible by different people.
52     std::vector<std::string> additional_macro_files;
53
54     uint32_t    seed;   // Non-random games.
55
56 #ifdef DGL_SIMPLE_MESSAGING
57     bool        messaging;      // Check for messages.
58 #endif
59
60     bool        suppress_startup_errors;
61
62     bool        mouse_input;
63
64     int         view_max_width;
65     int         view_max_height;
66     int         mlist_min_height;
67     int         msg_min_height;
68     int         msg_max_height;
69     bool        mlist_allow_alternate_layout;
70     bool        messages_at_top;
71     bool        mlist_targetting;
72     bool        msg_condense_repeats;
73     bool        msg_condense_short;
74
75     // The view lock variables force centering the viewport around the PC @
76     // at all times (the default). If view locking is not enabled, the viewport
77     // scrolls only when the PC hits the edge of it.
78     bool        view_lock_x;
79     bool        view_lock_y;
80
81     // For an unlocked viewport, this will center the viewport when scrolling.
82     bool        center_on_scroll;
83
84     // If symmetric_scroll is set, for diagonal moves, if the view
85     // scrolls at all, it'll scroll diagonally.
86     bool        symmetric_scroll;
87
88     // How far from the viewport edge is scrolling forced.
89     int         scroll_margin_x;
90     int         scroll_margin_y;
91
92     int         autopickup_on;
93     int         default_friendly_pickup;
94     bool        default_manual_training;
95
96     bool        show_newturn_mark;// Show underscore prefix in messages for new turn
97     bool        show_gold_turns; // Show gold and turns in HUD.
98     bool        show_game_turns; // Show game turns instead of player turns.
99     bool        show_no_ctele;   // Show -cTele in the status light area.
100
101     uint32_t    autopickups;     // items to autopickup
102     bool        auto_switch;     // switch melee&ranged weapons according to enemy range
103     bool        show_inventory_weights; // show weights in inventory listings
104     bool        clean_map;       // remove unseen clouds/monsters
105     bool        show_uncursed;   // label known uncursed items as "uncursed"
106     bool        easy_open;       // open doors with movement
107     bool        easy_unequip;    // allow auto-removing of armour / jewellery
108     bool        equip_unequip;   // Make 'W' = 'T', and 'P' = 'R'.
109     int         confirm_butcher; // When to prompt for butchery
110     bool        chunks_autopickup; // Autopickup chunks after butchering
111     bool        prompt_for_swap; // Prompt to switch back from butchering
112                                  // tool if hostile monsters are around.
113     bool        list_rotten;     // list slots for rotting corpses/chunks
114     chunk_drop_type auto_drop_chunks; // drop chunks when overburdened
115     bool        prefer_safe_chunks; // prefer clean chunks to contaminated ones
116     bool        easy_eat_chunks; // make 'e' auto-eat the oldest safe chunk
117     bool        easy_eat_gourmand; // with easy_eat_chunks, and wearing a
118                                    // "OfGourmand, auto-eat contaminated
119                                    // chunks if no safe ones are present
120     bool        easy_eat_contaminated; // like easy_eat_gourmand, but
121                                        // always active.
122     bool        auto_eat_chunks; // allow eating chunks while resting or travelling
123     bool        default_target;  // start targetting on a real target
124     bool        autopickup_no_burden;   // don't autopickup if it changes burden
125     skill_focus_mode skill_focus; // is the focus skills available
126
127     bool        note_all_skill_levels;  // take note for all skill levels (1-27)
128     bool        note_skill_max;   // take note when skills reach new max
129     std::string user_note_prefix; // Prefix for user notes
130     int         note_hp_percent;  // percentage hp for notetaking
131     bool        note_xom_effects; // take note of all Xom effects
132     bool        note_chat_messages; // log chat in DGL/Webtiles
133     confirm_level_type easy_confirm;    // make yesno() confirming easier
134     bool        easy_quit_item_prompts; // make item prompts quitable on space
135     confirm_prompt_type allow_self_target;      // yes, no, prompt
136
137     int         colour[16];      // macro fg colours to other colours
138     int         background_colour; // select default background colour
139     msg_colour_type channels[NUM_MESSAGE_CHANNELS];  // msg channel colouring
140     bool        darken_beyond_range; // for whether targetting is out of range
141
142     int         hp_warning;      // percentage hp for danger warning
143     int         magic_point_warning;    // percentage mp for danger warning
144     bool        clear_messages;   // clear messages each turn
145     bool        show_more;        // Show message-full more prompts.
146     bool        small_more;       // Show one-char more prompts.
147     unsigned    friend_brand;     // Attribute for branding friendly monsters
148     unsigned    neutral_brand;    // Attribute for branding neutral monsters
149     bool        no_dark_brand;    // Attribute for branding friendly monsters
150     bool        macro_meta_entry; // Allow user to use numeric sequences when
151                                   // creating macros
152
153     int         fire_items_start; // index of first item for fire command
154     std::vector<unsigned> fire_order;   // missile search order for 'f' command
155
156     bool        auto_list;       // automatically jump to appropriate item lists
157
158     bool        flush_input[NUM_FLUSH_REASONS]; // when to flush input buff
159
160     char_set_type  char_set;
161     FixedVector<ucs_t, NUM_DCHAR_TYPES> char_table;
162
163     int         num_colours;     // used for setting up curses colour table (8 or 16)
164
165 #ifdef WIZARD
166     int                      wiz_mode;   // no, never, start in wiz mode
167     std::vector<std::string> terp_files; // Lua files to load for luaterp
168     bool                     no_save;    // don't use persistent save files
169 #endif
170
171     // internal use only:
172     int         sc_entries;      // # of score entries
173     int         sc_format;       // Format for score entries
174
175     std::vector<std::pair<int, int> > hp_colour;
176     std::vector<std::pair<int, int> > mp_colour;
177     std::vector<std::pair<int, int> > stat_colour;
178     std::vector<int> enemy_hp_colour;
179     bool visual_monster_hp;
180
181     std::string map_file_name;   // name of mapping file to use
182     std::vector<std::pair<text_pattern, bool> > force_autopickup;
183     std::vector<text_pattern> note_monsters;  // Interesting monsters
184     std::vector<text_pattern> note_messages;  // Interesting messages
185     std::vector<std::pair<text_pattern, std::string> > autoinscriptions;
186     std::vector<text_pattern> note_items;     // Objects to note
187     FixedBitVector<27+1> note_skill_levels;   // Skill levels to note
188     std::vector<std::pair<text_pattern, std::string> > auto_spell_letters;
189
190     bool        autoinscribe_artefacts; // Auto-inscribe identified artefacts.
191     bool        autoinscribe_cursed; // Auto-inscribe previosly cursed items.
192
193     bool        pickup_thrown;  // Pickup thrown missiles
194     int         travel_delay;   // How long to pause between travel moves
195     int         explore_delay;  // How long to pause between explore moves
196
197     bool        show_travel_trail;
198
199     int         arena_delay;
200     bool        arena_dump_msgs;
201     bool        arena_dump_msgs_all;
202     bool        arena_list_eq;
203
204     std::vector<message_filter> force_more_message;
205
206     int         stash_tracking; // How stashes are tracked
207
208     int         tc_reachable;   // Colour for squares that are reachable
209     int         tc_excluded;    // Colour for excluded squares.
210     int         tc_exclude_circle; // Colour for squares in the exclusion radius
211     int         tc_dangerous;   // Colour for trapped squares, deep water, lava.
212     int         tc_disconnected;// Areas that are completely disconnected.
213     std::vector<text_pattern> auto_exclude; // Automatically set an exclusion
214                                             // around certain monsters.
215
216     int         travel_stair_cost;
217
218     bool        show_waypoints;
219
220     unsigned    evil_colour; // Colour for things player's god dissapproves
221
222     unsigned    detected_monster_colour;    // Colour of detected monsters
223     unsigned    detected_item_colour;       // Colour of detected items
224     unsigned    status_caption_colour;      // Colour of captions in HUD.
225
226     unsigned    heap_brand;         // Highlight heaps of items
227     unsigned    stab_brand;         // Highlight monsters that are stabbable
228     unsigned    may_stab_brand;     // Highlight potential stab candidates
229     unsigned    feature_item_brand; // Highlight features covered by items.
230     unsigned    trap_item_brand;    // Highlight traps covered by items.
231
232     // What is the minimum number of items in a stack for which
233     // you show summary (one-line) information
234     int         item_stack_summary_minimum;
235
236     int         explore_stop;      // Stop exploring if a previously unseen
237                                    // item comes into view
238
239     int         explore_stop_prompt;
240
241     // Don't stop greedy explore when picking up an item which matches
242     // any of these patterns.
243     std::vector<text_pattern> explore_stop_pickup_ignore;
244
245     bool        explore_greedy;    // Explore goes after items as well.
246
247     // How much more eager greedy-explore is for items than to explore.
248     int         explore_item_greed;
249
250     // How much autoexplore favors visiting squares next to walls.
251     int         explore_wall_bias;
252
253     // Some experimental improvements to explore
254     bool        explore_improved;
255
256     bool        travel_key_stop;   // Travel stops on keypress.
257
258     std::vector<sound_mapping> sound_mappings;
259     std::vector<colour_mapping> menu_colour_mappings;
260     std::vector<message_colour_mapping> message_colour_mappings;
261
262     bool       menu_colour_prefix_class; // Prefix item class to string
263     bool       menu_colour_shops;   // Use menu colours in shops?
264
265     std::vector<menu_sort_condition> sort_menus;
266
267     int         dump_kill_places;   // How to dump place information for kills.
268     int         dump_message_count; // How many old messages to dump
269
270     int         dump_item_origins;  // Show where items came from?
271     int         dump_item_origin_price;
272     bool        dump_book_spells;
273
274     // Order of sections in the character dump.
275     std::vector<std::string> dump_order;
276
277     bool        level_map_title;    // Show title in level map
278     bool        target_unshifted_dirs; // Unshifted keys target if cursor is
279                                        // on player.
280
281     int         drop_mode;          // Controls whether single or multidrop
282                                     // is the default.
283     int         pickup_mode;        // -1 for single, 0 for menu,
284                                     // X for 'if at least X items present'
285
286     bool        easy_exit_menu;     // Menus are easier to get out of
287
288     int         assign_item_slot;   // How free slots are assigned
289
290     bool        restart_after_game; // If true, Crawl will not close on game-end
291
292     std::vector<text_pattern> drop_filter;
293
294     FixedArray<bool, NUM_DELAYS, NUM_AINTERRUPTS> activity_interrupts;
295 #ifdef DEBUG_DIAGNOSTICS
296     FixedBitVector<NUM_DIAGNOSTICS> quiet_debug_messages;
297 #endif
298
299     // Previous startup options
300     bool        remember_name;      // Remember and reprompt with last name
301
302     bool        dos_use_background_intensity;
303
304     bool        use_fake_cursor;    // Draw a fake cursor instead of relying
305                                     // on the term's own cursor.
306     bool        use_fake_player_cursor;
307
308     bool        show_player_species;
309
310     int         level_map_cursor_step;  // The cursor increment in the level
311                                         // map.
312
313     // If the player prefers to merge kill records, this option can do that.
314     int         kill_map[KC_NCATEGORIES];
315
316     bool        rest_wait_both; // Stop resting only when both HP and MP are
317                                 // fully restored.
318
319     lang_t      lang;                // Translation to use.
320     const char* lang_name;           // Database name of the language.
321
322 #ifdef WIZARD
323     // Parameters for fight simulations.
324     std::string fsim_mode;
325     int         fsim_rounds;
326     std::string fsim_mons;
327     std::vector<std::string> fsim_scale;
328     std::vector<std::string> fsim_kit;
329 #endif  // WIZARD
330
331 #ifdef USE_TILE
332     std::string tile_show_items; // show which item types in tile inventory
333     bool        tile_skip_title; // wait for a key at title screen?
334     bool        tile_menu_icons; // display icons in menus?
335
336     // minimap colours
337     char        tile_player_col;
338     char        tile_monster_col;
339     char        tile_neutral_col;
340     char        tile_peaceful_col;
341     char        tile_friendly_col;
342     char        tile_plant_col;
343     char        tile_item_col;
344     char        tile_unseen_col;
345     char        tile_floor_col;
346     char        tile_wall_col;
347     char        tile_mapped_wall_col;
348     char        tile_door_col;
349     char        tile_downstairs_col;
350     char        tile_upstairs_col;
351     char        tile_feature_col;
352     char        tile_trap_col;
353     char        tile_water_col;
354     char        tile_lava_col;
355     char        tile_excluded_col;
356     char        tile_excl_centre_col;
357     char        tile_window_col;
358 #endif
359 #ifdef USE_TILE_LOCAL
360     // font settings
361     std::string tile_font_crt_file;
362     int         tile_font_crt_size;
363     std::string tile_font_msg_file;
364     int         tile_font_msg_size;
365     std::string tile_font_stat_file;
366     int         tile_font_stat_size;
367     std::string tile_font_lbl_file;
368     int         tile_font_lbl_size;
369     std::string tile_font_tip_file;
370     int         tile_font_tip_size;
371 #ifdef USE_FT
372     bool        tile_font_ft_light;
373 #endif
374     // window settings
375     screen_mode tile_full_screen;
376     int         tile_window_width;
377     int         tile_window_height;
378     int         tile_map_pixels;
379 #endif
380
381 #ifdef USE_TILE
382     bool        tile_force_overlay;
383     // display settings
384     int         tile_update_rate;
385     int         tile_runrest_rate;
386     int         tile_key_repeat_delay;
387     int         tile_tooltip_ms;
388     tag_pref    tile_tag_pref;
389
390     bool        tile_show_minihealthbar;
391     bool        tile_show_minimagicbar;
392     bool        tile_show_demon_tier;
393     bool        tile_force_regenerate_levels;
394     std::vector<std::string> tile_layout_priority;
395 #endif
396
397     typedef std::map<std::string, std::string> opt_map;
398     opt_map     named_options;          // All options not caught above are
399                                         // recorded here.
400
401     newgame_def game;      // Choices for new game.
402
403 private:
404     typedef std::map<std::string, std::string> string_map;
405     string_map               aliases;
406     string_map               variables;
407     std::set<std::string>    constants; // Variables that can't be changed
408     std::set<std::string>    included;  // Files we've included already.
409
410 public:
411     // Convenience accessors for the second-class options in named_options.
412     int         o_int(const char *name, int def = 0) const;
413     bool        o_bool(const char *name, bool def = false) const;
414     std::string o_str(const char *name, const char *def = NULL) const;
415     int         o_colour(const char *name, int def = LIGHTGREY) const;
416
417     // Fix option values if necessary, specifically file paths.
418     void fixup_options();
419
420 private:
421     std::string unalias(const std::string &key) const;
422     std::string expand_vars(const std::string &field) const;
423     void add_alias(const std::string &alias, const std::string &name);
424
425     void clear_feature_overrides();
426     void clear_cset_overrides();
427     void add_cset_override(char_set_type set, const std::string &overrides);
428     void add_cset_override(char_set_type set, dungeon_char_type dc, int symbol);
429     void add_feature_override(const std::string &);
430
431     void add_message_colour_mappings(const std::string &);
432     void add_message_colour_mapping(const std::string &);
433     message_filter parse_message_filter(const std::string &s);
434
435     void set_default_activity_interrupts();
436     void clear_activity_interrupts(FixedVector<bool, NUM_AINTERRUPTS> &eints);
437     void set_activity_interrupt(
438         FixedVector<bool, NUM_AINTERRUPTS> &eints,
439         const std::string &interrupt);
440     void set_activity_interrupt(const std::string &activity_name,
441                                 const std::string &interrupt_names,
442                                 bool append_interrupts,
443                                 bool remove_interrupts);
444     void set_fire_order(const std::string &full, bool add);
445     void add_fire_order_slot(const std::string &s);
446     void set_menu_sort(std::string field);
447     void str_to_enemy_hp_colour(const std::string &);
448     void new_dump_fields(const std::string &text, bool add = true);
449     void do_kill_map(const std::string &from, const std::string &to);
450     int  read_explore_stop_conditions(const std::string &) const;
451
452     void split_parse(const std::string &s, const std::string &separator,
453                      void (game_options::*add)(const std::string &));
454     void add_mon_glyph_overrides(const std::string &mons, mon_display &mdisp);
455     void add_mon_glyph_override(const std::string &);
456     mon_display parse_mon_glyph(const std::string &s) const;
457     void set_option_fragment(const std::string &s);
458
459     static const std::string interrupt_prefix;
460 };
461
462 ucs_t get_glyph_override(int c);
463 object_class_type item_class_by_sym(ucs_t c);
464
465 #ifdef DEBUG_GLOBALS
466 #define Options (*real_Options)
467 #endif
468 extern game_options  Options;
469
470 #endif