int conv_dungeon_feat(int newfeat)
{
- switch (newfeat)
+ feature_type *f_ptr = &f_info[newfeat];
+
+ if (have_flag(f_ptr->flags, FF_CONVERT))
{
- case FEAT_CONVERT_FLOOR:
- return floor_type[randint0(100)];
- case FEAT_CONVERT_WALL:
- return fill_type[randint0(100)];
- case FEAT_CONVERT_INNER:
- return feat_wall_inner;
- case FEAT_CONVERT_OUTER:
- return feat_wall_outer;
- case FEAT_CONVERT_SOLID:
- return feat_wall_solid;
- case FEAT_CONVERT_STREAM1:
- return d_info[dungeon_type].stream1;
- case FEAT_CONVERT_STREAM2:
- return d_info[dungeon_type].stream2;
- default:
- return newfeat;
+ switch (f_ptr->power)
+ {
+ case CONVERT_TYPE_FLOOR:
+ return floor_type[randint0(100)];
+ case CONVERT_TYPE_WALL:
+ return fill_type[randint0(100)];
+ case CONVERT_TYPE_INNER:
+ return feat_wall_inner;
+ case CONVERT_TYPE_OUTER:
+ return feat_wall_outer;
+ case CONVERT_TYPE_SOLID:
+ return feat_wall_solid;
+ case CONVERT_TYPE_STREAM1:
+ return d_info[dungeon_type].stream1;
+ case CONVERT_TYPE_STREAM2:
+ return d_info[dungeon_type].stream2;
+ default:
+ return newfeat;
+ }
}
+ else return newfeat;
}
#define FF_MIRROR 108
#define FF_UNPERM 109
#define FF_TELEPORTABLE 110
+#define FF_CONVERT 111
-#define FF_FLAG_MAX 111
+#define FF_FLAG_MAX 112
#define FF_FLAG_SIZE (1 + ((FF_FLAG_MAX - 1) / 32))
/* Which features are dynamic */
#define PATTERN_TILE_WRECKED 8
+/* Type of conversions */
+#define CONVERT_TYPE_FLOOR 0
+#define CONVERT_TYPE_WALL 1
+#define CONVERT_TYPE_INNER 2
+#define CONVERT_TYPE_OUTER 3
+#define CONVERT_TYPE_SOLID 4
+#define CONVERT_TYPE_STREAM1 5
+#define CONVERT_TYPE_STREAM2 6
+
+
/*
* Bit flags for the *_can_enter() and monster_can_cross_terrain()
*/