diff --git a/src/characters.cc b/src/characters.cc index 7c5f0c1..976ea15 100644 --- a/src/characters.cc +++ b/src/characters.cc @@ -36,9 +36,9 @@ void character::apply_effect(potion *effect) { void character::insert_effect(potion *effect) { effects.push_back(effect); - for (int i = effects.size() - 1; i > 0; --i) - if (effect->get_priority() < effects[i - 1]->get_priority()) - std::swap(effects[i], effects[i - 1]); + for (int i = effects.size() - 1; i > 0 && + effect->get_priority() < effects[i - 1]->get_priority(); --i) + std::swap(effects[i], effects[i - 1]); } result character::calc_effects() { diff --git a/src/enemies/halfling.cc b/src/enemies/halfling.cc index e0ead49..28be1b9 100644 --- a/src/enemies/halfling.cc +++ b/src/enemies/halfling.cc @@ -33,7 +33,7 @@ long_result halfling::get_hit(character *ch, const int tATK, " is slain by PC. "}; return {result::hit, "PC deals " + - std::to_string(tmp) + " damage to " + abbrev}; + std::to_string(tmp) + " damage to " + abbrev + ". "}; } return {miss, "PC tried to hit " + abbrev + diff --git a/src/enemy.cc b/src/enemy.cc index 179d995..f183408 100644 --- a/src/enemy.cc +++ b/src/enemy.cc @@ -77,7 +77,7 @@ long_result enemy_base::get_hit(character *ch, const int tATK, " is slain by PC. "}; return {result::hit, "PC deals " + - std::to_string(tmp) + " damage to " + abbrev}; + std::to_string(tmp) + " damage to " + abbrev + ". "}; } return {miss, "PC tried to hit " + abbrev + " but missed. "}; diff --git a/src/game.cc b/src/game.cc index fbc42e8..b034444 100644 --- a/src/game.cc +++ b/src/game.cc @@ -41,17 +41,26 @@ void game::new_level() { rng, enabled_features)); } -#include -bool compare_characters(const character *a, const character *b) { - return a->get_pos() < b->get_pos(); +enemy_list game::sort_enemies(const enemy_list &elist) { + enemy_list result; + result.reserve(elist.size()); + + for (auto enemy : elist) { + result.push_back(enemy); + + for (int i = result.size() - 1; i > 0 && + enemy->get_pos() < result[i - 1]->get_pos(); --i) + std::swap(result[i], result[i - 1]); + } + + return result; } character *game::move_enemies() { if (the_world) return nullptr; - auto enemies = levels[curr_level]->get_elist(); - std::sort(enemies.begin(), enemies.end(), ::compare_characters); + auto enemies = sort_enemies(levels[curr_level]->get_elist()); for (auto ch : enemies) { bool hostile = ch->get_race() == rmerchant ? diff --git a/src/game.h b/src/game.h index 6596d9f..74ead18 100644 --- a/src/game.h +++ b/src/game.h @@ -52,6 +52,7 @@ public: private: void new_level(); character *move_enemies(); + enemy_list sort_enemies(const enemy_list &elist); }; #endif diff --git a/src/input/console_input.cc b/src/input/console_input.cc index f54f2a2..8a221b2 100644 --- a/src/input/console_input.cc +++ b/src/input/console_input.cc @@ -31,7 +31,7 @@ game_command console_input::get_command() { return (game_command)((tmp = get_direction(cmd)) == game_command_panic - ? tmp : tmp - move_north + + ? tmp : tmp + (use ? apply_north : attack_north)); } else if (cmd == "yes") { return game_command::enter;