fixed:
1. potions being walked over 2. spawning on stairs 3. enemies walking under players 4. merchants not being aggresive 5. potions losing effect when sending pass signal (cleared by player::start_turn())’
This commit is contained in:
34
src/level.cc
34
src/level.cc
@ -6,6 +6,15 @@ level::level(character *player, RNG *rng, const feature enabled_features):
|
||||
enabled_features{enabled_features}, map{player, rng, enabled_features},
|
||||
player{player} {
|
||||
auto tiles = map.get_room_list();
|
||||
|
||||
for (size_t i = 0; i < tiles.size(); ++i)
|
||||
remove_from_list(tiles[i], map.get_down_stairs());
|
||||
|
||||
if (enabled_features & FEATURE_REVISIT)
|
||||
for (size_t i = 0; i < tiles.size(); ++i)
|
||||
remove_from_list(tiles[i], map.get_up_stairs());
|
||||
|
||||
|
||||
gen_potions(rng, tiles);
|
||||
gen_gold(rng, tiles);
|
||||
gen_enemies(rng, tiles);
|
||||
@ -16,6 +25,14 @@ level::level(const std::string &map_data, character *player, RNG *rng,
|
||||
enabled_features{enabled_features},
|
||||
map{player, map_data, rng, enabled_features}, player{player} {
|
||||
auto tiles = map.get_room_list();
|
||||
|
||||
for (size_t i = 0; i < tiles.size(); ++i)
|
||||
remove_from_list(tiles[i], map.get_down_stairs());
|
||||
|
||||
if (enabled_features & FEATURE_REVISIT)
|
||||
for (size_t i = 0; i < tiles.size(); ++i)
|
||||
remove_from_list(tiles[i], map.get_up_stairs());
|
||||
|
||||
gen_potions(rng, tiles);
|
||||
gen_gold(rng, tiles);
|
||||
gen_enemies(rng, tiles);
|
||||
@ -42,9 +59,12 @@ void level::gen_enemies(RNG *rng, std::vector<position_list> &tiles) {
|
||||
for (size_t i = 0; i < dhoard.size(); ++i) {
|
||||
position_list spots;
|
||||
|
||||
for (int i = 0; i < DIRECTION_CNT; ++i)
|
||||
if (map.which_room(dhoard[i].pos + MOVE[i]) != -1)
|
||||
for (int i = 0; i < DIRECTION_CNT; ++i) {
|
||||
position tmp = dhoard[i].pos + MOVE[i];
|
||||
|
||||
if (map.which_room(tmp) != -1)
|
||||
spots.push_back(dhoard[i].pos + MOVE[i]);
|
||||
}
|
||||
|
||||
pelist.push_back(nullptr);
|
||||
new_dragon(rng, pelist[i], rng->get_rand_in_vector(spots),
|
||||
@ -128,19 +148,22 @@ bool level::is_available(const position &pos, bool is_player) const {
|
||||
if (!map.is_available(pos))
|
||||
return false;
|
||||
|
||||
if (player->get_pos() == pos)
|
||||
return false;
|
||||
|
||||
for (size_t i = 0; i < elist.size(); ++i)
|
||||
if (pos == elist[i]->get_pos())
|
||||
return false;
|
||||
|
||||
if (!(enabled_features & FEATURE_WALK_OVER) && !is_player) {
|
||||
if (!(enabled_features & FEATURE_WALK_OVER))
|
||||
for (size_t i = 0; i < plist.size(); ++i)
|
||||
if (pos == plist[i]->get_pos())
|
||||
return false;
|
||||
|
||||
if (!(enabled_features & FEATURE_WALK_OVER) && !is_player)
|
||||
for (size_t i = 0; i < glist.size(); ++i)
|
||||
if (pos == glist[i].pos)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -149,6 +172,9 @@ bool level::is_available_all(const position &pos) const {
|
||||
if (!map.is_available(pos))
|
||||
return false;
|
||||
|
||||
if (player->get_pos() == pos)
|
||||
return false;
|
||||
|
||||
for (size_t i = 0; i < elist.size(); ++i)
|
||||
if (pos == elist[i]->get_pos())
|
||||
return false;
|
||||
|
Reference in New Issue
Block a user