summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/ranged_attack.cc
diff options
context:
space:
mode:
authorSteve Melenchuk <smelenchuk@gmail.com>2014-04-17 20:11:33 -0600
committerSteve Melenchuk <smelenchuk@gmail.com>2014-04-27 17:02:33 -0600
commita0b9eea05605c1024bf6387992650f60ee2fb501 (patch)
tree883356e244151bdd7d0722be6bb79927f671bb6f /crawl-ref/source/ranged_attack.cc
parent51a3c3daa54985a74a5024480c4b9819e9c41da9 (diff)
downloadcrawl-ref-a0b9eea05605c1024bf6387992650f60ee2fb501.tar.gz
crawl-ref-a0b9eea05605c1024bf6387992650f60ee2fb501.zip
Make throwing nets do something on hit again.
Diffstat (limited to 'crawl-ref/source/ranged_attack.cc')
-rw-r--r--crawl-ref/source/ranged_attack.cc40
1 files changed, 28 insertions, 12 deletions
diff --git a/crawl-ref/source/ranged_attack.cc b/crawl-ref/source/ranged_attack.cc
index 2dedafb16f..896b9858e5 100644
--- a/crawl-ref/source/ranged_attack.cc
+++ b/crawl-ref/source/ranged_attack.cc
@@ -22,6 +22,7 @@
#include "random.h"
#include "stuff.h"
#include "teleport.h"
+#include "traps.h"
ranged_attack::ranged_attack(actor *attk, actor *defn, item_def *proj,
bool tele) :
@@ -243,20 +244,33 @@ bool ranged_attack::handle_phase_hit()
if (!attack_ignores_shield(false))
range_used = BEAM_STOP;
- damage_done = calc_damage();
- if (damage_done > 0
- || projectile->base_type == OBJ_MISSILES
- && projectile->sub_type == MI_NEEDLE)
+ if (projectile->base_type == OBJ_MISSILES
+ && projectile->sub_type == MI_THROWING_NET)
{
- if (!handle_phase_damaged())
- return false;
+ set_attack_verb();
+ announce_hit();
+ if (defender->is_player())
+ player_caught_in_net();
+ else
+ monster_caught_in_net(defender->as_monster(), attacker);
}
- else if (needs_message)
+ else
{
- mprf("%s %s %s but does no damage.",
- projectile->name(DESC_THE).c_str(),
- attack_verb.c_str(),
- defender->name(DESC_THE).c_str());
+ damage_done = calc_damage();
+ if (damage_done > 0
+ || projectile->base_type == OBJ_MISSILES
+ && projectile->sub_type == MI_NEEDLE)
+ {
+ if (!handle_phase_damaged())
+ return false;
+ }
+ else if (needs_message)
+ {
+ mprf("%s %s %s but does no damage.",
+ projectile->name(DESC_THE).c_str(),
+ attack_verb.c_str(),
+ defender->name(DESC_THE).c_str());
+ }
}
if (using_weapon())
@@ -732,7 +746,9 @@ void ranged_attack::announce_hit()
projectile->name(DESC_THE).c_str(),
attack_verb.c_str(),
defender_name().c_str(),
- stab_attempt && stab_bonus > 0 ? " in a vulnerable spot" : "",
+ damage_done > 0 && stab_attempt && stab_bonus > 0
+ ? " in a vulnerable spot"
+ : "",
debug_damage_number().c_str(),
attack_strength_punctuation().c_str());
}