Added damage taken and inflicted and expected values, ...

...at last we will be able to know if the RNG has a specially sympathy
to Dave. :P

Basically it's patch 3187, updated to work with current CVS (I think the only
difference is the use of gettext)
This commit is contained in:
Isaac Clerencia Perez 2004-08-26 00:33:11 +00:00
parent 96f939e685
commit 98ddc00730
3 changed files with 58 additions and 7 deletions

View file

@ -1980,6 +1980,32 @@ void turn_info::show_statistics()
items.push_back(str.str());
}
{
std::stringstream str;
str << _("Damage Inflicted") << "," << stats.damage_inflicted;
items.push_back(str.str());
}
{
std::stringstream str;
str << _("Damage Taken") << "," << stats.damage_taken;
items.push_back(str.str());
}
{
std::stringstream str;
str << _("Damage Inflicted (EV)") << "," <<
(stats.expected_damage_inflicted / 100.0);
items.push_back(str.str());
}
{
std::stringstream str;
str << _("Damage Taken (EV)") << "," <<
(stats.expected_damage_taken / 100.0);
items.push_back(str.str());
}
const int res = gui::show_dialog(gui_,NULL,"",_("Statistics"),gui::MESSAGE,&items);
std::string title;
items.clear();

View file

@ -141,6 +141,8 @@ void merge_stats(stats& a, const stats& b)
a.recall_cost += b.recall_cost;
a.damage_inflicted += b.damage_inflicted;
a.damage_taken += b.damage_taken;
a.expected_damage_inflicted += b.expected_damage_inflicted;
a.expected_damage_taken += b.expected_damage_taken;
}
}
@ -148,7 +150,7 @@ void merge_stats(stats& a, const stats& b)
namespace statistics
{
stats::stats() : recruit_cost(0), recall_cost(0), damage_inflicted(0), damage_taken(0)
stats::stats() : recruit_cost(0), recall_cost(0), damage_inflicted(0), damage_taken(0), expected_damage_inflicted(0), expected_damage_taken(0)
{}
stats::stats(const config& cfg)
@ -180,6 +182,12 @@ config stats::write() const
sprintf(buf,"%d",damage_taken);
res["damage_taken"] = buf;
sprintf(buf,"%d",expected_damage_inflicted);
res["expected_damage_inflicted"] = buf;
sprintf(buf,"%d",expected_damage_taken);
res["expected_damage_taken"] = buf;
return res;
}
@ -221,6 +229,8 @@ void stats::read(const config& cfg)
recall_cost = atoi(cfg["recall_cost"].c_str());
damage_inflicted = atoi(cfg["damage_inflicted"].c_str());
damage_taken = atoi(cfg["damage_taken"].c_str());
expected_damage_inflicted = atoi(cfg["expected_damage_inflicted"].c_str());
expected_damage_taken = atoi(cfg["expected_damage_taken"].c_str());
}
disabler::disabler() { stats_disabled++; }
@ -272,8 +282,14 @@ void attack_context::attack_result(attack_context::ATTACK_RESULT res)
push_back(attacker_res,(res == MISSES ? '0' : '1'));
attacker_stats().damage_inflicted += bat_stats.damage_defender_takes;
defender_stats().damage_taken += bat_stats.damage_defender_takes;
if(res != MISSES) {
attacker_stats().damage_inflicted += bat_stats.damage_defender_takes;
defender_stats().damage_taken += bat_stats.damage_defender_takes;
}
attacker_stats().expected_damage_inflicted +=
bat_stats.damage_defender_takes * bat_stats.chance_to_hit_defender;
defender_stats().expected_damage_taken +=
bat_stats.damage_defender_takes * bat_stats.chance_to_hit_defender;
if(res == KILLS) {
attacker_stats().killed[defender_type]++;
@ -286,11 +302,16 @@ void attack_context::defend_result(attack_context::ATTACK_RESULT res)
if(stats_disabled > 0)
return;
defender_res.resize(defender_res.size()+1);
defender_res[defender_res.size()-1] = (res == MISSES ? '0' : '1');
push_back(defender_res,(res == MISSES ? '0' : '1'));
attacker_stats().damage_taken += bat_stats.damage_attacker_takes;
defender_stats().damage_inflicted += bat_stats.damage_defender_takes;
if(res != MISSES) {
attacker_stats().damage_taken += bat_stats.damage_attacker_takes;
defender_stats().damage_inflicted += bat_stats.damage_defender_takes;
}
attacker_stats().expected_damage_taken +=
bat_stats.damage_attacker_takes * bat_stats.chance_to_hit_attacker;
defender_stats().expected_damage_inflicted +=
bat_stats.damage_attacker_takes * bat_stats.chance_to_hit_attacker;
if(res == KILLS) {
attacker_stats().deaths[attacker_type]++;

View file

@ -28,6 +28,10 @@ namespace statistics
battle_result_map attacks, defends;
int damage_inflicted, damage_taken;
//expected value for damage inflicted/taken * 100, based on probability
//to hit, Use this long term to see how lucky a side is
int expected_damage_inflicted, expected_damage_taken;
};
int sum_str_int_map(const stats::str_int_map& m);