1 /* NetHack 3.7 flag.h $NHDT-Date: 1600933440 2020/09/24 07:44:00 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.185 $ */ 2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3 /*-Copyright (c) Michael Allison, 2006. */ 4 /* NetHack may be freely redistributed. See license for details. */ 5 6 /* If you change the flag structure make sure you increment EDITLEVEL in */ 7 /* patchlevel.h if needed. Changing the instance_flags structure does */ 8 /* not require incrementing EDITLEVEL. */ 9 10 #ifndef FLAG_H 11 #define FLAG_H 12 13 /* 14 * Persistent flags that are saved and restored with the game. 15 * 16 */ 17 18 struct flag { 19 boolean acoustics; /* allow dungeon sound messages */ 20 boolean autodig; /* MRKR: Automatically dig */ 21 boolean autoquiver; /* Automatically fill quiver */ 22 boolean autoopen; /* open doors by walking into them */ 23 boolean autounlock; /* automatically apply unlocking tools */ 24 boolean beginner; /* True early in each game; affects feedback */ 25 boolean biff; /* enable checking for mail */ 26 boolean bones; /* allow saving/loading bones */ 27 boolean confirm; /* confirm before hitting tame monsters */ 28 boolean dark_room; /* show shadows in lit rooms */ 29 boolean debug; /* in debugging mode (aka wizard mode) */ 30 #define wizard flags.debug 31 boolean end_own; /* list all own scores */ 32 boolean explore; /* in exploration mode (aka discover mode) */ 33 #define discover flags.explore 34 boolean female; 35 xchar orientation; /* index into orientations[] */ 36 #define ORIENT_STRAIGHT 0 37 #define ORIENT_GAY 1 38 #define ORIENT_BISEXUAL 2 39 boolean friday13; /* it's Friday the 13th */ 40 boolean goldX; /* for BUCX filtering, whether gold is X or U */ 41 boolean help; /* look in data file for info about stuff */ 42 boolean ignintr; /* ignore interrupts */ 43 boolean implicit_uncursed; /* maybe omit "uncursed" status in inventory */ 44 boolean ins_chkpt; /* checkpoint as appropriate; INSURANCE */ 45 boolean invlet_constant; /* let objects keep their inventory symbol */ 46 boolean legacy; /* print game entry "story" */ 47 boolean lit_corridor; /* show a dark corr as lit if it is in sight */ 48 boolean mention_decor; /* give feedback for unobscured furniture */ 49 boolean mention_walls; /* give feedback when bumping walls */ 50 boolean nap; /* `timed_delay' option for display effects */ 51 boolean null; /* OK to send nulls to the terminal */ 52 boolean pickup; /* whether you pickup or move and look */ 53 boolean pickup_thrown; /* auto-pickup items you threw */ 54 boolean pushweapon; /* When wielding, push old weapon into second slot */ 55 boolean quick_farsight; /* True disables map browsing during random 56 * clairvoyance */ 57 boolean rest_on_space; /* space means rest */ 58 boolean safe_dog; /* give complete protection to the dog */ 59 boolean safe_wait; /* prevent wait or search next to hostile */ 60 boolean showexp; /* show experience points */ 61 boolean showscore; /* show score */ 62 boolean silent; /* whether the bell rings or not */ 63 boolean sortpack; /* sorted inventory */ 64 boolean sparkle; /* show "resisting" special FX (Scott Bigham) */ 65 boolean standout; /* use standout for --More-- */ 66 boolean time; /* display elapsed 'time' */ 67 boolean tombstone; /* print tombstone */ 68 boolean verbose; /* max battle info */ 69 int end_top, end_around; /* describe desired score list */ 70 unsigned moonphase; 71 unsigned long suppress_alert; 72 #define NEW_MOON 0 73 #define FULL_MOON 4 74 unsigned paranoia_bits; /* alternate confirmation prompting */ 75 #define PARANOID_CONFIRM 0x0001 76 #define PARANOID_QUIT 0x0002 77 #define PARANOID_DIE 0x0004 78 #define PARANOID_BONES 0x0008 79 #define PARANOID_HIT 0x0010 80 #define PARANOID_PRAY 0x0020 81 #define PARANOID_REMOVE 0x0040 82 #define PARANOID_BREAKWAND 0x0080 83 #define PARANOID_WERECHANGE 0x0100 84 #define PARANOID_EATING 0x0200 85 #define PARANOID_SWIM 0x0400 86 #define PARANOID_TRAP 0x0800 87 #define PARANOID_THROW 0x1000 88 int pickup_burden; /* maximum burden before prompt */ 89 int pile_limit; /* controls feedback when walking over objects */ 90 char discosort; /* order of dodiscovery/doclassdisco output: o,s,c,a */ 91 char sortloot; /* 'n'=none, 'l'=loot (pickup), 'f'=full ('l'+invent) */ 92 char inv_order[MAXOCLASSES]; 93 char pickup_types[MAXOCLASSES]; 94 #define NUM_DISCLOSURE_OPTIONS 6 /* i,a,v,g,c,o (decl.c) */ 95 #define DISCLOSE_PROMPT_DEFAULT_YES 'y' 96 #define DISCLOSE_PROMPT_DEFAULT_NO 'n' 97 #define DISCLOSE_PROMPT_DEFAULT_SPECIAL '?' /* v, default a */ 98 #define DISCLOSE_YES_WITHOUT_PROMPT '+' 99 #define DISCLOSE_NO_WITHOUT_PROMPT '-' 100 #define DISCLOSE_SPECIAL_WITHOUT_PROMPT '#' /* v, use a */ 101 char end_disclose[NUM_DISCLOSURE_OPTIONS + 1]; /* disclose various 102 info upon exit */ 103 char menu_style; /* User interface style setting */ 104 boolean made_fruit; /* don't easily let user overflow fruit limit */ 105 106 /* KMH, role patch -- Variables used during startup. 107 * 108 * If the user wishes to select a role, race, gender, and/or alignment 109 * during startup, the choices should be recorded here. This 110 * might be specified through command-line options, environmental 111 * variables, a popup dialog box, menus, etc. 112 * 113 * These values are each an index into an array. They are not 114 * characters or letters, because that limits us to 26 roles. 115 * They are not booleans, because someday someone may need a neuter 116 * gender. Negative values are used to indicate that the user 117 * hasn't yet specified that particular value. If you determine 118 * that the user wants a random choice, then you should set an 119 * appropriate random value; if you just left the negative value, 120 * the user would be asked again! 121 * 122 * These variables are stored here because the u structure is 123 * cleared during character initialization, and because the 124 * flags structure is restored for saved games. Thus, we can 125 * use the same parameters to build the role entry for both 126 * new and restored games. 127 * 128 * These variables should not be referred to after the character 129 * is initialized or restored (specifically, after role_init() 130 * is called). 131 */ 132 int initrole; /* starting role (index into roles[]) */ 133 int initrace; /* starting race (index into races[]) */ 134 int initgend; /* starting gender (index into genders[]) */ 135 int initalign; /* starting alignment (index into aligns[]) */ 136 int randomall; /* randomly assign everything not specified */ 137 int pantheon; /* deity selection for priest character */ 138 int polyinit_mnum; /* polyinit to this monster, -1 = no polyinit */ 139 /* Items which were in iflags in 3.4.x to preserve savefile compatibility 140 */ 141 boolean lootabc; /* use "a/b/c" rather than "o/i/b" when looting */ 142 boolean showrace; /* show hero glyph by race rather than by role */ 143 boolean travelcmd; /* allow travel command */ 144 int runmode; /* update screen display during run moves */ 145 }; 146 147 /* 148 * Flags that are set each time the game is started. 149 * These are not saved with the game. 150 * 151 */ 152 153 /* values for iflags.getpos_coords */ 154 #define GPCOORDS_NONE 'n' 155 #define GPCOORDS_MAP 'm' 156 #define GPCOORDS_COMPASS 'c' 157 #define GPCOORDS_COMFULL 'f' 158 #define GPCOORDS_SCREEN 's' 159 160 enum getloc_filters { 161 GFILTER_NONE = 0, 162 GFILTER_VIEW, 163 GFILTER_AREA, 164 165 NUM_GFILTER 166 }; 167 168 struct debug_flags { 169 boolean test; 170 #ifdef TTY_GRAPHICS 171 boolean ttystatus; 172 #endif 173 #ifdef WIN32 174 boolean immediateflips; 175 #endif 176 }; 177 178 struct instance_flags { 179 /* stuff that really isn't option or platform related. They are 180 * set and cleared during the game to control the internal 181 * behaviour of various NetHack functions and probably warrant 182 * a structure of their own elsewhere some day. 183 */ 184 boolean debug_fuzzer; /* fuzz testing */ 185 boolean in_lua; /* executing a lua script */ 186 boolean defer_plname; /* X11 hack: askname() might not set g.plname */ 187 boolean herecmd_menu; /* use menu when mouseclick on yourself */ 188 boolean invis_goldsym; /* gold symbol is ' '? */ 189 boolean sad_feeling; /* unseen pet is dying */ 190 int at_midnight; /* only valid during end of game disclosure */ 191 int at_night; /* also only valid during end of game disclosure */ 192 int failing_untrap; /* move_into_trap() -> spoteffects() -> dotrap() */ 193 int in_lava_effects; /* hack for Boots_off() */ 194 int last_msg; /* indicator of last message player saw */ 195 int override_ID; /* true to force full identification of objects */ 196 int parse_config_file_src; /* hack for parse_config_line() */ 197 int purge_monsters; /* # of dead monsters still on fmon list */ 198 int suppress_price; /* controls doname() for unpaid objects */ 199 int terrainmode; /* for getpos()'s autodescribe when #terrain is active */ 200 #define TER_MAP 0x01 201 #define TER_TRP 0x02 202 #define TER_OBJ 0x04 203 #define TER_MON 0x08 204 #define TER_DETECT 0x10 /* detect_foo magic rather than #terrain */ 205 boolean getloc_travelmode; 206 int getloc_filter; /* GFILTER_foo */ 207 boolean getloc_usemenu; 208 boolean getloc_moveskip; 209 coord travelcc; /* coordinates for travel_cache */ 210 boolean trav_debug; /* display travel path (#if DEBUG only) */ 211 boolean window_inited; /* true if init_nhwindows() completed */ 212 boolean vision_inited; /* true if vision is ready */ 213 boolean sanity_check; /* run sanity checks */ 214 boolean mon_polycontrol; /* debug: control monster polymorphs */ 215 boolean in_dumplog; /* doing the dumplog right now? */ 216 boolean in_parse; /* is a command being parsed? */ 217 /* suppress terminate during options parsing, for --showpaths */ 218 boolean initoptions_noterminate; 219 220 /* stuff that is related to options and/or user or platform preferences 221 */ 222 unsigned msg_history; /* hint: # of top lines to save */ 223 int getpos_coords; /* show coordinates when getting cursor position */ 224 int menuinvertmode; /* 0 = invert toggles every item; 225 1 = invert skips 'all items' item */ 226 int menu_headings; /* ATR for menu headings */ 227 #ifdef ALTMETA 228 boolean altmeta; /* Alt-c sends ESC c rather than M-c */ 229 #endif 230 boolean autodescribe; /* autodescribe mode in getpos() */ 231 boolean cbreak; /* in cbreak mode, rogue format */ 232 boolean deferred_X; /* deferred entry into explore mode */ 233 boolean defer_decor; /* terrain change message vs slipping on ice */ 234 boolean echo; /* 1 to echo characters */ 235 boolean force_invmenu; /* always menu when handling inventory */ 236 boolean hilite_pile; /* mark piles of objects with a hilite */ 237 boolean hilite_hidden_stairs; /* mark hidden stairs with a hilite */ 238 boolean menu_head_objsym; /* Show obj symbol in menu headings */ 239 boolean menu_overlay; /* Draw menus over the map */ 240 boolean menu_requested; /* Flag for overloaded use of 'm' prefix 241 * on some non-move commands */ 242 boolean menu_tab_sep; /* Use tabs to separate option menu fields */ 243 boolean news; /* print news */ 244 boolean num_pad; /* use numbers for movement commands */ 245 boolean perm_invent; /* keep full inventories up until dismissed */ 246 boolean renameallowed; /* can change hero name during role selection */ 247 boolean renameinprogress; /* we are changing hero name */ 248 boolean status_updates; /* allow updates to bottom status lines; 249 * disable to avoid excessive noise when using 250 * a screen reader (use ^X to review status) */ 251 boolean toptenwin; /* ending list in window instead of stdout */ 252 boolean tux_penalty; /* True iff hero is a monk and wearing a suit */ 253 boolean use_background_glyph; /* use background glyph when appropriate */ 254 boolean use_menu_color; /* use color in menus; only if wc_color */ 255 #ifdef STATUS_HILITES 256 long hilite_delta; /* number of moves to leave a temp hilite lit */ 257 long unhilite_deadline; /* time when oldest temp hilite should be unlit */ 258 #endif 259 boolean zerocomp; /* write zero-compressed save files */ 260 boolean rlecomp; /* alternative to zerocomp; run-length encoding 261 * compression of levels when writing savefile */ 262 schar prev_decor; /* 'mention_decor' just mentioned this */ 263 uchar num_pad_mode; 264 uchar bouldersym; /* symbol for boulder display */ 265 char prevmsg_window; /* type of old message window to use */ 266 boolean extmenu; /* extended commands use menu interface */ 267 #ifdef MICRO 268 boolean BIOS; /* use IBM or ST BIOS calls when appropriate */ 269 #endif 270 #if defined(MICRO) || defined(WIN32) 271 boolean rawio; /* whether can use rawio (IOCTL call) */ 272 #endif 273 #ifdef MAC_GRAPHICS_ENV 274 boolean MACgraphics; /* use Macintosh extended character set, as 275 as defined in the special font HackFont */ 276 unsigned use_stone; /* use the stone ppats */ 277 #endif 278 #if defined(MSDOS) || defined(WIN32) 279 boolean hassound; /* has a sound card */ 280 boolean usesound; /* use the sound card */ 281 boolean usepcspeaker; /* use the pc speaker */ 282 boolean tile_view; 283 boolean over_view; 284 boolean traditional_view; 285 #endif 286 #ifdef MSDOS 287 boolean hasvga; /* has a vga adapter */ 288 boolean usevga; /* use the vga adapter */ 289 boolean hasvesa; /* has a VESA-capable VGA adapter */ 290 boolean usevesa; /* use the VESA-capable VGA adapter */ 291 boolean grmode; /* currently in graphics mode */ 292 #endif 293 #ifdef LAN_FEATURES 294 boolean lan_mail; /* mail is initialized */ 295 boolean lan_mail_fetched; /* mail is awaiting display */ 296 #endif 297 #ifdef TTY_TILES_ESCCODES 298 boolean vt_tiledata; /* output console codes for tile support in TTY */ 299 #endif 300 #ifdef TTY_SOUND_ESCCODES 301 boolean vt_sounddata; /* output console codes for sound support in TTY*/ 302 #endif 303 boolean clicklook; /* allow right-clicking for look */ 304 boolean cmdassist; /* provide detailed assistance for some comnds */ 305 boolean time_botl; /* context.botl for 'time' (moves) only */ 306 boolean wizmgender; /* test gender info from core in window port */ 307 boolean invweight; /* display weights of items in inventory */ 308 boolean msg_is_alert; /* suggest windowport should grab player's attention 309 * and request <TAB> acknowlegement */ 310 /* 311 * Window capability support. 312 */ 313 boolean wc_color; /* use color graphics */ 314 boolean wc_hilite_pet; /* hilight pets */ 315 boolean wc_underline_peacefuls; /* underline peaceful monsters */ 316 boolean wc_ascii_map; /* show map using traditional ascii */ 317 boolean wc_tiled_map; /* show map using tiles */ 318 boolean wc_preload_tiles; /* preload tiles into memory */ 319 int wc_tile_width; /* tile width */ 320 int wc_tile_height; /* tile height */ 321 char *wc_tile_file; /* name of tile file;overrides default */ 322 boolean wc_inverse; /* use inverse video for some things */ 323 int wc_align_status; /* status win at top|bot|right|left */ 324 int wc_align_message; /* message win at top|bot|right|left */ 325 int wc_vary_msgcount; /* show more old messages at a time */ 326 char *wc_foregrnd_menu; /* points to foregrnd color name for menu win */ 327 char *wc_backgrnd_menu; /* points to backgrnd color name for menu win */ 328 char *wc_foregrnd_message; /* points to foregrnd color name for msg win */ 329 char *wc_backgrnd_message; /* points to backgrnd color name for msg win */ 330 char *wc_foregrnd_status; /* points to foregrnd color name for status */ 331 char *wc_backgrnd_status; /* points to backgrnd color name for status */ 332 char *wc_foregrnd_text; /* points to foregrnd color name for text win */ 333 char *wc_backgrnd_text; /* points to backgrnd color name for text win */ 334 char *wc_font_map; /* points to font name for the map win */ 335 char *wc_font_message; /* points to font name for message win */ 336 char *wc_font_status; /* points to font name for status win */ 337 char *wc_font_menu; /* points to font name for menu win */ 338 char *wc_font_text; /* points to font name for text win */ 339 int wc_fontsiz_map; /* font size for the map win */ 340 int wc_fontsiz_message; /* font size for the message window */ 341 int wc_fontsiz_status; /* font size for the status window */ 342 int wc_fontsiz_menu; /* font size for the menu window */ 343 int wc_fontsiz_text; /* font size for text windows */ 344 int wc_scroll_amount; /* scroll this amount at scroll_margin */ 345 int wc_scroll_margin; /* scroll map when this far from the edge */ 346 int wc_map_mode; /* specify map viewing options, mostly 347 * for backward compatibility */ 348 int wc_player_selection; /* method of choosing character */ 349 #if defined(MSDOS) 350 unsigned wc_video_width; /* X resolution of screen */ 351 unsigned wc_video_height; /* Y resolution of screen */ 352 #endif 353 boolean wc_splash_screen; /* display an opening splash screen or not */ 354 boolean wc_popup_dialog; /* put queries in pop up dialogs instead of 355 * in the message window */ 356 boolean wc_eight_bit_input; /* allow eight bit input */ 357 boolean wc2_fullscreen; /* run fullscreen */ 358 boolean wc2_softkeyboard; /* use software keyboard */ 359 boolean wc2_wraptext; /* wrap text */ 360 boolean wc2_selectsaved; /* display a menu of user's saved games */ 361 boolean wc2_darkgray; /* try to use dark-gray color for black glyphs */ 362 boolean wc2_hitpointbar; /* show graphical bar representing hit points */ 363 boolean wc2_guicolor; /* allow colours in gui (outside map) */ 364 int wc_mouse_support; /* allow mouse support */ 365 int wc2_term_cols; /* terminal width, in characters */ 366 int wc2_term_rows; /* terminal height, in characters */ 367 int wc2_statuslines; /* default = 2, curses can handle 3 */ 368 int wc2_windowborders; /* display borders on NetHack windows */ 369 int wc2_petattr; /* text attributes for pet */ 370 #ifdef WIN32 371 #define MAX_ALTKEYHANDLER 25 372 char altkeyhandler[MAX_ALTKEYHANDLER]; 373 #endif 374 /* copies of values in struct u, used during detection when the 375 originals are temporarily cleared; kept here rather than 376 locally so that they can be restored during a hangup save */ 377 Bitfield(save_uswallow, 1); 378 Bitfield(save_uinwater, 1); 379 Bitfield(save_uburied, 1); 380 struct debug_flags debug; 381 boolean windowtype_locked; /* windowtype can't change from configfile */ 382 boolean windowtype_deferred; /* pick a windowport and store it in 383 chosen_windowport[], but do not switch to 384 it in the midst of options processing */ 385 genericptr_t returning_missile; /* 'struct obj *'; Mjollnir or aklys */ 386 boolean obsolete; /* obsolete options can point at this, it isn't used */ 387 }; 388 389 /* 390 * Old deprecated names 391 */ 392 #ifdef TTY_GRAPHICS 393 #define eight_bit_tty wc_eight_bit_input 394 #endif 395 #define use_color wc_color 396 #define hilite_pet wc_hilite_pet 397 #define underline_peacefuls wc_underline_peacefuls 398 #define use_inverse wc_inverse 399 #ifdef MAC_GRAPHICS_ENV 400 #define large_font obsolete 401 #endif 402 #ifdef MAC 403 #define popup_dialog wc_popup_dialog 404 #endif 405 #define preload_tiles wc_preload_tiles 406 407 extern NEARDATA struct flag flags; 408 extern NEARDATA struct instance_flags iflags; 409 410 /* last_msg values 411 * Usage: 412 * pline("some message"); 413 * pline: vsprintf + putstr + iflags.last_msg = PLNMSG_UNKNOWN; 414 * iflags.last_msg = PLNMSG_some_message; 415 * and subsequent code can adjust the next message if it is affected 416 * by some_message. The next message will clear iflags.last_msg. 417 */ 418 enum plnmsg_types { 419 PLNMSG_UNKNOWN = 0, /* arbitrary */ 420 PLNMSG_ONE_ITEM_HERE, /* "you see <single item> here" */ 421 PLNMSG_TOWER_OF_FLAME, /* scroll of fire */ 422 PLNMSG_CAUGHT_IN_EXPLOSION, /* explode() feedback */ 423 PLNMSG_OBJ_GLOWS, /* "the <obj> glows <color>" */ 424 PLNMSG_OBJNAM_ONLY, /* xname/doname only, for #tip */ 425 PLNMSG_OK_DONT_DIE, /* overriding death in explore/wizard mode */ 426 PLNMSG_BACK_ON_GROUND, /* leaving water */ 427 PLNMSG_GROWL, /* growl() gave some message */ 428 PLNMSG_enum /* allows inserting new entries with unconditional trailing comma */ 429 }; 430 431 /* runmode options */ 432 enum runmode_types { 433 RUN_TPORT = 0, /* don't update display until movement stops */ 434 RUN_LEAP, /* update display every 7 steps */ 435 RUN_STEP, /* update display every single step */ 436 RUN_CRAWL /* walk w/ extra delay after each update */ 437 }; 438 439 /* paranoid confirmation prompting */ 440 /* any yes confirmations also require explicit no (or ESC) to reject */ 441 #define ParanoidConfirm ((flags.paranoia_bits & PARANOID_CONFIRM) != 0) 442 /* quit: yes vs y for "Really quit?" and "Enter explore mode?" */ 443 #define ParanoidQuit ((flags.paranoia_bits & PARANOID_QUIT) != 0) 444 /* die: yes vs y for "Die?" (dying in explore mode or wizard mode) */ 445 #define ParanoidDie ((flags.paranoia_bits & PARANOID_DIE) != 0) 446 /* hit: yes vs y for "Save bones?" in wizard mode */ 447 #define ParanoidBones ((flags.paranoia_bits & PARANOID_BONES) != 0) 448 /* hit: yes vs y for "Really attack <the peaceful monster>?" */ 449 #define ParanoidHit ((flags.paranoia_bits & PARANOID_HIT) != 0) 450 /* pray: ask "Really pray?" (accepts y answer, doesn't require yes), 451 taking over for the old prayconfirm boolean option */ 452 #define ParanoidPray ((flags.paranoia_bits & PARANOID_PRAY) != 0) 453 /* remove: remove ('R') and takeoff ('T') commands prompt for an inventory 454 item even when only one accessory or piece of armor is currently worn */ 455 #define ParanoidRemove ((flags.paranoia_bits & PARANOID_REMOVE) != 0) 456 /* breakwand: Applying a wand */ 457 #define ParanoidBreakwand ((flags.paranoia_bits & PARANOID_BREAKWAND) != 0) 458 /* werechange: accepting randomly timed werecreature change to transform 459 from human to creature or vice versa while having polymorph control */ 460 #define ParanoidWerechange ((flags.paranoia_bits & PARANOID_WERECHANGE) != 0) 461 /* continue eating: prompt given _after_first_bite_ when eating something 462 while satiated */ 463 #define ParanoidEating ((flags.paranoia_bits & PARANOID_EATING) != 0) 464 /* swim: walk (not fly or jump or levitate) into water or lava from a 465 * non-similar square */ 466 #define ParanoidSwim ((flags.paranoia_bits & PARANOID_SWIM) != 0) 467 /* trap: move onto a trap that you know is there */ 468 #define ParanoidTrap ((flags.paranoia_bits & PARANOID_TRAP) != 0) 469 /* throw: throw ammo without a corresponding launcher wielded */ 470 #define ParanoidThrow ((flags.paranoia_bits & PARANOID_THROW) != 0) 471 472 /* command parsing, mainly dealing with number_pad handling; 473 not saved and restored */ 474 475 #ifdef NHSTDC 476 /* forward declaration sufficient to declare pointers */ 477 struct ext_func_tab; /* from func_tab.h */ 478 #endif 479 480 enum gloctypes { 481 GLOC_MONS = 0, 482 GLOC_OBJS, 483 GLOC_DOOR, 484 GLOC_EXPLORE, 485 GLOC_INTERESTING, 486 GLOC_VALID, 487 488 NUM_GLOCS 489 }; 490 491 #endif /* FLAG_H */ 492