There'a also a potential problem with add_brand() and add_slay(). For example (brand -- slay is identical):
"brand" is always initialized with the "pick" even if nothing is appended. To avoid spamming randarts with resists, a check should be added:
Code:
struct brand *brand; ... append_random_brand(&art->brands, &brand) ... if (streq(brand->name, elements[i].name) ...
Code:
struct brand *brand; ... if (append_random_brand(&art->brands, &brand)) { ... if (streq(brand->name, elements[i].name) ... }
Comment