summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-07-15 12:15:52 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-07-15 12:15:52 +0000
commitd3c9ed21e760065a2faad5b371efdccf5fdace78 (patch)
tree6fa6a8fdd9516b3ab5c655d3490561033aa580a6 /crawl-ref/source
parent4d8f70826f5165f0098e427e8ccc35cf4d164693 (diff)
downloadcrawl-ref-d3c9ed21e760065a2faad5b371efdccf5fdace78.tar.gz
crawl-ref-d3c9ed21e760065a2faad5b371efdccf5fdace78.zip
Drop Control Teleport and Controlled Blink by one spell level each.
[1750729] Controlled Blink (the spell) now decays to semi-controlled blink on levels that block teleport control and is less likely to be blocked by the Abyss. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1873 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/acr.cc2
-rw-r--r--crawl-ref/source/decks.cc2
-rw-r--r--crawl-ref/source/item_use.cc2
-rw-r--r--crawl-ref/source/spells1.cc19
-rw-r--r--crawl-ref/source/spells1.h2
-rw-r--r--crawl-ref/source/spl-cast.cc2
-rw-r--r--crawl-ref/source/spl-data.h4
7 files changed, 23 insertions, 10 deletions
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc
index abb5544e27..d85a080e7e 100644
--- a/crawl-ref/source/acr.cc
+++ b/crawl-ref/source/acr.cc
@@ -556,7 +556,7 @@ static void handle_wizard_command( void )
break;
case 'b':
- blink(); // wizards can always blink
+ blink(1000, true); // wizards can always blink
break;
case '~':
diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc
index 8b257d4d94..aca8099098 100644
--- a/crawl-ref/source/decks.cc
+++ b/crawl-ref/source/decks.cc
@@ -502,7 +502,7 @@ static void warp_card(int power, deck_rarity_type rarity)
{
const int control_level = get_power_level(power, rarity);
if ( control_level >= 2 )
- blink();
+ blink(1000, false);
else if ( control_level == 1 )
cast_semi_controlled_blink(power / 4);
else
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index a27ec3ae27..8e308e77c9 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -3501,7 +3501,7 @@ void read_scroll(void)
break;
case SCR_BLINKING:
- blink();
+ blink(1000, false);
break;
case SCR_TELEPORTATION:
diff --git a/crawl-ref/source/spells1.cc b/crawl-ref/source/spells1.cc
index d850fe9692..85107a9165 100644
--- a/crawl-ref/source/spells1.cc
+++ b/crawl-ref/source/spells1.cc
@@ -47,20 +47,33 @@
#include "stuff.h"
#include "view.h"
-int blink(void)
+static bool abyss_blocks_teleport(bool cblink)
{
- struct dist beam;
+ // Lugonu worshippers get their perks.
+ if (you.religion == GOD_LUGONU)
+ return (false);
+
+ // Controlled Blink (the spell) works quite reliably in the Abyss.
+ return (cblink? one_chance_in(3) : !one_chance_in(3));
+}
+
+int blink(int pow, bool high_level_controlled_blink)
+{
+ dist beam;
// yes, there is a logic to this ordering {dlb}:
if (scan_randarts(RAP_PREVENT_TELEPORTATION))
mpr("You feel a weird sense of stasis.");
- else if (you.level_type == LEVEL_ABYSS && !one_chance_in(3))
+ else if (you.level_type == LEVEL_ABYSS
+ && abyss_blocks_teleport(high_level_controlled_blink))
mpr("The power of the Abyss keeps you in your place!");
else if (you.duration[DUR_CONF])
random_blink(false);
else if (!allow_control_teleport(true))
{
mpr("A powerful magic interferes with your control of the blink.");
+ if (high_level_controlled_blink)
+ return (cast_semi_controlled_blink(pow));
random_blink(false);
}
else
diff --git a/crawl-ref/source/spells1.h b/crawl-ref/source/spells1.h
index e1f333b07a..0f6e1756b3 100644
--- a/crawl-ref/source/spells1.h
+++ b/crawl-ref/source/spells1.h
@@ -64,7 +64,7 @@ void big_cloud(cloud_type cl_type, kill_category whose, int cl_x, int cl_y,
/* ***********************************************************************
* called from: acr (WIZARD only) - item_use - spell
* *********************************************************************** */
-int blink(void);
+int blink(int pow, bool high_level_controlled_blink);
/* ***********************************************************************
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index 16c5287227..473f450fd0 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -1089,7 +1089,7 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
break;
case SPELL_CONTROLLED_BLINK:
- if (blink() == -1)
+ if (blink(powc, true) == -1)
return (SPRET_ABORT);
break;
diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h
index 2dea41640e..a2b0e4509e 100644
--- a/crawl-ref/source/spl-data.h
+++ b/crawl-ref/source/spl-data.h
@@ -395,7 +395,7 @@
SPELL_CONTROLLED_BLINK, "Controlled Blink",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 8,
+ 7,
0,
NULL,
false,
@@ -1409,7 +1409,7 @@
SPELL_CONTROL_TELEPORT, "Control Teleport",
SPTYP_ENCHANTMENT | SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 5,
+ 4,
200,
NULL,
false,