ARTIFACT_IDX artifact_index = letter[idx].artifact;
/* Lay down a floor */
- g_ptr->feat = conv_dungeon_feat(letter[idx].feature);
+ g_ptr->feat = conv_dungeon_feat(p_ptr->current_floor_ptr, letter[idx].feature);
/* Only the features */
if (init_flags & INIT_ONLY_FEATURES) continue;
else if (letter[idx].trap)
{
g_ptr->mimic = g_ptr->feat;
- g_ptr->feat = conv_dungeon_feat(letter[idx].trap);
+ g_ptr->feat = conv_dungeon_feat(p_ptr->current_floor_ptr, letter[idx].trap);
}
else if (object_index)
{
place_random_door(floor_ptr, y, x, FALSE);
}
}
+
+
+FEAT_IDX conv_dungeon_feat(floor_type *floor_ptr, FEAT_IDX newfeat)
+{
+ feature_type *f_ptr = &f_info[newfeat];
+
+ if (have_flag(f_ptr->flags, FF_CONVERT))
+ {
+ switch (f_ptr->subtype)
+ {
+ case CONVERT_TYPE_FLOOR:
+ return feat_ground_type[randint0(100)];
+ case CONVERT_TYPE_WALL:
+ return feat_wall_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[floor_ptr->dungeon_idx].stream1;
+ case CONVERT_TYPE_STREAM2:
+ return d_info[floor_ptr->dungeon_idx].stream2;
+ default:
+ return newfeat;
+ }
+ }
+ else return newfeat;
+}
+
extern bool get_is_floor(floor_type *floor_ptr, POSITION x, POSITION y);
extern void try_door(floor_type *floor_ptr, POSITION y, POSITION x);
+extern FEAT_IDX conv_dungeon_feat(floor_type *floor_ptr, FEAT_IDX newfeat);
}
}
-
-FEAT_IDX conv_dungeon_feat(FEAT_IDX newfeat)
-{
- feature_type *f_ptr = &f_info[newfeat];
-
- if (have_flag(f_ptr->flags, FF_CONVERT))
- {
- switch (f_ptr->subtype)
- {
- case CONVERT_TYPE_FLOOR:
- return feat_ground_type[randint0(100)];
- case CONVERT_TYPE_WALL:
- return feat_wall_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[p_ptr->dungeon_idx].stream1;
- case CONVERT_TYPE_STREAM2:
- return d_info[p_ptr->dungeon_idx].stream2;
- default:
- return newfeat;
- }
- }
- else return newfeat;
-}
-
-
/*
* Take a feature, determine what that feature becomes
* through applying the given action.
/* Get the new feature */
for (i = 0; i < MAX_FEAT_STATES; i++)
{
- if (f_ptr->state[i].action == action) return conv_dungeon_feat(f_ptr->state[i].result);
+ if (f_ptr->state[i].action == action) return conv_dungeon_feat(p_ptr->current_floor_ptr, f_ptr->state[i].result);
}
if (have_flag(f_ptr->flags, FF_PERMANENT)) return feat;
- return (feature_action_flags[action] & FAF_DESTROY) ? conv_dungeon_feat(f_ptr->destroyed) : feat;
+ return (feature_action_flags[action] & FAF_DESTROY) ? conv_dungeon_feat(p_ptr->current_floor_ptr, f_ptr->destroyed) : feat;
}
/*
extern void lite_spot(POSITION y, POSITION x);
extern void delayed_visual_update(void);
extern void update_flow(void);
-extern FEAT_IDX conv_dungeon_feat(FEAT_IDX newfeat);
extern FEAT_IDX feat_state(FEAT_IDX feat, int action);
extern void cave_alter_feat(POSITION y, POSITION x, int action);
extern void remove_mirror(POSITION y, POSITION x);