diff --git a/scripts/tests/items.lua b/scripts/tests/items.lua index af8788c93..fb3141f56 100644 --- a/scripts/tests/items.lua +++ b/scripts/tests/items.lua @@ -19,12 +19,15 @@ function disable_test_mistletoe_okay() u:add_item('mistletoe', 2) u:clear_orders() u:add_order("BENUTZEN 1 Mistelzweig") - assert_false(u:has_attrib('fleechance')) + assert_nil(u:get_curse('fleechance')) turn_process() - assert_true(u:has_attrib('fleechance')) + assert_not_nil(u:get_curse('fleechance')) assert_equal(1, u:get_item('mistletoe')) assert_equal(1, f:count_msg_type('use_item')) turn_end() + init_reports() + print("reports", get_turn(), f) + write_report(f) end function disable_test_mistletoe_fail() @@ -35,10 +38,10 @@ function disable_test_mistletoe_fail() u:add_item('mistletoe', 1) u:clear_orders() u:add_order("BENUTZEN 1 Mistelzweig") - assert_false(u:has_attrib('fleechance')) + assert_nil(u:get_curse('fleechance')) u.number = 2 turn_process() - assert_false(u:has_attrib('fleechance')) + assert_nil(u:get_curse('fleechance')) assert_equal(1, u:get_item('mistletoe')) assert_equal(1, f:count_msg_type('use_singleperson')) turn_end() diff --git a/src/battle.c b/src/battle.c index 04cc1904d..a6be27b23 100644 --- a/src/battle.c +++ b/src/battle.c @@ -2328,29 +2328,29 @@ static double horse_fleeing_bonus(const unit * u) double fleechance(unit * u) { - double c = 0.20; /* Fluchtwahrscheinlichkeit in % */ + double p = 0.20; /* Fluchtwahrscheinlichkeit in % */ /* Einheit u versucht, dem Get�mmel zu entkommen */ - c += (effskill(u, SK_STEALTH, 0) * 0.05); - c += horse_fleeing_bonus(u); + p += (effskill(u, SK_STEALTH, 0) * 0.05); + p += horse_fleeing_bonus(u); if (u_race(u) == get_race(RC_HALFLING)) { - c += 0.20; - c = fmin(c, 0.90); - } - else { - c = fmin(c, 0.75); + p += 0.20; + if (p > 0.9) { + p = 0.9; + } } #if 0 /* TODO: mistletoe */ - if (a) { - c += a->data.flt; + c = get_curse(u->attribs, &ct_fleechance); + if (c) { + p += c->effect; } #endif - return c; + return p; } -/** add a new army to the conflict +/** add a new army to the conflict. * beware: armies need to be added _at the beginning_ of the list because * otherwise join_allies() will get into trouble */ side *make_side(battle * b, const faction * f, const group * g, @@ -3358,7 +3358,7 @@ fighter * get_fighter(battle * b, const struct unit * u) static int join_battle(battle * b, unit * u, bool attack, fighter ** cp) { side *s; - fighter *c = NULL; + fighter *fc = NULL; if (!attack) { #if 0 @@ -3378,7 +3378,7 @@ static int join_battle(battle * b, unit * u, bool attack, fighter ** cp) if (s->faction == u->faction) { for (fig = s->fighters; fig; fig = fig->next) { if (fig->unit == u) { - c = fig; + fc = fig; if (attack) { set_attacker(fig); } @@ -3387,11 +3387,11 @@ static int join_battle(battle * b, unit * u, bool attack, fighter ** cp) } } } - if (!c) { + if (!fc) { *cp = make_fighter(b, u, NULL, attack); return *cp != NULL; } - *cp = c; + *cp = fc; return false; } diff --git a/src/reports.c b/src/reports.c index 3716a01e6..3fb068121 100644 --- a/src/reports.c +++ b/src/reports.c @@ -953,10 +953,10 @@ struct message *msg_curse(const struct curse *c, const void *obj, objtype_t typ, { "unit_unknown", "region_unknown", "building_unknown", "ship_unknown" }; msg = msg_message(mkname("curseinfo", unknown[typ]), "id", c->no); - log_error("no curseinfo function for %s and no fallback either.\n", c->type->cname); + log_warning("no curseinfo function for %s and no fallback either.\n", c->type->cname); } else { - log_error("no curseinfo function for %s, using cinfo_simple fallback.\n", c->type->cname); + log_debug("no curseinfo function for %s, using cinfo_simple fallback.\n", c->type->cname); } return msg; } diff --git a/src/spells/unitcurse.c b/src/spells/unitcurse.c index 6fc979e38..9289bb3c6 100644 --- a/src/spells/unitcurse.c +++ b/src/spells/unitcurse.c @@ -345,9 +345,16 @@ const struct curse_type ct_skillmod = { NULL, read_skill, write_skill }; +const struct curse_type ct_fleechance = { + "fleechance", + CURSETYP_NORM, 0, (M_DURATION | M_VIGOUR), + NULL, NULL, NULL, NULL, NULL +}; + /* ------------------------------------------------------------- */ void register_unitcurse(void) { + ct_register(&ct_fleechance); ct_register(&ct_auraboost); ct_register(&ct_magicboost); ct_register(&ct_slavery); diff --git a/src/spells/unitcurse.h b/src/spells/unitcurse.h index 681fa32de..0da3ff8ff 100644 --- a/src/spells/unitcurse.h +++ b/src/spells/unitcurse.h @@ -23,6 +23,7 @@ extern "C" { struct curse_type; struct message; + extern const struct curse_type ct_fleechance; extern const struct curse_type ct_slavery; extern const struct curse_type ct_calmmonster; extern const struct curse_type ct_speed;