static void rotting_herbs(void) { static int rule_rot = -1; region *r; if (rule_rot < 0) { rule_rot = get_param_int(global.parameters, "rules.economy.herbrot", HERBROTCHANCE); } if (rule_rot == 0) return; for (r = regions; r; r = r->next) { unit *u; for (u = r->units; u; u = u->next) { const struct item_type *it_bag = it_find("magicherbbag"); item **itmp = &u->items; int rot_chance = rule_rot; if (it_bag && *i_find(itmp, it_bag)) { rot_chance = (rot_chance * 2) / 5; } while (*itmp) { item *itm = *itmp; int n = itm->number; double k = n * rot_chance / 100.0; if (fval(itm->type, ITF_HERB)) { double nv = normalvariate(k, k / 4); int inv = (int)nv; int delta = _min(n, inv); if (!i_change(itmp, itm->type, -delta)) { continue; } } itmp = &itm->next; } } } }
static bool has_ao_healing(const unit *u) { item *const* iter = i_findc(&u->items, it_find("ao_healing")); return (*iter && (*iter)->number > 0); }