diff options
Diffstat (limited to 'crawl-ref/source/tilepick.cc')
-rw-r--r-- | crawl-ref/source/tilepick.cc | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc index d56139759a..999a8d38ca 100644 --- a/crawl-ref/source/tilepick.cc +++ b/crawl-ref/source/tilepick.cc @@ -4510,6 +4510,26 @@ void tile_init_flavour() tile_init_flavour(*ri); } +static int _pick_random_dngn_tile(unsigned int idx) +{ + ASSERT(idx >= 0 && idx < TILE_DNGN_MAX); + const int count = tile_dngn_count(idx); + if (count == 1) + return (idx); + + const int total = tile_dngn_probs(idx + count - 1); + const int rand = random2(total); + + for (int i = 0; i < count; ++i) + { + int curr = idx + i; + if (rand < tile_dngn_probs(curr)) + return (curr); + } + + return (idx); +} + void tile_init_flavour(const coord_def &gc) { if (!map_bounds(gc)) @@ -4521,8 +4541,7 @@ void tile_init_flavour(const coord_def &gc) int colour = env.grid_colours(gc); if (colour) floor_base = tile_dngn_coloured(floor_base, colour); - int floor_rnd = random2(tile_dngn_count(floor_base)); - env.tile_flv(gc).floor = floor_base + floor_rnd; + env.tile_flv(gc).floor = _pick_random_dngn_tile(floor_base); } if (!env.tile_flv(gc).wall) @@ -4531,8 +4550,7 @@ void tile_init_flavour(const coord_def &gc) int colour = env.grid_colours(gc); if (colour) wall_base = tile_dngn_coloured(wall_base, colour); - int wall_rnd = random2(tile_dngn_count(wall_base)); - env.tile_flv(gc).wall = wall_base + wall_rnd; + env.tile_flv(gc).wall = _pick_random_dngn_tile(wall_base); } if (feat_is_door(grd(gc))) |