diff options
Diffstat (limited to 'crawl-ref/source/spells3.cc')
-rw-r--r-- | crawl-ref/source/spells3.cc | 125 |
1 files changed, 111 insertions, 14 deletions
diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc index 524883c932..f6cd30dbd8 100644 --- a/crawl-ref/source/spells3.cc +++ b/crawl-ref/source/spells3.cc @@ -1979,35 +1979,132 @@ bool cast_sanctuary(const int power) return (true); } -void cast_poison_ammo() +void cast_brand_ammo(special_missile_type which_type) { const int ammo = you.equip[EQ_WEAPON]; if (ammo == -1 || you.inv[ammo].base_type != OBJ_MISSILES || get_ammo_brand( you.inv[ammo] ) != SPMSL_NORMAL - || you.inv[ammo].sub_type == MI_STONE - || you.inv[ammo].sub_type == MI_SLING_BULLET - || you.inv[ammo].sub_type == MI_LARGE_ROCK || you.inv[ammo].sub_type == MI_THROWING_NET) { canned_msg(MSG_NOTHING_HAPPENS); return; } + preserve_quiver_slots q; + const char *old_desc = you.inv[ammo].name(DESC_CAP_YOUR).c_str(); + + switch (which_type) { - preserve_quiver_slots q; - const char *old_desc = you.inv[ammo].name(DESC_CAP_YOUR).c_str(); - if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_POISONED )) - { - mprf("%s %s covered in a thin film of poison.", old_desc, - (you.inv[ammo].quantity == 1) ? "is" : "are"); + + case SPMSL_POISONED: + if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_POISONED )) + { + mprf("%s %s covered in a thin film of poison.", old_desc, + (you.inv[ammo].quantity == 1) ? "is" : "are"); - if (ammo == you.equip[EQ_WEAPON]) - you.wield_change = true; - } - else + if (ammo == you.equip[EQ_WEAPON]) + you.wield_change = true; + } + else + canned_msg(MSG_NOTHING_HAPPENS); + break; + + case SPMSL_FLAME: + if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_FLAME )) + { + mprf("%s %s warm to the touch.", old_desc, + (you.inv[ammo].quantity == 1) ? "feels" : "feel"); + + if (ammo == you.equip[EQ_WEAPON]) + you.wield_change = true; + } + else + canned_msg(MSG_NOTHING_HAPPENS); + break; + + case SPMSL_FROST: + if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_FROST )) + { + mprf("%s %s cool to the touch.", old_desc, + (you.inv[ammo].quantity == 1) ? "feels" : "feel"); + + if (ammo == you.equip[EQ_WEAPON]) + you.wield_change = true; + } + else + canned_msg(MSG_NOTHING_HAPPENS); + break; + + case SPMSL_DISPERSAL: + if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_DISPERSAL )) + { + mprf("%s %s rather jumpy.", old_desc, + (you.inv[ammo].quantity == 1) ? "seems" : "seem"); + + if (ammo == you.equip[EQ_WEAPON]) + you.wield_change = true; + } + else + canned_msg(MSG_NOTHING_HAPPENS); + break; + + case SPMSL_ELECTRIC: + if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_ELECTRIC )) + { + mprf("%s %s you!", old_desc, + (you.inv[ammo].quantity == 1) ? "shocks" : "shock"); + + if (ammo == you.equip[EQ_WEAPON]) + you.wield_change = true; + } + else + canned_msg(MSG_NOTHING_HAPPENS); + break; + + case SPMSL_EXPLODING: + if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_EXPLODING )) + { + mprf("%s %s unstable!", old_desc, + (you.inv[ammo].quantity == 1) ? "seems" : "seem"); + + if (ammo == you.equip[EQ_WEAPON]) + you.wield_change = true; + } + else + canned_msg(MSG_NOTHING_HAPPENS); + break; + + case SPMSL_REAPING: + if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_REAPING )) + { + mprf("%s %s of rotten flesh!", old_desc, + (you.inv[ammo].quantity == 1) ? "smells" : "smell"); + + if (ammo == you.equip[EQ_WEAPON]) + you.wield_change = true; + } + else + canned_msg(MSG_NOTHING_HAPPENS); + break; + + case SPMSL_RETURNING: + if (set_item_ego_type( you.inv[ammo], OBJ_MISSILES, SPMSL_RETURNING )) + { + mprf("%s %s in your hand.", old_desc, + (you.inv[ammo].quantity == 1) ? "wiggles" : "wiggle"); + + if (ammo == you.equip[EQ_WEAPON]) + you.wield_change = true; + } + else + canned_msg(MSG_NOTHING_HAPPENS); + break; + + default: canned_msg(MSG_NOTHING_HAPPENS); + break; } } |