diff options
author | Nicholas Feinberg <pleasingfung@gmail.com> | 2014-07-13 20:13:21 -0700 |
---|---|---|
committer | Nicholas Feinberg <pleasingfung@gmail.com> | 2014-07-13 20:13:21 -0700 |
commit | 257f14127322a5881d1b4f275062f79d76afd95b (patch) | |
tree | c46c6b9debad78ffa240efb53e32a4689aafd3e9 /crawl-ref/source/mon-ench.cc | |
parent | ec5d89f7485c7bd1b4ccfd8c706516f1b501baa4 (diff) | |
download | crawl-ref-257f14127322a5881d1b4f275062f79d76afd95b.tar.gz crawl-ref-257f14127322a5881d1b4f275062f79d76afd95b.zip |
Make draining temporary (for monsters)
The hit dice-reduction effect of draining has historically had
several problems. It reduced monsters' maximum hp, which made it
look like they were getting *less* injured, since they had a
higher proportion of hp remaining. It lowered monster XP & piety
gains, which was irrelevant but misled new players who somehow
learned about it. It occasionally led to "degenerate" hit-and-run
tactics.
And most damningly of all, it hardly ever mattered - it
triggered on ~13% of hits, which meant that on low HD monsters
the extra damage would kill them before the effect was
noticeable, and against high HD monsters, the effect would only
ever be noticeable at all with the aforementioned hit-and-run
tactics.
So, to fix those problems, draining now gives a "drained" status,
that reduces monster HD for most combat-related purposes
(spellcasting, accuracy, damage, etc.), but not max hp, xp, or
piety. This is temporary, but will last 20-30 turns, and
refreshes every time the drain triggers - essentially, it should
last until you kill the monster, unless you run away.
The temp-status is now applied to the monster every time they get
drained; the chance of the drain brand activating has been reduced
to 1/2, from 2/3. This should focus the effects of the brand more
on the unique part of it, the draining/weakening effect.
As a bonus, this also means that players can no longer have their
followers permanently weakened by draining effects. Beogh buff!
Diffstat (limited to 'crawl-ref/source/mon-ench.cc')
-rw-r--r-- | crawl-ref/source/mon-ench.cc | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/crawl-ref/source/mon-ench.cc b/crawl-ref/source/mon-ench.cc index 2f3f5d5da8..3b4132b248 100644 --- a/crawl-ref/source/mon-ench.cc +++ b/crawl-ref/source/mon-ench.cc @@ -1001,6 +1001,11 @@ void monster::remove_enchantment_effect(const mon_enchant &me, bool quiet) simple_monster_message(this, " is no longer distracted by gold."); break; + case ENCH_DRAINED: + if (!quiet) + simple_monster_message(this, " seems less drained."); + break; + default: break; } @@ -1272,7 +1277,8 @@ void monster::apply_enchantment(const mon_enchant &me) break; } - // Deliberate fall through. + decay_enchantment(en); + break; case ENCH_SLOW: case ENCH_HASTE: @@ -1319,7 +1325,6 @@ void monster::apply_enchantment(const mon_enchant &me) case ENCH_SAP_MAGIC: case ENCH_CORROSION: case ENCH_GOLD_LUST: - // case ENCH_ROLLING: decay_enchantment(en); break; @@ -1341,6 +1346,7 @@ void monster::apply_enchantment(const mon_enchant &me) case ENCH_BATTLE_FRENZY: case ENCH_ROUSED: + case ENCH_DRAINED: decay_enchantment(en, false); break; @@ -2077,7 +2083,7 @@ static const char *enchant_names[] = "poison_vuln", "icemail", "agile", "frozen", "ephemeral_infusion", "black_mark", "grand_avatar", "sap magic", "shroud", "phantom_mirror", "bribed", "permabribed", - "corrosion", "gold_lust", "buggy", + "corrosion", "gold_lust", "drained", "buggy", }; static const char *_mons_enchantment_name(enchant_type ench) @@ -2141,8 +2147,8 @@ void mon_enchant::merge_killer(kill_category k, mid_t m) void mon_enchant::cap_degree() { - // Sickness is not capped. - if (ench == ENCH_SICK) + // Sickness & draining are not capped. + if (ench == ENCH_SICK || ench == ENCH_DRAINED) return; // Hard cap to simulate old enum behaviour, we should really throw this |