1 /*	SCCS Id: @(#)flag.h	3.4	2002/08/22	*/
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* NetHack may be freely redistributed.  See license for details. */
4 
5 /* If you change the flag structure make sure you increment EDITLEVEL in   */
6 /* patchlevel.h if needed.  Changing the instance_flags structure does	   */
7 /* not require incrementing EDITLEVEL.					   */
8 
9 #ifndef FLAG_H
10 #define FLAG_H
11 
12 /*
13  * Persistent flags that are saved and restored with the game.
14  *
15  */
16 
17 struct flag {
18 #ifdef AMIFLUSH
19 	boolean  altmeta;	/* use ALT keys as META */
20 	boolean  amiflush;	/* kill typeahead */
21 #endif
22 #ifdef	MFLOPPY
23 	boolean  asksavedisk;
24 #endif
25 	boolean  autodig;       /* MRKR: Automatically dig */
26 	boolean  autoquiver;	/* Automatically fill quiver */
27 	boolean  beginner;
28 #ifdef MAIL
29 	boolean  biff;		/* enable checking for mail */
30 #endif
31 	boolean  botl;		/* partially redo status line */
32 	boolean  botlx;		/* print an entirely new bottom line */
33 	boolean  confirm;	/* confirm before hitting tame monsters */
34 	boolean  debug;		/* in debugging mode */
35 #define wizard	 flags.debug
36 	boolean  end_own;	/* list all own scores */
37 	boolean  explore;	/* in exploration mode */
38 #ifdef OPT_DISPMAP
39 	boolean  fast_map;	/* use optimized, less flexible map display */
40 #endif
41 #define discover flags.explore
42 	boolean  female;
43 	boolean  forcefight;
44 	boolean  friday13;	/* it's Friday the 13th */
45 	boolean  groundhogday;	/* KMH -- February 2 */
46 	boolean  help;		/* look in data file for info about stuff */
47 	boolean  ignintr;	/* ignore interrupts */
48 #ifdef INSURANCE
49 	boolean  ins_chkpt;	/* checkpoint as appropriate */
50 #endif
51 	boolean  invlet_constant; /* let objects keep their inventory symbol */
52 #ifdef SHOW_WEIGHT
53 	boolean  invweight;    /* show weight in inventory and when picking up */
54 #endif
55 
56 /*WAC keep_save option*/
57 #ifdef KEEP_SAVE
58 	boolean  keep_savefile; /* Keep Old Save files*/
59 #endif
60 	boolean  legacy;	/* print game entry "story" */
61 	boolean  lit_corridor;	/* show a dark corr as lit if it is in sight */
62 	boolean  made_amulet;
63 	boolean  menu_on_esc;	/* show menu when hitting esc */
64 	boolean  mon_moving;	/* monsters' turn to move */
65 	boolean  move;
66 	boolean  mv;
67 	boolean  bypasses;	/* bypass flag is set on at least one fobj */
68 	boolean  nap;		/* `timed_delay' option for display effects */
69 	boolean  nopick;	/* do not pickup objects (as when running) */
70 	boolean  null;		/* OK to send nulls to the terminal */
71 #ifdef MAC
72 	boolean  page_wait;	/* put up a --More-- after a page of messages */
73 #endif
74 	boolean  perm_invent;	/* keep full inventories up until dismissed */
75 	boolean  pickup;	/* whether you pickup or move and look */
76 	boolean  pickup_thrown;		/* auto-pickup items you threw */
77 
78 	boolean  pushweapon;	/* When wielding, push old weapon into second slot */
79 	boolean  rest_on_space; /* space means rest */
80 	boolean  safe_dog;	/* give complete protection to the dog */
81 #ifdef EXP_ON_BOTL
82 	boolean  showexp;	/* show experience points */
83 #endif
84 #ifdef SCORE_ON_BOTL
85 	boolean  showscore;	/* show score */
86 #endif
87 #ifdef SHOW_DMG
88 	boolean  showdmg;       /* show damage */
89 #endif
90 #ifdef SHOW_WEIGHT
91 	boolean  showweight;    /* show weight on status line */
92 #endif
93 	boolean  silent;	/* whether the bell rings or not */
94 	boolean  sortpack;	/* sorted inventory */
95 	boolean  soundok;	/* ok to tell about sounds heard */
96 	boolean  sparkle;	/* show "resisting" special FX (Scott Bigham) */
97 	boolean  standout;	/* use standout for --More-- */
98 	boolean  time;		/* display elapsed 'time' */
99 	boolean  tombstone;	/* print tombstone */
100 	boolean  toptenwin;	/* ending list in window instead of stdout */
101 	boolean  verbose;	/* max battle info */
102 	boolean  prayconfirm;	/* confirm before praying */
103 	int	 end_top, end_around;	/* describe desired score list */
104 	unsigned ident;		/* social security number for each monster */
105 	unsigned moonphase;
106 	unsigned long suppress_alert;
107 #define NEW_MOON	0
108 #define FULL_MOON	4
109 	unsigned no_of_wizards; /* 0, 1 or 2 (wizard and his shadow) */
110 	boolean  travel;        /* find way automatically to u.tx,u.ty */
111 	unsigned run;		/* 0: h (etc), 1: H (etc), 2: fh (etc) */
112 				/* 3: FH, 4: ff+, 5: ff-, 6: FF+, 7: FF- */
113 				/* 8: travel */
114 	unsigned long warntype; /* warn_of_mon monster type M2 */
115 	int	 warnlevel;
116 	int	 djinni_count, ghost_count;	/* potion effect tuning */
117 	int	 pickup_burden;		/* maximum burden before prompt */
118 	/* KMH, role patch -- Variables used during startup.
119 	 *
120 	 * If the user wishes to select a role, race, gender, and/or alignment
121 	 * during startup, the choices should be recorded here.  This
122 	 * might be specified through command-line options, environmental
123 	 * variables, a popup dialog box, menus, etc.
124 	 *
125 	 * These values are each an index into an array.  They are not
126 	 * characters or letters, because that limits us to 26 roles.
127 	 * They are not booleans, because someday someone may need a neuter
128 	 * gender.  Negative values are used to indicate that the user
129 	 * hasn't yet specified that particular value.	If you determine
130 	 * that the user wants a random choice, then you should set an
131 	 * appropriate random value; if you just left the negative value,
132 	 * the user would be asked again!
133 	 *
134 	 * These variables are stored here because the u structure is
135 	 * cleared during character initialization, and because the
136 	 * flags structure is restored for saved games.  Thus, we can
137 	 * use the same parameters to build the role entry for both
138 	 * new and restored games.
139 	 *
140 	 * These variables should not be referred to after the character
141 	 * is initialized or restored (specifically, after role_init()
142 	 * is called).
143 	 */
144 	int	 initrole;	/* starting role      (index into roles[])   */
145 	int	 initrace;	/* starting race      (index into races[])   */
146 	int	 initgend;	/* starting gender    (index into genders[]) */
147 	int	 initalign;	/* starting alignment (index into aligns[])  */
148 	int	 randomall;	/* randomly assign everything not specified */
149 	int	 pantheon;	/* deity selection for priest character */
150 	/* KMH, balance patch */
151 	int      boot_count; /* boots from fishing pole */
152 	char	 inv_order[MAXOCLASSES];
153 	char	 pickup_types[MAXOCLASSES];
154 #define NUM_DISCLOSURE_OPTIONS         5
155 #define DISCLOSE_PROMPT_DEFAULT_YES    'y'
156 #define DISCLOSE_PROMPT_DEFAULT_NO     'n'
157 #define DISCLOSE_YES_WITHOUT_PROMPT    '+'
158 #define DISCLOSE_NO_WITHOUT_PROMPT     '-'
159 	char     end_disclose[NUM_DISCLOSURE_OPTIONS + 1];  /* disclose various info
160 							       upon exit */
161 	char	 menu_style;	/* User interface style setting */
162 #ifdef AMII_GRAPHICS
163 	int numcols;
164 	unsigned short amii_dripens[ 20 ]; /* DrawInfo Pens currently there are 13 in v39 */
165 	AMII_COLOR_TYPE amii_curmap[ AMII_MAXCOLORS ]; /* colormap */
166 #endif
167 };
168 
169 /*
170  * Flags that are set each time the game is started.
171  * These are not saved with the game.
172  *
173  */
174 
175 struct instance_flags {
176 	boolean  cbreak;	/* in cbreak mode, rogue format */
177 	boolean  DECgraphics;	/* use DEC VT-xxx extended character set */
178 	boolean  echo;		/* 1 to echo characters */
179 	boolean  IBMgraphics;	/* use IBM extended character set */
180 	unsigned msg_history;	/* hint: # of top lines to save */
181 	boolean  num_pad;	/* use numbers for movement commands */
182 	boolean  news;		/* print news */
183 	boolean  window_inited; /* true if init_nhwindows() completed */
184 	boolean  vision_inited; /* true if vision is ready */
185 	boolean  menu_tab_sep;	/* Use tabs to separate option menu fields */
186 	boolean  menu_requested; /* Flag for overloaded use of 'm' prefix
187 				  * on some non-move commands */
188 	uchar num_pad_mode;
189 	int	menu_headings;	/* ATR for menu headings */
190 	int	purge_monsters;	/* # of dead monsters still on fmon list */
191 	int	*opt_booldup;	/* for duplication of boolean opts in config file */
192 	int	*opt_compdup;	/* for duplication of compound opts in config file */
193 	uchar	bouldersym;	/* symbol for boulder display */
194 	boolean	travel1;	/* first travel step */
195 	coord	travelcc;	/* coordinates for travel_cache */
196 #ifdef WIZARD
197 	boolean  sanity_check;	/* run sanity checks */
198 	boolean  mon_polycontrol;	/* debug: control monster polymorphs */
199 #endif
200 #ifdef TTY_GRAPHICS
201 	char prevmsg_window;	/* type of old message window to use */
202 	boolean  extmenu;	/* extended commands use menu interface */
203 #endif
204 #ifdef MENU_COLOR
205         boolean use_menu_color; /* use color in menus; only if wc_color */
206 #endif
207 #ifdef MFLOPPY
208 	boolean  checkspace;	/* check disk space before writing files */
209 				/* (in iflags to allow restore after moving
210 				 * to >2GB partition) */
211 #endif
212 #ifdef MICRO
213 	boolean  BIOS;		/* use IBM or ST BIOS calls when appropriate */
214 #endif
215 #if defined(MICRO) || defined(WIN32)
216 	boolean  rawio;		/* whether can use rawio (IOCTL call) */
217 #endif
218 #ifdef MAC_GRAPHICS_ENV
219 	boolean  MACgraphics;	/* use Macintosh extended character set, as
220 				   as defined in the special font HackFont */
221 	unsigned  use_stone;		/* use the stone ppats */
222 #endif
223 #if defined(MSDOS) || defined(WIN32)
224 	boolean hassound;	/* has a sound card */
225 	boolean usesound;	/* use the sound card */
226 	boolean usepcspeaker;	/* use the pc speaker */
227 	boolean tile_view;
228 	boolean over_view;
229 	boolean traditional_view;
230 #endif
231 #ifdef MSDOS
232 	boolean	hasalleg;	/* has a Allegor compatible adapter  */
233 	boolean usealleg;	/* use the Allegro library           */
234 	boolean hasvga;		/* has a vga adapter */
235 	boolean usevga;		/* use the vga adapter */
236 	boolean grmode;		/* currently in graphics mode */
237 #endif
238 #ifdef LAN_FEATURES
239 	boolean lan_mail;	/* mail is initialized */
240 	boolean lan_mail_fetched; /* mail is awaiting display */
241 #endif
242 /*
243  * Window capability support.
244  */
245 	boolean wc_color;		/* use color graphics                  */
246 	boolean wc_hilite_pet;		/* hilight pets                        */
247 	boolean wc_ascii_map;		/* show map using traditional ascii    */
248 	boolean wc_tiled_map;		/* show map using tiles                */
249 	boolean wc_preload_tiles;	/* preload tiles into memory           */
250 	int	wc_tile_width;		/* tile width                          */
251 	int	wc_tile_height;		/* tile height                         */
252 	char	*wc_tile_file;		/* name of tile file;overrides default */
253 	boolean wc_inverse;		/* use inverse video for some things   */
254 	int	wc_align_status;	/*  status win at top|bot|right|left   */
255 	int	wc_align_message;	/* message win at top|bot|right|left   */
256 	int     wc_vary_msgcount;	/* show more old messages at a time    */
257 	char    *wc_foregrnd_menu;	/* points to foregrnd color name for menu win   */
258 	char    *wc_backgrnd_menu;	/* points to backgrnd color name for menu win   */
259 	char    *wc_foregrnd_message;	/* points to foregrnd color name for msg win    */
260 	char    *wc_backgrnd_message;	/* points to backgrnd color name for msg win    */
261 	char    *wc_foregrnd_status;	/* points to foregrnd color name for status win */
262 	char    *wc_backgrnd_status;	/* points to backgrnd color name for status win */
263 	char    *wc_foregrnd_text;	/* points to foregrnd color name for text win   */
264 	char    *wc_backgrnd_text;	/* points to backgrnd color name for text win   */
265 	char    *wc_font_map;		/* points to font name for the map win */
266 	char    *wc_font_message;	/* points to font name for message win */
267 	char    *wc_font_status;	/* points to font name for status win  */
268 	char    *wc_font_menu;		/* points to font name for menu win    */
269 	char    *wc_font_text;		/* points to font name for text win    */
270 	int     wc_fontsiz_map;		/* font size for the map win           */
271 	int     wc_fontsiz_message;	/* font size for the message window    */
272 	int     wc_fontsiz_status;	/* font size for the status window     */
273 	int     wc_fontsiz_menu;	/* font size for the menu window       */
274 	int     wc_fontsiz_text;	/* font size for text windows          */
275 	int	wc_scroll_amount;	/* scroll this amount at scroll_margin */
276 	int	wc_scroll_margin;	/* scroll map when this far from
277 						the edge */
278 	int	wc_map_mode;		/* specify map viewing options, mostly
279 						for backward compatibility */
280 	int	wc_player_selection;	/* method of choosing character */
281 	boolean	wc_splash_screen;	/* display an opening splash screen or not */
282 	boolean	wc_popup_dialog;	/* put queries in pop up dialogs instead of
283 				   		in the message window */
284 	boolean wc_eight_bit_input;	/* allow eight bit input               */
285 	boolean wc_mouse_support;	/* allow mouse support */
286 	boolean wc2_fullscreen;		/* run fullscreen */
287 	boolean wc2_softkeyboard;	/* use software keyboard */
288 	boolean wc2_wraptext;		/* wrap text */
289 
290 	boolean  cmdassist;	/* provide detailed assistance for some commands */
291 	boolean	 obsolete;	/* obsolete options can point at this, it isn't used */
292 	/* Items which belong in flags, but are here to allow save compatibility */
293 	boolean  lootabc;	/* use "a/b/c" rather than "o/i/b" when looting */
294 	boolean  showrace;	/* show hero glyph by race rather than by role */
295 	boolean  travelcmd;	/* allow travel command */
296 	int	 runmode;	/* update screen display during run moves */
297 #ifdef AUTOPICKUP_EXCEPTIONS
298 	struct autopickup_exception *autopickup_exceptions[2];
299 #define AP_LEAVE 0
300 #define AP_GRAB	 1
301 #endif
302 #ifdef WIN32CON
303 #define MAX_ALTKEYHANDLER 25
304 	char	 altkeyhandler[MAX_ALTKEYHANDLER];
305 #endif
306 };
307 
308 /*
309  * Old deprecated names
310  */
311 #ifdef TTY_GRAPHICS
312 #define eight_bit_tty wc_eight_bit_input
313 #endif
314 #ifdef TEXTCOLOR
315 #define use_color wc_color
316 #endif
317 #define hilite_pet wc_hilite_pet
318 #define use_inverse wc_inverse
319 #ifdef MAC_GRAPHICS_ENV
320 #define large_font obsolete
321 #endif
322 #ifdef MAC
323 #define popup_dialog wc_popup_dialog
324 #endif
325 #define preload_tiles wc_preload_tiles
326 
327 extern NEARDATA struct flag flags;
328 extern NEARDATA struct instance_flags iflags;
329 
330 /* runmode options */
331 #define RUN_TPORT	0	/* don't update display until movement stops */
332 #define RUN_LEAP	1	/* update display every 7 steps */
333 #define RUN_STEP	2	/* update display every single step */
334 #define RUN_CRAWL	3	/* walk w/ extra delay after each update */
335 
336 #endif /* FLAG_H */
337