diff options
-rw-r--r-- | crawl-ref/source/describe.cc | 65 | ||||
-rw-r--r-- | crawl-ref/source/item_use.cc | 11 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 10 |
3 files changed, 82 insertions, 4 deletions
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index ce6056b292..1498093b9c 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -1021,6 +1021,16 @@ static std::string _describe_weapon(const item_def &item, bool verbose) description += "A skilled user can throw it in such a way " "that it will return to its owner."; break; + case SPWPN_PENETRATION: + description += "Ammo fired by it will pass through the " + "targets it hits, potentially hitting all targets in " + "its path until it reaches maximum range."; + break; + case SPWPN_SHADOW: + description += "If ammo fired by it kills a monster, " + "causing it to leave a corpse, the corpse will be " + "animated as a zombie friendly to the one who fired it."; + break; } } @@ -1174,15 +1184,26 @@ static std::string _describe_ammo( const item_def &item ) } } - bool can_launch = has_launcher(item); - bool can_throw = is_throwable(&you, item, true); - bool need_new_line = true; + bool can_launch = has_launcher(item); + bool can_throw = is_throwable(&you, item, true); + bool need_new_line = true; + bool always_destryoed = false; if (item.special && item_type_known(item)) { description += "$$"; std::string bolt_name; + std::string threw_or_fired; + if (can_throw) + { + threw_or_fired += "threw"; + if (can_launch) + threw_or_fired += " or "; + } + if (can_launch) + threw_or_fired += "fired"; + switch (item.special) { case SPMSL_FLAME: @@ -1211,6 +1232,8 @@ static std::string _describe_ammo( const item_def &item ) description += "it turns into a bolt of "; description += bolt_name; description += "."; + + always_destryoed = true; break; case SPMSL_POISONED: case SPMSL_POISONED_II: @@ -1223,6 +1246,37 @@ static std::string _describe_ammo( const item_def &item ) description += "A skilled user can throw it in such a way " "that it will return to its owner."; break; + case SPMSL_SHADOW: + description += "If it kills a monster, causing it to leave a " + "corpse, the corpse will be animated as a zombie friendly " + "to the one who " + threw_or_fired + " it."; + break; + case SPMSL_PENETRATION: + description += "It will pass through any targets it hits, " + "potentially hitting all targets in its path until it " + "reaches maximum range."; + break; + case SPMSL_DISPERSAL: + description += "Any target it hits will blink, with a " + "tendancy towards blinking further away from the one who " + + threw_or_fired + " it."; + break; + case SPMSL_EXPLODING: + description += "It will explode into fragemnets upon hitting " + "a target, hitting an obstruction, or reaching the end of " + "its range."; + always_destryoed = true; + break; + case SPMSL_STEEL: + description += "Compared to normal ammo it does 50% more damage, " + "is destroyed only 1/10th upon impact, and weighs " + "three times as much."; + break; + case SPMSL_SILVER: + description += "Compared to normal ammo it does twice as much " + "damage to the undead, demons and shapeshifters, and " + "weighs twice as much."; + break; } need_new_line = false; @@ -1258,7 +1312,10 @@ static std::string _describe_ammo( const item_def &item ) } } - append_missile_info(description); + if (always_destryoed) + description += "$It will always be destroyed upon impact."; + else + append_missile_info(description); if (item_ident( item, ISFLAG_KNOW_PLUSES ) && item.plus >= MAX_WPN_ENCHANT) description += "$It is maximally enchanted."; diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc index 36a15df6ec..6d7c38d2be 100644 --- a/crawl-ref/source/item_use.cc +++ b/crawl-ref/source/item_use.cc @@ -650,6 +650,16 @@ void wield_effects(int item_wield_2, bool showMsgs) "of random colours."); break; + case SPWPN_PENETRATION: + mprf("Your %s briefly pass through it before you manage " + "to get a firm grip on it.", + you.hand_name(true).c_str()); + break; + + case SPWPN_SHADOW: + mpr("It is briefly surrounded by shifting shadows."); + break; + case SPWPN_SINGING_SWORD: if (!was_known) { @@ -2109,6 +2119,7 @@ void setup_missile_beam(const actor *agent, bolt &beam, item_def &item, expl->name = replace_all(expl->name, ammo.name(DESC_PLAIN), short_name); } + expl->name = "explosion of " + expl->name; beam.special_explosion = expl; } diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index c0b5bcbb89..8a05badd17 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -4049,6 +4049,16 @@ void monsters::equip_weapon(item_def &item, int near, bool msg) mpr("It is briefly surrounded by a scintillating aura of " "random colours."); break; + case SPWPN_PENETRATION: + mprf("%s %s briefly pass through it before %s manages to get a " + "firm grip on it.", + pronoun(PRONOUN_CAP_POSSESSIVE).c_str(), + hand_name(true).c_str(), + pronoun(PRONOUN_NOCAP).c_str()); + break; + case SPWPN_SHADOW: + mpr("It is briefly surrounded by shifting shadows."); + break; default: // A ranged weapon without special message is known to be unbranded. |