summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/externs.h
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-12 14:39:38 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-06-12 14:39:38 +0000
commit1bff3c05ddd42eda0d5310b4d1f2671aae52815d (patch)
treef368dee0160428d811be9f91e403a5cdec83c3c8 /crawl-ref/source/externs.h
parenta6faebe0c260af46518fa09ed6fce3992ce478a2 (diff)
downloadcrawl-ref-1bff3c05ddd42eda0d5310b4d1f2671aae52815d.tar.gz
crawl-ref-1bff3c05ddd42eda0d5310b4d1f2671aae52815d.zip
Implement the Petrify spell in a rather basic variant, and replace the
player spell "Paralyse" with it, i.e. not the wand/potion/misc. effects. Petrify is a 4th level spell of the Enchantment/Transmigrations school (a unique combination, I believe), all other values (incl. the level) were shamelessly stolen from Paralysis. Anyway, it consists of two elements (so I actually added TWO new enchantments), Petrifying and Petrified. A monster that is petrifying cannot move around but can perform actions like hitting adjacent monsters or casting spells at a slowed rate (1.5 of the normal cost). Once this sub-enchantment runs out (happens faster) the monster cannot move or act anymore, so it works like Paralysis. The damage you do during stabbing is one third of what you'd do otherwise, for both states of enchantment, and for both stabbing counts as unchivalric behaviour. It has not been implemented as a monster spell, and ghosts of characters that had it will use Paralyse instead. Consequently, the effect on the player (in self targetting) only handles the Petrified part. Numbers, esp. enchantment timeout, will need tweaking. They're currently Petrifying: cturn = 50 / _mod_speed(10, mons->speed); Petrified: cturn = std::max(8, 150 / (1 + modded_speed(mons, 5))) because I wanted the first to always run out faster than the second, but at the same time make the ratio of Petrifying/Petrified tilt in favour of the first for powerful monsters. The numbers are more or less made up, and tested with different monsters in wizard mode. Still, could be anything between too weak and overpowered, though the latter is more likely. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5761 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/externs.h')
-rw-r--r--crawl-ref/source/externs.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h
index dc30418f83..3cbf438d20 100644
--- a/crawl-ref/source/externs.h
+++ b/crawl-ref/source/externs.h
@@ -158,6 +158,7 @@ public:
virtual void poison(actor *attacker, int amount = 1) = 0;
virtual bool sicken(int amount) = 0;
virtual void paralyse(int strength) = 0;
+ virtual void petrify(int strength) = 0;
virtual void slow_down(int strength) = 0;
virtual void confuse(int strength) = 0;
virtual void rot(actor *attacker, int rotlevel, int immediate_rot) = 0;
@@ -199,6 +200,7 @@ public:
virtual bool airborne() const;
virtual bool paralysed() const = 0;
+ virtual bool cannot_move() const = 0;
virtual bool confused() const = 0;
virtual bool caught() const = 0;
virtual bool asleep() const { return (false); }
@@ -209,7 +211,7 @@ public:
virtual bool incapacitated() const
{
- return paralysed() || asleep() || confused() || caught();
+ return cannot_move() || asleep() || confused() || caught();
}
virtual int holy_aura() const
@@ -855,6 +857,7 @@ public:
void poison(actor *agent, int amount = 1);
bool sicken(int amount);
void paralyse(int str);
+ void petrify(int str);
void slow_down(int str);
void confuse(int strength);
void rot(actor *agent, int rotlevel, int immed_rot);
@@ -883,6 +886,7 @@ public:
bool permanent_flight() const;
bool paralysed() const;
+ bool cannot_move() const;
bool confused() const;
bool caught() const;
bool backlit(bool check_haloed = true) const;
@@ -1215,6 +1219,8 @@ public:
bool can_see(const actor *target) const;
bool is_icy() const;
bool paralysed() const;
+ bool cannot_move() const;
+ bool cannot_act() const;
bool confused() const;
bool caught() const;
bool asleep() const;
@@ -1231,6 +1237,7 @@ public:
void poison(actor *agent, int amount = 1);
bool sicken(int strength);
void paralyse(int str);
+ void petrify(int str);
void slow_down(int str);
void confuse(int strength);
void rot(actor *agent, int rotlevel, int immed_rot);