I'm still having trouble with the secret doors. By moving into a secret door, you get to the tunneling code. The problem is that you need to differentiate secret doors from secret doors that are known. I fixed this by adding

Code:

/*
* Determine if a grid is a closed door.
* Open or broken doors, as well as secret doors don't count.
*/
#define cave_closed_door(Y,X) \
(f_info[cave_feat[Y][X]].flags & (TF_DOOR_CLOSED) && !(cave_feat[Y][X] == FEAT_SECRET))
/*
* Determine if a grid contains a secret door
*/
#define cave_secret_door(Y,X) \
((cave_feat[Y][X] == FEAT_SECRET))
/*
* Determine if a grid is any door.
*/
#define cave_any_door(Y,X) \
(f_info[cave_feat[Y][X]].flags & (TF_DOOR_ANY))
/*
* Determine if a grid contains an open door
*/
#define cave_open_door(Y,X) \
((cave_feat[Y][X] == FEAT_OPEN))

Also, you will probably want to examine any existing uses of these functions to make sure they remain correct.

The problem occurs when the auto-interact code thinks "it's a door", so goes to the auto-do function, which sees granite and starts tunneling. I don't recall the correct names of those functions.