Ok, I've had two or three people ask me to post this to the list, so here
it is. If there's a better way to do this, please post it. If you don't
like the way I did this, please post code, not snide responses. Flames
might make you feel better about yourself, but they don't _HELP_ anyone.

This can be cleaned up a lot, as far as my presentation. I don't know how
else to post it, tho. It's involved and complicated, and that's all there
is to it.

Speaking of things that suck, I was thinking of showing players open doors
in autoexit and adding EX_SECRET or HIDDEN or WHATEVER flags, when I came
across this nightmare:

                        int locks = 0;
                        if ( IS_SET( pExit->rs_flags, EX_ISDOOR )
                        && ( !IS_SET( pExit->rs_flags, EX_PICKPROOF ) )
                        && ( !IS_SET( pExit->rs_flags, EX_NOPASS ) ) )    

uhm. No. For those of you who haven't delved into this, it's making
up a number based on exit flags, and then just saving the single number.
Then, when it loads, it converts the number back to the proper flags.
Evil. Terryifing. Wrong. Easily fixed.

*******************************************************************************

BACK EVERYTHING UP. TWICE. If you get halfway through with this and
something goes wrong, you're WAY up the creek, as this will change your
area file format. Also, you will no longer be able to read stock Rom area
files without converting them first.

*******************************************************************************

In olc.save.c.. err, olc_save.c, for those of you who enjoy underscoring:

     int door;
+    char buf[MAX_STRING_LENGTH];

     fprintf( fp, "#ROOMS\n" );
     for( iHash = 0; iHash < MAX_KEY_HASH; iHash++ )
@@ -543,29 +535,14 @@
                     if ( ( pExit = pRoomIndex->exit[door] )
                           && pExit->u1.to_room )
                     {
-                       int locks = 0;
-                       if ( IS_SET( pExit->rs_flags, EX_ISDOOR )
-                       && ( !IS_SET( pExit->rs_flags, EX_PICKPROOF ) )
-                       && ( !IS_SET( pExit->rs_flags, EX_NOPASS ) ) )
-                           locks = 1;
-                       if ( IS_SET( pExit->rs_flags, EX_ISDOOR )
-                       && ( IS_SET( pExit->rs_flags, EX_PICKPROOF ) )
-                       && ( !IS_SET( pExit->rs_flags, EX_NOPASS ) ) )
-                           locks = 2;
-                       if ( IS_SET( pExit->rs_flags, EX_ISDOOR )
-                       && ( !IS_SET( pExit->rs_flags, EX_PICKPROOF ) )
-                       && ( IS_SET( pExit->rs_flags, EX_NOPASS ) ) )
-                           locks = 3;
-                       if ( IS_SET( pExit->rs_flags, EX_ISDOOR )
-                       && ( IS_SET( pExit->rs_flags, EX_PICKPROOF ) )
-                       && ( IS_SET( pExit->rs_flags, EX_NOPASS ) ) )
-                           locks = 4;
-
                         fprintf( fp, "D%d\n",      pExit->orig_door );
                         fprintf( fp, "%s~\n",      fix_string( 
						   pExit->description ));
                         fprintf( fp, "%s~\n",      pExit->keyword );

-                        fprintf( fp, "%d %d %d\n", locks,
-                                                   pExit->key,


+
+
+                   	fprintf( fp, "%s ", 
+			fwrite_flag( pExit->rs_flags, buf ) );
+
+                        fprintf( fp, "%d %d\n",    pExit->key,
			pExit->u1.to_room->vnum );
                     }
                 }                      

make this change. compile. (BACK YOUR AREAS UP!) restart your mud. save
everything. then, one other small but important change, in db.c, in
load_rooms:

 /*
  * Adds a reset to a room.  OLC
@@ -1194,25 +899,12 @@
                pexit->description      = fread_string( fp );
                pexit->keyword          = fread_string( fp );
                pexit->exit_info        = 0;
-                pexit->rs_flags         = 0;                    /* OLC */
-               locks                   = fread_number( fp );
+
+               pexit->rs_flags         = fread_flag( fp );
                pexit->key              = fread_number( fp );
                pexit->u1.vnum          = fread_number( fp );
                pexit->orig_door        = door;                 /* OLC */

-               switch ( locks )
-               {
-               case 1: pexit->exit_info = EX_ISDOOR;
-                       pexit->rs_flags  = EX_ISDOOR;break;
-               case 2: pexit->exit_info = EX_ISDOOR | EX_PICKPROOF;
-                       pexit->rs_flags  = EX_ISDOOR | EX_PICKPROOF;break;
-               case 3: pexit->exit_info = EX_ISDOOR | EX_NOPASS;
-                       pexit->rs_flags  = EX_ISDOOR | EX_NOPASS; break;
-               case 4: pexit->exit_info =EX_ISDOOR|EX_NOPASS|EX_PICKPROOF;
-                       pexit->rs_flags  =EX_ISDOOR|EX_NOPASS|EX_PICKPROOF;
-                       break;
-               }
-
                pRoomIndex->exit[door]  = pexit;
                pRoomIndex->old_exit[door] = pexit;
                top_exit++;                                            

now, EX_INFURIATING can be both fun and useful! uhm, if you dont speak
diff, feel free to mail me. i'll try to get a human-readable snip on my
ftp site, or something.
