diff --git a/src/game/boe.combat.cpp b/src/game/boe.combat.cpp index 3bd0d05d..c443bad2 100644 --- a/src/game/boe.combat.cpp +++ b/src/game/boe.combat.cpp @@ -4661,7 +4661,10 @@ bool hit_end_c_button() { bool end_ok = true; if(which_combat_type == 0) { - end_ok = out_monst_all_dead(); + auto out_monst_remaining = out_monst_alive(); + if(!out_monst_remaining.empty()){ + end_ok = false; + } } for(cPlayer& pc : univ.party) { if(pc.status[eStatus::FORCECAGE] > 0) { @@ -4675,14 +4678,23 @@ bool hit_end_c_button() { return end_ok; } -bool out_monst_all_dead() { - for(short i = 0; i < univ.town.monst.size(); i++) - if(univ.town.monst[i].is_alive() && !univ.town.monst[i].is_friendly()) { +std::map out_monst_alive() { + std::map monst_alive; + for(short i = 0; i < univ.town.monst.size(); i++){ + cCreature& m = univ.town.monst[i]; + if(m.is_alive() && !m.is_friendly()) { + if(monst_alive.find(m.m_name) != monst_alive.end()){ + // Would += work in this context? + monst_alive[m.m_name] = monst_alive[m.m_name] + 1; + }else{ + monst_alive[m.m_name] = 1; + } + //print_nums(5555,i,univ.town.monst[i].number); //print_nums(5555,univ.town.monst[i].m_loc.x,univ.town.monst[i].m_loc.y); - return false; } - return true; + } + return monst_alive; } void end_combat() { diff --git a/src/game/boe.combat.hpp b/src/game/boe.combat.hpp index baf78e6c..56eb2330 100644 --- a/src/game/boe.combat.hpp +++ b/src/game/boe.combat.hpp @@ -2,6 +2,7 @@ #ifndef BOE_GAME_COMBAT_H #define BOE_GAME_COMBAT_H +#include #include "location.hpp" #include "scenario/monster.hpp" #include "scenario/outdoors.hpp" @@ -49,7 +50,7 @@ void do_poison(); void handle_disease(); void handle_acid(); bool hit_end_c_button(); -bool out_monst_all_dead(); +std::map out_monst_alive(); void end_combat(); bool combat_cast_mage_spell(); bool combat_cast_priest_spell();