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