summaryrefslogtreecommitdiff
path: root/src/options.hpp
blob: b0088fe2077a073f5e3a3f5e8b800292f3739478 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#pragma once

#include "h-basic.hpp"
#include "option_type.hpp"

#include <vector>

/**
 * Game options accessible via the '=' menu.
 */
struct options {

	//
	// Option Set 1 -- User Interface
	//
	bool rogue_like_commands = false;       /* Rogue-like commands */
	bool quick_messages = true;             /* Activate quick messages */
	bool carry_query_flag = false;          /* Prompt before picking things up */
	bool use_old_target = false;            /* Use old target by default */
	bool always_pickup = false;             /* Pick things up by default */
	bool always_repeat = true;              /* Repeat obvious commands */
	bool ring_bell = false;                 /* Ring the bell (on errors, etc) */

	//
	// Option Set 2 -- Disturbance
	//
	bool find_ignore_stairs = false;        /* Run past stairs */
	bool find_ignore_doors = true;          /* Run through open doors */
	bool find_cut = false;                  /* Run past known corners */
	bool find_examine = true;               /* Run into potential corners */
	bool disturb_move = false;              /* Disturb whenever any monster moves */
	bool disturb_near = true;               /* Disturb whenever viewable monster moves */
	bool disturb_panel = true;              /* Disturb whenever map panel changes */
	bool disturb_state = true;              /* Disturn whenever player state changes */
	bool disturb_minor = true;              /* Disturb whenever boring things happen */
	bool disturb_other = false;             /* Disturb whenever various things happen */
	bool last_words = true;                 /* Get last words upon dying */
	bool wear_confirm = true;               /* Confirm before putting on known cursed items */
	bool confirm_stairs = false;            /* Prompt before staircases... */
	bool disturb_pets = false;              /* Pets moving nearby disturb us */

	//
	// Option Set 3 -- Game-Play
	//
	bool auto_scum = true;                  /* Auto-scum for good levels */
	bool view_perma_grids = true;           /* Map remembers all perma-lit grids */
	bool view_torch_grids = false;          /* Map remembers all torch-lit grids */
	bool dungeon_align = true;              /* Generate dungeons with aligned rooms */
	bool dungeon_stair = true;              /* Generate dungeons with connected stairs */
	bool flow_by_sound = false;             /* Monsters track new player location */
	bool smart_learn = false;               /* Monsters learn from their mistakes */
	bool small_levels = true;               /* Allow unusually small dungeon levels */
	bool empty_levels = true;               /* Allow empty 'arena' levels */

	//
	// Option Set 4 -- Efficiency
	//
	bool view_reduce_lite = false;          /* Reduce lite-radius when running */
	bool avoid_abort = false;               /* Avoid checking for user abort */
	bool avoid_shimmer = false;             /* Avoid processing extra shimmering */
	bool avoid_other = false;               /* Avoid processing special colors */
	bool flush_failure = true;              /* Flush input on any failure */
	bool flush_disturb = false;             /* Flush input on disturbance */
	bool flush_command = false;             /* Flush input before every command */
	bool fresh_before = true;               /* Flush output before normal commands */
	bool fresh_after = false;               /* Flush output after normal commands */
	bool fresh_message = false;             /* Flush output after all messages */
	bool hilite_player = false;             /* Hilite the player with the cursor */
	bool view_yellow_lite = false;          /* Use special colors for torch-lit grids */
	bool view_bright_lite = false;          /* Use special colors for 'viewable' grids */
	bool view_granite_lite = false;         /* Use special colors for wall grids (slow) */
	bool view_special_lite = false;         /* Use special colors for floor grids (slow) */
	bool center_player = false;             /* Center view on player */

	//
	// Option Set 5 - ToME options
	//
	bool ingame_help = true;                /* In-game contextual help? */
	bool auto_more = false;                 /* Auto more */
	bool player_char_health = true;         /* Display the player as a special symbol when in bad health ? */
	bool linear_stats = true;

	//
	// Option Set 6 - Birth options
	//
	bool preserve = true;                   /* Preserve artifacts */
	bool autoroll = true;                   /* Specify 'minimal' stats to roll */
	bool point_based = false;		 /* Generate character using a point system */
	bool ironman_rooms = false;		 /* Always generate very unusual rooms */
	bool joke_monsters = false;		 /* Allow 'joke' monsters */
	bool always_small_level = false;	 /* Force small levels */
	bool fate_option = true;		 /* Player can receive fates */
	bool no_selling = false;		 /* Player cannot sell items */

	//
	// Other options
	//

	bool cheat_peek = false;                /* Peek into object creation */
	bool cheat_hear = false;                /* Peek into monster creation */
	bool cheat_room = false;                /* Peek into dungeon creation */
	bool cheat_xtra = false;                /* Peek into something else */
	bool cheat_live = false;                /* Allow player to avoid death */

	byte hitpoint_warn = 0;                  /* Hitpoint warning (0 to 9) */

	byte delay_factor = 0;                   /* Delay factor (0 to 9) */

	s16b autosave_freq = 100;                /* Autosave frequency */
	bool autosave_t = false;                /* Timed autosave */
	bool autosave_l = false;                /* Autosave before entering new levels */

	/**
	 * Option groups
	 */
	std::vector<option_type> standard_options = {
	        // User-Interface
	        { &rogue_like_commands, 1,  0, "rogue_like_commands", "Rogue-like commands" },
	        { &quick_messages     , 1,  1, "quick_messages"     , "Activate quick messages" },
	        { &carry_query_flag   , 1,  3, "carry_query_flag"   , "Prompt before picking things up" },
	        { &use_old_target     , 1,  4, "use_old_target"     , "Use old target by default" },
	        { &always_pickup      , 1,  5, "always_pickup"      , "Pick things up by default" },
	        { &always_repeat      , 1,  7, "always_repeat"      , "Repeat obvious commands" },
	        { &ring_bell          , 1, 18, "ring_bell"          , "Audible bell (on errors, etc)" },
	        // Disturbance
	        { &find_ignore_stairs , 2,  0, "find_ignore_stairs" , "Run past stairs" },
	        { &find_ignore_doors  , 2,  1, "find_ignore_doors"  , "Run through open doors" },
	        { &find_cut           , 2,  2, "find_cut"           , "Run past known corners" },
	        { &find_examine       , 2,  3, "find_examine"       , "Run into potential corners" },
	        { &disturb_move       , 2,  4, "disturb_move"       , "Disturb whenever any monster moves" },
	        { &disturb_near       , 2,  5, "disturb_near"       , "Disturb whenever viewable monster moves" },
	        { &disturb_panel      , 2,  6, "disturb_panel"      , "Disturb whenever map panel changes" },
	        { &disturb_state      , 2,  7, "disturb_state"      , "Disturb whenever player state changes" },
	        { &disturb_minor      , 2,  8, "disturb_minor"      , "Disturb whenever boring things happen" },
	        { &disturb_other      , 2,  9, "disturb_other"      , "Disturb whenever random things happen" },
	        { &last_words         , 2, 12, "last_words"         , "Get last words when the character dies" },
	        { &wear_confirm       , 2, 15, "confirm_wear"       , "Confirm to wear/wield known cursed items" },
	        { &confirm_stairs     , 2, 16, "confirm_stairs"     , "Prompt before exiting a dungeon level" },
	        { &disturb_pets       , 2, 17, "disturb_pets"       , "Disturb when visible pets move" },
	        // Game-Play
	        { &auto_scum          , 3,  1, "auto_scum"          , "Auto-scum for good levels" },
	        { &view_perma_grids   , 3,  6, "view_perma_grids"   , "Map remembers all perma-lit grids" },
	        { &view_torch_grids   , 3,  7, "view_torch_grids"   , "Map remembers all torch-lit grids" },
	        { &dungeon_align      , 3,  8, "dungeon_align"      , "Generate dungeons with aligned rooms" },
	        { &dungeon_stair      , 3,  9, "dungeon_stair"      , "Generate dungeons with connected stairs" },
	        { &flow_by_sound      , 3, 10, "flow_by_sound"      , "Monsters chase current location (v.slow)" },
	        { &smart_learn        , 3, 14, "smart_learn"        , "Monsters learn from their mistakes" },
	        { &small_levels       , 3, 17, "small_levels"       , "Allow unusually small dungeon levels" },
	        { &empty_levels       , 3, 18, "empty_levels"       , "Allow empty 'arena' levels" },
	        // Efficiency
	        { &view_reduce_lite   , 4,  0, "view_reduce_lite"   , "Reduce lite-radius when running" },
	        { &avoid_abort        , 4,  2, "avoid_abort"        , "Avoid checking for user abort" },
	        { &avoid_shimmer      , 4, 17, "avoid_shimmer"      , "Avoid extra shimmering (fast)" },
	        { &avoid_other        , 4,  3, "avoid_other"        , "Avoid processing special colors (fast)" },
	        { &flush_failure      , 4,  4, "flush_failure"      , "Flush input on various failures" },
	        { &flush_disturb      , 4,  5, "flush_disturb"      , "Flush input whenever disturbed" },
	        { &flush_command      , 4,  6, "flush_command"      , "Flush input before every command" },
	        { &fresh_before       , 4,  7, "fresh_before"       , "Flush output before every command" },
	        { &fresh_after        , 4,  8, "fresh_after"        , "Flush output after every command" },
	        { &fresh_message      , 4,  9, "fresh_message"      , "Flush output after every message" },
	        { &hilite_player      , 4, 11, "hilite_player"      , "Hilite the player with the cursor" },
	        { &view_yellow_lite   , 4, 12, "view_yellow_lite"   , "Use special colors for torch-lit grids" },
	        { &view_bright_lite   , 4, 13, "view_bright_lite"   , "Use special colors for 'viewable' grids" },
	        { &view_granite_lite  , 4, 14, "view_granite_lite"  , "Use special colors for wall grids (slow)" },
	        { &view_special_lite  , 4, 15, "view_special_lite"  , "Use special colors for floor grids (slow)" },
	        { &center_player      , 4, 16, "center_player"      , "Center the view on the player (very slow)" },
	        // ToME options
	        { &ingame_help        , 5,  1, "ingame_help"        , "Ingame contextual help" },
	        { &auto_more          , 5,  4, "auto_more"          , "Automatically clear '-more-' prompts" },
	        { &player_char_health , 5,  6, "player_char_health" , "Player char represent his/her health" },
	        { &linear_stats       , 5,  7, "linear_stats"       , "Stats are represented in a linear way" },
	        // Birth Options
	        { &preserve           , 6,  2, "preserve"           , "Preserve artifacts" },
	        { &autoroll           , 6,  3, "autoroll"           , "Specify 'minimal' stats" },
	        { &point_based        , 6, 17, "point_based"        , "Generate character using a point system" },
	        { &ironman_rooms      , 6,  6, "ironman_rooms"      , "Always generate very unusual rooms" },
	        { &joke_monsters      , 6, 14, "joke_monsters"      , "Allow use of some 'joke' monsters" },
	        { &always_small_level , 6, 16, "always_small_level" , "Always make small levels" },
	        { &fate_option        , 6, 18, "fate_option"        , "You can receive fates, good or bad" },
	        { &no_selling         , 6, 20, "no_selling"         , "Items always sell for 0 gold" },
	};

	/*
	 * Cheating options
	 */
	std::vector<option_type> cheat_options = {
	        { &cheat_peek, 0, 0, "cheat_peek", "Peek into object creation" },
	        { &cheat_hear, 0, 1, "cheat_hear", "Peek into monster creation" },
	        { &cheat_room, 0, 2, "cheat_room", "Peek into dungeon creation" },
	        { &cheat_xtra, 0, 3, "cheat_xtra", "Peek into something else" },
	        { &cheat_live, 0, 5, "cheat_live", "Allow player to avoid death" },
        };

	/**
	 * Autosave boolean options
	 */
	std::vector<option_type> autosave_options {
		{ &autosave_l, 0, 6, "autosave_l", "Autosave when entering new levels" },
		{ &autosave_t, 0, 7, "autosave_t", "Timed autosave" }
        };

	/*
	 * Reset cheat options
	 */
	void reset_cheat_options();

	/**
	 * Convert delay_factor to milliseconds
	 */
	int delay_factor_ms() const
	{
		return delay_factor * delay_factor * delay_factor;
	}

};