/** * Describe slays and brands on weapons */ static bool describe_brands(textblock *tb, const struct object *obj) { struct brand *known_brands = brand_collect(obj, NULL, TRUE); struct brand *b; if (!known_brands) return FALSE; if (tval_is_weapon(obj) || tval_is_fuel(obj)) textblock_append(tb, "Branded with "); else textblock_append(tb, "It brands your melee attacks with "); b = known_brands; while (b) { if (b->multiplier < 3) textblock_append(tb, "weak "); textblock_append(tb, b->name); if (b->next) textblock_append(tb, ", "); else textblock_append(tb, ".\n"); b = b->next; } free_brand(known_brands); return TRUE; }
/** * Describe slays and brands on weapons */ static bool describe_slays(textblock *tb, const struct object *obj) { struct slay *known_slays = slay_collect(obj, NULL, TRUE); struct slay *s; if (!known_slays) return FALSE; if (tval_is_weapon(obj) || tval_is_fuel(obj)) textblock_append(tb, "Slays "); else textblock_append(tb, "It causes your melee attacks to slay "); s = known_slays; while (s) { textblock_append(tb, s->name); if (s->multiplier > 3) textblock_append(tb, " (powerfully)"); if (s->next) textblock_append(tb, ", "); else textblock_append(tb, ".\n"); s = s->next; } free_slay(known_slays); return TRUE; }
/** * Describe slays and brands on weapons */ static bool describe_brands(textblock *tb, const struct object *obj) { int i, count = 0; bool *b = obj->known->brands; if (!b) return false; if (tval_is_weapon(obj) || tval_is_fuel(obj)) textblock_append(tb, "Branded with "); else textblock_append(tb, "It brands your melee attacks with "); for (i = 1; i < z_info->brand_max; i++) { if (b[i]) { count++; } } assert(count >= 1); for (i = 1; i < z_info->brand_max; i++) { if (!b[i]) continue; if (brands[i].multiplier < 3) textblock_append(tb, "weak "); textblock_append(tb, brands[i].name); if (count > 1) textblock_append(tb, ", "); else textblock_append(tb, ".\n"); count--; } return true; }
/** * Describe slays and brands on weapons */ static bool describe_slays(textblock *tb, const struct object *obj) { int i, count = 0; bool *s = obj->known->slays; if (!s) return false; if (tval_is_weapon(obj) || tval_is_fuel(obj)) textblock_append(tb, "Slays "); else textblock_append(tb, "It causes your melee attacks to slay "); for (i = 1; i < z_info->slay_max; i++) { if (s[i]) { count++; } } assert(count >= 1); for (i = 1; i < z_info->slay_max; i++) { if (!s[i]) continue; textblock_append(tb, slays[i].name); if (slays[i].multiplier > 3) textblock_append(tb, " (powerfully)"); if (count > 1) textblock_append(tb, ", "); else textblock_append(tb, ".\n"); count--; } return true; }
/** * Describe slays and brands on weapons */ static bool describe_brands(textblock *tb, const struct object *obj) { struct brand *b = obj->known->brands; if (!b) return false; if (tval_is_weapon(obj) || tval_is_fuel(obj)) textblock_append(tb, "Branded with "); else textblock_append(tb, "It brands your melee attacks with "); while (b) { if (b->multiplier < 3) textblock_append(tb, "weak "); textblock_append(tb, b->name); if (b->next) textblock_append(tb, ", "); else textblock_append(tb, ".\n"); b = b->next; } return true; }
/** * Describe slays and brands on weapons */ static bool describe_slays(textblock *tb, const struct object *obj) { struct slay *s = obj->known->slays; if (!s) return false; if (tval_is_weapon(obj) || tval_is_fuel(obj)) textblock_append(tb, "Slays "); else textblock_append(tb, "It causes your melee attacks to slay "); while (s) { textblock_append(tb, s->name); if (s->multiplier > 3) textblock_append(tb, " (powerfully)"); if (s->next) textblock_append(tb, ", "); else textblock_append(tb, ".\n"); s = s->next; } return true; }
/** * Wipe an object clean and make it a standard object of the specified kind. */ void object_prep(struct object *obj, struct object_kind *k, int lev, aspect rand_aspect) { int i; /* Clean slate */ memset(obj, 0, sizeof(*obj)); /* Assign the kind and copy across data */ obj->kind = k; obj->tval = k->tval; obj->sval = k->sval; obj->ac = k->ac; obj->dd = k->dd; obj->ds = k->ds; obj->weight = k->weight; obj->effect = k->effect; obj->time = k->time; /* Default number */ obj->number = 1; /* Copy flags */ of_copy(obj->flags, k->base->flags); of_copy(obj->flags, k->flags); /* Assign modifiers */ for (i = 0; i < OBJ_MOD_MAX; i++) obj->modifiers[i] = randcalc(k->modifiers[i], lev, rand_aspect); /* Assign charges (wands/staves only) */ if (tval_can_have_charges(obj)) obj->pval = randcalc(k->charge, lev, rand_aspect); /* Assign pval for food, oil and launchers */ if (tval_is_edible(obj) || tval_is_potion(obj) || tval_is_fuel(obj) || tval_is_launcher(obj)) obj->pval = randcalc(k->pval, lev, rand_aspect); /* Default fuel */ if (tval_is_light(obj)) { if (of_has(obj->flags, OF_BURNS_OUT)) obj->timeout = z_info->fuel_torch; else if (of_has(obj->flags, OF_TAKES_FUEL)) obj->timeout = z_info->default_lamp; } /* Default magic */ obj->to_h = randcalc(k->to_h, lev, rand_aspect); obj->to_d = randcalc(k->to_d, lev, rand_aspect); obj->to_a = randcalc(k->to_a, lev, rand_aspect); /* Default slays and brands */ copy_slay(&obj->slays, k->slays); copy_brand(&obj->brands, k->brands); /* Default resists */ for (i = 0; i < ELEM_MAX; i++) { obj->el_info[i].res_level = k->el_info[i].res_level; obj->el_info[i].flags = k->el_info[i].flags; obj->el_info[i].flags |= k->base->el_info[i].flags; } }