- over_days = std::max<int>(0, w_ptr->dungeon_turn / (TURNS_PER_TICK * 10000L) - delay / 20);
-
- /* starts from 1/25, reaches 1/3 after 44days from a max_level dependent base date */
- pls_kakuritu = std::max(NASTY_MON_MAX, NASTY_MON_BASE - over_days / 2);
- /* starts from 0, reaches +25lv after 75days from a max_level dependent base date */
- pls_max_level = std::min(NASTY_MON_PLUS_MAX, over_days / 3);
-
- if (d_info[player_ptr->dungeon_idx].flags.has(DungeonFeatureType::MAZE)) {
- pls_kakuritu = std::min(pls_kakuritu / 2, pls_kakuritu - 10);
- if (pls_kakuritu < 2)
- pls_kakuritu = 2;
- pls_max_level += 2;
+ const auto over_days = std::max<int>(0, w_ptr->dungeon_turn / (TURNS_PER_TICK * 10000L) - delay / 20);
+
+ /* Probability starts from 1/25, reaches 1/3 after 44days from a max_level dependent base date */
+ /* Boost level starts from 0, reaches +25lv after 75days from a max_level dependent base date */
+ constexpr auto chance_nasty_monster = 25;
+ constexpr auto max_num_nasty_monsters = 3;
+ constexpr auto max_depth_nasty_monster = 25;
+ auto chance_nasty = std::max(max_num_nasty_monsters, chance_nasty_monster - over_days / 2);
+ auto nasty_level = std::min(max_depth_nasty_monster, over_days / 3);
+ const auto &floor = *player_ptr->current_floor_ptr;
+ const auto &dungeon = floor.get_dungeon_definition();
+ if (dungeon.flags.has(DungeonFeatureType::MAZE)) {
+ chance_nasty = std::min(chance_nasty / 2, chance_nasty - 10);
+ if (chance_nasty < 2) {
+ chance_nasty = 2;
+ }
+
+ nasty_level += 2;