summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-03-14 18:56:47 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-03-14 18:56:47 +0000
commitb871ff5c1c4ae1e0fd4e27a84ca7dbcdc2eec539 (patch)
tree97bccbbd3bee3a135205df6a507cfcf4bd6c3d59
parent0282f209e8d708396f20c99e8b212cfa488aca37 (diff)
downloadcrawl-ref-b871ff5c1c4ae1e0fd4e27a84ca7dbcdc2eec539.tar.gz
crawl-ref-b871ff5c1c4ae1e0fd4e27a84ca7dbcdc2eec539.zip
Move spell targeting before miscast check. Not everything is moved - spells
with weird targeting (like Conjure Flame) still target after the miscast check. Tweaked targeting prompt slightly. Don't dock turn for zapping non-wand. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1039 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/abl-show.cc11
-rw-r--r--crawl-ref/source/direct.cc102
-rw-r--r--crawl-ref/source/direct.h3
-rw-r--r--crawl-ref/source/item_use.cc1
-rw-r--r--crawl-ref/source/spells1.cc75
-rw-r--r--crawl-ref/source/spells1.h8
-rw-r--r--crawl-ref/source/spells3.cc13
-rw-r--r--crawl-ref/source/spells3.h4
-rw-r--r--crawl-ref/source/spl-book.cc2
-rw-r--r--crawl-ref/source/spl-cast.cc262
-rw-r--r--crawl-ref/source/spl-data.h558
-rw-r--r--crawl-ref/source/spl-util.cc10
-rw-r--r--crawl-ref/source/spl-util.h5
-rw-r--r--crawl-ref/source/tutorial.cc5
14 files changed, 589 insertions, 470 deletions
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc
index 4e4dd2ad03..ba15074f49 100644
--- a/crawl-ref/source/abl-show.cc
+++ b/crawl-ref/source/abl-show.cc
@@ -561,12 +561,17 @@ bool activate_ability(void)
}
case ABIL_DELAYED_FIREBALL:
+ {
+ if (spell_direction(spd, beam, DIR_NONE, TARG_ENEMY) == -1)
+ return (false);
+
// Note: power level of ball calculated at release -- bwr
- fireball( calc_spell_power( SPELL_DELAYED_FIREBALL, true ) );
+ fireball( calc_spell_power( SPELL_DELAYED_FIREBALL, true ), beam );
// only one allowed since this is instantaneous -- bwr
you.attribute[ ATTR_DELAYED_FIREBALL ] = 0;
break;
+ }
case ABIL_GLAMOUR:
if (you.duration[DUR_GLAMOUR])
@@ -784,7 +789,7 @@ bool activate_ability(void)
case ABIL_HELLFIRE:
if (your_spells(SPELL_HELLFIRE,
- 20 + you.experience_level, false) == -1)
+ 20 + you.experience_level, false) == SPRET_ABORT)
return (false);
break;
@@ -1252,7 +1257,7 @@ bool activate_ability(void)
}
if (your_spells( SPELL_HELLFIRE,
- 20 + you.experience_level, false ) == -1)
+ 20 + you.experience_level, false ) == SPRET_ABORT)
return (false);
you.duration[DUR_BREATH_WEAPON] +=
diff --git a/crawl-ref/source/direct.cc b/crawl-ref/source/direct.cc
index a1ead653ea..5c2ef946be 100644
--- a/crawl-ref/source/direct.cc
+++ b/crawl-ref/source/direct.cc
@@ -92,25 +92,19 @@ static char find_square( unsigned char xps, unsigned char yps,
static int targeting_cmd_to_compass( command_type command );
static void describe_oos_square(int x, int y);
+static void extend_move_to_edge(dist &moves);
static bool is_mapped(int x, int y)
{
return (is_player_mapped(x, y));
}
-static command_type read_direction_key(
- bool just_looking = false,
- bool target_unshifted = false,
- coord_def where = coord_def())
+static command_type read_direction_key(bool just_looking = false)
{
- const bool unshifted_dir = target_unshifted && where == you.pos();
-
flush_input_buffer( FLUSH_BEFORE_COMMAND );
int key = unmangle_direction_keys(getchm(KC_TARGETING),KC_TARGETING);
- if (unshifted_dir && strchr("hjklyubn", key))
- key = toupper(key);
-
+
switch ( key )
{
case ESCAPE: return CMD_TARGET_CANCEL;
@@ -241,6 +235,35 @@ static int targeting_cmd_to_feature( command_type command )
}
}
+static command_type shift_direction(command_type cmd)
+{
+ switch (cmd)
+ {
+ case CMD_TARGET_DOWN_LEFT: return CMD_TARGET_DIR_DOWN_LEFT;
+ case CMD_TARGET_LEFT: return CMD_TARGET_DIR_LEFT;
+ case CMD_TARGET_DOWN: return CMD_TARGET_DIR_DOWN;
+ case CMD_TARGET_UP: return CMD_TARGET_DIR_UP;
+ case CMD_TARGET_RIGHT: return CMD_TARGET_DIR_RIGHT;
+ case CMD_TARGET_DOWN_RIGHT: return CMD_TARGET_DIR_DOWN_RIGHT;
+ case CMD_TARGET_UP_RIGHT: return CMD_TARGET_DIR_UP_RIGHT;
+ case CMD_TARGET_UP_LEFT: return CMD_TARGET_DIR_UP_LEFT;
+ default: return (cmd);
+ }
+}
+
+static const char *target_mode_help_text(int mode)
+{
+ switch (mode)
+ {
+ case DIR_NONE:
+ return "? - help, Shift-Dir - shoot in a straight line";
+ case DIR_TARGET:
+ return "? - help, Dir - move target cursor";
+ default:
+ return "? - help";
+ }
+}
+
//---------------------------------------------------------------
//
// direction
@@ -262,7 +285,7 @@ static int targeting_cmd_to_feature( command_type command )
//
//---------------------------------------------------------------
void direction(struct dist& moves, targeting_type restricts,
- int mode, bool just_looking)
+ int mode, bool just_looking, const char *prompt)
{
// NOTE: Even if just_looking is set, moves is still interesting,
// because we can travel there!
@@ -310,8 +333,8 @@ void direction(struct dist& moves, targeting_type restricts,
// Prompts might get scrolled off if you have too few lines available.
// We'll live with that.
if ( !just_looking )
- mpr("Aim (press '?' for help, Shift-Dir to shoot in a straight line.)",
- MSGCH_PROMPT);
+ mprf(MSGCH_PROMPT, "%s (%s)", prompt? prompt : "Aim",
+ target_mode_help_text(restricts));
while (1)
{
@@ -336,10 +359,14 @@ void direction(struct dist& moves, targeting_type restricts,
key_command = CMD_TARGET_CYCLE_FORWARD; // find closest enemy
}
else
- key_command = read_direction_key(just_looking,
- target_unshifted,
- coord_def(moves.tx, moves.ty));
+ key_command = read_direction_key(just_looking);
+ if (target_unshifted && moves.tx == you.x_pos && moves.ty == you.y_pos
+ && restricts != DIR_TARGET)
+ {
+ key_command = shift_direction(key_command);
+ }
+
if (target_unshifted &&
(key_command == CMD_TARGET_CYCLE_FORWARD
|| key_command == CMD_TARGET_CYCLE_BACK
@@ -400,8 +427,16 @@ void direction(struct dist& moves, targeting_type restricts,
{
// Direction not allowed, so just move in that direction.
// Maybe make this a bigger jump?
- moves.tx += Compass[i].x;
- moves.ty += Compass[i].y;
+ if (restricts == DIR_TARGET)
+ {
+ moves.tx += Compass[i].x * 3;
+ moves.ty += Compass[i].y * 3;
+ }
+ else
+ {
+ moves.tx += Compass[i].x;
+ moves.ty += Compass[i].y;
+ }
}
break;
@@ -679,6 +714,39 @@ void direction(struct dist& moves, targeting_type restricts,
skip_iter = false; // only skip one iteration at most
}
moves.isMe = (moves.tx == you.x_pos && moves.ty == you.y_pos);
+
+ // We need this for directional explosions, otherwise they'll explode one
+ // square away from the player.
+ extend_move_to_edge(moves);
+}
+
+static void extend_move_to_edge(dist &moves)
+{
+ if (!moves.dx && !moves.dy)
+ return;
+
+ // now the tricky bit - extend the target x,y out to map edge.
+ int mx = 0, my = 0;
+
+ if (moves.dx > 0)
+ mx = (GXM - 1) - you.x_pos;
+ if (moves.dx < 0)
+ mx = you.x_pos;
+
+ if (moves.dy > 0)
+ my = (GYM - 1) - you.y_pos;
+ if (moves.dy < 0)
+ my = you.y_pos;
+
+ if (!(mx == 0 || my == 0))
+ {
+ if (mx < my)
+ my = mx;
+ else
+ mx = my;
+ }
+ moves.tx = you.x_pos + moves.dx * mx;
+ moves.ty = you.y_pos + moves.dy * my;
}
// Attempts to describe a square that's not in line-of-sight. If
diff --git a/crawl-ref/source/direct.h b/crawl-ref/source/direct.h
index 015654bcac..8522b5d10b 100644
--- a/crawl-ref/source/direct.h
+++ b/crawl-ref/source/direct.h
@@ -24,7 +24,8 @@
* *********************************************************************** */
void direction( struct dist &moves, targeting_type restricts = DIR_NONE,
- int mode = TARG_ANY, bool just_looking = false );
+ int mode = TARG_ANY, bool just_looking = false,
+ const char *prompt = NULL );
bool in_los_bounds(int x, int y);
bool in_viewport_bounds(int x, int y);
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 9f9bfab85c..2cb6d9f5a0 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -2533,7 +2533,6 @@ void zap_wand(void)
if (you.inv[item_slot].base_type != OBJ_WANDS)
{
canned_msg(MSG_NOTHING_HAPPENS);
- you.turn_is_over = true;
return;
}
diff --git a/crawl-ref/source/spells1.cc b/crawl-ref/source/spells1.cc
index 9ebca41787..127f932915 100644
--- a/crawl-ref/source/spells1.cc
+++ b/crawl-ref/source/spells1.cc
@@ -172,49 +172,14 @@ void random_blink(bool allow_partial_control)
return;
} // end random_blink()
-int fireball(int power)
+int fireball(int power, bolt &beam)
{
- struct dist fire_ball;
-
- message_current_target();
- direction( fire_ball, DIR_NONE, TARG_ENEMY );
-
- if (!fire_ball.isValid)
- {
- canned_msg(MSG_OK);
- return (-1);
- }
- else
- {
- struct bolt beam;
-
- beam.source_x = you.x_pos;
- beam.source_y = you.y_pos;
- beam.set_target(fire_ball);
-
- zapping(ZAP_FIREBALL, power, beam);
- }
-
+ zapping(ZAP_FIREBALL, power, beam);
return (1);
} // end fireball()
-int cast_fire_storm(int powc)
+int cast_fire_storm(int powc, bolt &beam)
{
- struct bolt beam;
- struct dist targ;
-
- mpr("Where?");
-
- direction( targ, DIR_TARGET, TARG_ENEMY );
-
- beam.set_target(targ);
-
- if (!targ.isValid)
- {
- canned_msg(MSG_OK);
- return (-1);
- }
-
beam.ex_size = 2 + (random2(powc) > 75);
beam.flavour = BEAM_LAVA;
beam.type = SYM_ZAP;
@@ -483,25 +448,8 @@ int conjure_flame(int pow)
return (1);
} // end cast_conjure_flame()
-int stinking_cloud( int pow )
+int stinking_cloud( int pow, bolt &beem )
{
- struct dist spelld;
- struct bolt beem;
-
- message_current_target();
- direction( spelld, DIR_NONE, TARG_ENEMY );
-
- if (!spelld.isValid)
- {
- canned_msg(MSG_OK);
- return (-1);
- }
-
- beem.set_target(spelld);
-
- beem.source_x = you.x_pos;
- beem.source_y = you.y_pos;
-
beem.name = "ball of vapour";
beem.colour = GREEN;
beem.range = 6;
@@ -522,20 +470,9 @@ int stinking_cloud( int pow )
return (1);
} // end stinking_cloud()
-int cast_big_c(int pow, char cty)
+int cast_big_c(int pow, char cty, bolt &beam)
{
- struct dist cdis;
-
- mpr("Where do you want to put it?", MSGCH_PROMPT);
- direction( cdis, DIR_TARGET, TARG_ENEMY );
-
- if (!cdis.isValid)
- {
- canned_msg(MSG_OK);
- return (-1);
- }
-
- big_cloud( cty, cdis.tx, cdis.ty, pow, 8 + random2(3) );
+ big_cloud( cty, beam.target_x, beam.target_y, pow, 8 + random2(3) );
return (1);
} // end cast_big_c()
diff --git a/crawl-ref/source/spells1.h b/crawl-ref/source/spells1.h
index 64481d53bb..1f684139c4 100644
--- a/crawl-ref/source/spells1.h
+++ b/crawl-ref/source/spells1.h
@@ -69,19 +69,19 @@ int blink(void);
/* ***********************************************************************
* called from: spell
* *********************************************************************** */
-int cast_big_c(int pow, char cty);
+int cast_big_c(int pow, char cty, bolt &beam);
void cast_confusing_touch(int power);
void cast_cure_poison(int mabil);
int allowed_deaths_door_hp(void);
void cast_deaths_door(int pow);
-int cast_fire_storm(int powc);
+int cast_fire_storm(int powc, bolt &beam);
bool cast_revivification(int power);
void cast_berserk(void);
void cast_ring_of_flames(int power);
int conjure_flame(int pow);
void extension(int pow);
-int fireball(int power);
-int stinking_cloud(int pow);
+int fireball(int power, bolt &beam);
+int stinking_cloud(int pow, bolt &beam);
void abjuration(int pow);
// last updated 24may2000 {dlb}
diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc
index 77aa6e33c5..7427ea6955 100644
--- a/crawl-ref/source/spells3.cc
+++ b/crawl-ref/source/spells3.cc
@@ -230,23 +230,12 @@ int cast_smiting(int power)
return (success);
} // end cast_smiting()
-int airstrike(int power)
+int airstrike(int power, dist &beam)
{
bool success = false;
- struct dist beam;
struct monsters *monster = 0; // NULL {dlb}
int hurted = 0;
- mpr("Strike whom?", MSGCH_PROMPT);
-
- direction( beam, DIR_TARGET, TARG_ENEMY );
-
- if (!beam.isValid)
- {
- canned_msg(MSG_OK);
- return (-1);
- }
-
if (mgrd[beam.tx][beam.ty] == NON_MONSTER
|| beam.isMe)
{
diff --git a/crawl-ref/source/spells3.h b/crawl-ref/source/spells3.h
index 9eea54e646..8d8a77e1b0 100644
--- a/crawl-ref/source/spells3.h
+++ b/crawl-ref/source/spells3.h
@@ -13,6 +13,8 @@
#define SPELLS3_H
+struct dist;
+
// updated 24may2000 {dlb}
/* ***********************************************************************
* called from: spells1 - spells3
@@ -24,7 +26,7 @@ bool allow_control_teleport( bool silent = false );
/* ***********************************************************************
* called from: spell
* *********************************************************************** */
-int airstrike(int power);
+int airstrike(int power, dist &beam);
// updated 24may2000 {dlb}
diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc
index 7c78879df0..2f850333c0 100644
--- a/crawl-ref/source/spl-book.cc
+++ b/crawl-ref/source/spl-book.cc
@@ -1534,7 +1534,7 @@ int staff_spell( int staff )
return (-1);
}
- if (your_spells(specspell, powc, false) == -1)
+ if (your_spells(specspell, powc, false) == SPRET_ABORT)
return (-1);
you.inv[staff].plus -= mana;
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index 4a8dd73ee1..76178e0a5f 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -617,11 +617,11 @@ bool cast_a_spell(void)
random_uselessness( 2 + random2(7), 0 );
else
{
- int cast_result = your_spells( spell );
- if (cast_result == -1)
+ const int cast_result = your_spells( spell );
+ if (cast_result == SPRET_ABORT)
return (false);
- exercise_spell( spell, true, cast_result );
+ exercise_spell( spell, true, cast_result == SPRET_SUCCESS );
did_god_conduct( DID_SPELL_CASTING, 1 + random2(5) );
}
@@ -771,9 +771,36 @@ void spellcasting_side_effects(int spc2, bool idonly = false)
alert_nearby_monsters();
}
-// returns 1 if spell is successfully cast for purposes of exercising and 0
-// otherwise (note: false == less exercise, not none). If the player aborts the
-// spell, returns -1.
+static bool spell_is_uncastable(int spell)
+{
+ if (you.is_undead && spell_typematch( spell, SPTYP_HOLY ))
+ {
+ mpr( "You can't use this type of magic!" );
+ return (true);
+ }
+
+ // Normally undead can't memorize these spells, so this check is
+ // to catch those in Lich form. As such, we allow the Lich form
+ // to be extended here. -- bwr
+ if (spell != SPELL_NECROMUTATION
+ && undead_cannot_memorise( spell, you.is_undead ))
+ {
+ mpr( "You cannot cast that spell in your current form!" );
+ return (true);
+ }
+
+ if (spell == SPELL_SYMBOL_OF_TORMENT && player_res_torment())
+ {
+ mpr("To torment others, one must first know what torment means. ");
+ return (true);
+ }
+
+ return (false);
+}
+
+// returns SPRET_SUCCESS if spell is successfully cast for purposes of
+// exercising, SPRET_FAIL otherwise, or SPRET_ABORT if the player canceled
+// the casting.
int your_spells( int spc2, int powc, bool allow_fail )
{
int dem_hor = 0;
@@ -784,6 +811,44 @@ int your_spells( int spc2, int powc, bool allow_fail )
// [dshaligram] Any action that depends on the spellcasting attempt to have
// succeeded must be performed after the switch()
+ if (spell_is_uncastable(spc2))
+ return (SPRET_ABORT);
+
+ const int flags = get_spell_flags(spc2);
+
+ // XXX: This handles only some of the cases where spells need targeting...
+ // there are others that do their own that will be missed by this
+ // (and thus will not properly ESC without cost because of it).
+ // Hopefully, those will eventually be fixed. -- bwr
+ if (flags & SPFLAG_TARGETING_MASK)
+ {
+ int targ = (testbits(flags, SPFLAG_HELPFUL) ? TARG_FRIEND : TARG_ENEMY);
+
+ targeting_type dir =
+ (testbits( flags, SPFLAG_TARGET ) ? DIR_TARGET :
+ testbits( flags, SPFLAG_GRID ) ? DIR_TARGET :
+ testbits( flags, SPFLAG_DIR ) ? DIR_DIR : DIR_NONE);
+
+ if (spell_direction( spd, beam, dir, targ,
+ get_spell_target_prompt(spc2) ) == -1)
+ return (SPRET_ABORT);
+
+ if (testbits( flags, SPFLAG_NOT_SELF ) && spd.isMe)
+ {
+ if (spc2 == SPELL_TELEPORT_OTHER || spc2 == SPELL_HEAL_OTHER
+ || spc2 == SPELL_POLYMORPH_OTHER)
+ {
+ mpr( "Sorry, this spell works on others only." );
+ }
+ else
+ {
+ canned_msg(MSG_UNTHINKING_ACT);
+ }
+
+ return (SPRET_ABORT);
+ }
+ }
+
// Added this so that the passed in powc can have meaning -- bwr
if (powc == 0)
powc = calc_spell_power( spc2, true );
@@ -850,34 +915,15 @@ int your_spells( int spc2, int powc, bool allow_fail )
if (you.religion == GOD_XOM && random2(75) < spell_mana(spc2))
Xom_acts(coinflip(), spell_mana(spc2), false);
- return (0);
+ return (SPRET_FAIL);
}
}
- if (you.is_undead && spell_typematch( spc2, SPTYP_HOLY ))
- {
- mpr( "You can't use this type of magic!" );
- return (-1);
- }
-
- // Normally undead can't memorize these spells, so this check is
- // to catch those in Lich form. As such, we allow the Lich form
- // to be extended here. -- bwr
- if (spc2 != SPELL_NECROMUTATION
- && undead_cannot_memorise( spc2, you.is_undead ))
- {
- mpr( "You cannot cast that spell in your current form!" );
- return (-1);
- }
-
#if DEBUG_DIAGNOSTICS
snprintf( info, INFO_SIZE, "Spell #%d, power=%d", spc2, powc );
mpr( info, MSGCH_DIAGNOSTICS );
#endif
-#define SPELL_DIR(s, b) if (spell_direction(spd, beam) == -1) return -1; \
- else
-
switch (spc2)
{
case SPELL_IDENTIFY:
@@ -905,14 +951,11 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_MAGIC_DART:
- SPELL_DIR(spd, beam);
-
zapping(ZAP_MAGIC_DARTS, powc, beam);
break;
case SPELL_FIREBALL:
- if (fireball(powc) == -1)
- return (-1);
+ fireball(powc, beam);
break;
case SPELL_DELAYED_FIREBALL:
@@ -955,73 +998,51 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_STRIKING:
- SPELL_DIR(spd, beam);
zapping( ZAP_STRIKING, powc, beam );
break;
case SPELL_CONJURE_FLAME:
if (conjure_flame(powc) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_DIG:
- SPELL_DIR(spd, beam);
- if (spd.isMe)
- {
- canned_msg(MSG_UNTHINKING_ACT);
- return (false);
- }
zapping(ZAP_DIGGING, powc, beam);
break;
case SPELL_BOLT_OF_FIRE:
- SPELL_DIR(spd, beam);
zapping(ZAP_FIRE, powc, beam);
break;
case SPELL_BOLT_OF_COLD:
- SPELL_DIR(spd, beam);
zapping(ZAP_COLD, powc, beam);
break;
case SPELL_LIGHTNING_BOLT:
- SPELL_DIR(spd, beam);
zapping(ZAP_LIGHTNING, powc, beam);
break;
case SPELL_BOLT_OF_MAGMA:
- SPELL_DIR(spd, beam);
zapping(ZAP_MAGMA, powc, beam);
break;
case SPELL_POLYMORPH_OTHER:
- SPELL_DIR(spd, beam);
- if (spd.isMe)
- {
- mpr("Sorry, it doesn't work like that.");
- return (-1);
- }
zapping(ZAP_POLYMORPH_OTHER, powc, beam);
break;
case SPELL_SLOW:
- SPELL_DIR(spd, beam);
zapping(ZAP_SLOWING, powc, beam);
break;
case SPELL_HASTE:
- if (spell_direction(spd, beam, DIR_NONE, TARG_FRIEND) == -1)
- return (-1);
zapping(ZAP_HASTING, powc, beam);
break;
case SPELL_PARALYZE:
- SPELL_DIR(spd, beam);
zapping(ZAP_PARALYSIS, powc, beam);
break;
case SPELL_CONFUSE:
- SPELL_DIR(spd, beam);
zapping(ZAP_CONFUSION, powc, beam);
break;
@@ -1034,34 +1055,28 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_INVISIBILITY:
- if (spell_direction(spd, beam, DIR_NONE, TARG_FRIEND) == -1)
- return (-1);
zapping(ZAP_INVISIBILITY, powc, beam);
break;
case SPELL_THROW_FLAME:
- SPELL_DIR(spd, beam);
zapping(ZAP_FLAME, powc, beam);
break;
case SPELL_THROW_FROST:
- SPELL_DIR(spd, beam);
zapping(ZAP_FROST, powc, beam);
break;
case SPELL_CONTROLLED_BLINK:
if (blink() == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_FREEZING_CLOUD:
- if (cast_big_c(powc, CLOUD_COLD) == -1)
- return (-1);
+ cast_big_c(powc, CLOUD_COLD, beam);
break;
case SPELL_MEPHITIC_CLOUD:
- if (stinking_cloud(powc) == -1)
- return (-1);
+ stinking_cloud(powc, beam);
break;
case SPELL_RING_OF_FLAMES:
@@ -1081,7 +1096,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_VENOM_BOLT:
- SPELL_DIR(spd, beam);
zapping(ZAP_VENOM_BOLT, powc, beam);
break;
@@ -1090,25 +1104,18 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_TELEPORT_OTHER:
- SPELL_DIR(spd, beam);
-
- if (spd.isMe)
- {
- mpr("Sorry, it doesn't work like that.");
- return (-1);
- }
// teleport creature (I think)
zapping(ZAP_TELEPORTATION, powc, beam);
break;
case SPELL_LESSER_HEALING:
if (!cast_healing(5))
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_GREATER_HEALING:
if (!cast_healing(25))
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_CURE_POISON_I: //jmf: `healing' version? group w/ S_C_P_II?
@@ -1125,7 +1132,7 @@ int your_spells( int spc2, int powc, bool allow_fail )
case SPELL_SELECTIVE_AMNESIA:
if (!cast_selective_amnesia(false))
- return (-1);
+ return (SPRET_ABORT);
break; // Sif Muna power calls with true
case SPELL_MASS_CONFUSION:
@@ -1134,7 +1141,7 @@ int your_spells( int spc2, int powc, bool allow_fail )
case SPELL_SMITING:
if (cast_smiting(powc) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_REPEL_UNDEAD:
@@ -1166,34 +1173,27 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_BOLT_OF_DRAINING:
- SPELL_DIR(spd, beam);
zapping(ZAP_NEGATIVE_ENERGY, powc, beam);
break;
case SPELL_LEHUDIBS_CRYSTAL_SPEAR:
- SPELL_DIR(spd, beam);
zapping(ZAP_CRYSTAL_SPEAR, powc, beam);
break;
case SPELL_BOLT_OF_INACCURACY:
- SPELL_DIR(spd, beam);
zapping(ZAP_BEAM_OF_ENERGY, powc, beam);
break;
case SPELL_POISONOUS_CLOUD:
- if (cast_big_c(powc, CLOUD_POISON) == -1)
- return (-1);
+ cast_big_c(powc, CLOUD_POISON, beam);
break;
case SPELL_POISON_ARROW:
- SPELL_DIR(spd, beam);
-
zapping( ZAP_POISON_ARROW, powc, beam );
break;
case SPELL_FIRE_STORM:
- if (cast_fire_storm(powc) == -1)
- return (-1);
+ cast_fire_storm(powc, beam);
break;
case SPELL_DETECT_TRAPS:
@@ -1207,7 +1207,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_ISKENDERUNS_MYSTIC_BLAST:
- SPELL_DIR(spd, beam);
zapping( ZAP_MYSTIC_BLAST, powc, beam );
break;
@@ -1220,12 +1219,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_ENSLAVEMENT:
- SPELL_DIR(spd, beam);
- if (spd.isMe)
- {
- canned_msg(MSG_UNTHINKING_ACT);
- return (-1);
- }
zapping(ZAP_ENSLAVEMENT, powc, beam);
break;
@@ -1243,14 +1236,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_HEAL_OTHER:
- if (spell_direction(spd, beam, DIR_NONE, TARG_FRIEND) == -1)
- return (-1);
-
- if (spd.isMe)
- {
- mpr("Sorry, it doesn't work like that.");
- return (-1);
- }
zapping(ZAP_HEALING, powc, beam);
break;
@@ -1260,7 +1245,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_PAIN:
- SPELL_DIR(spd, beam);
dec_hp(1, false);
zapping(ZAP_PAIN, powc, beam);
break;
@@ -1297,17 +1281,17 @@ int your_spells( int spc2, int powc, bool allow_fail )
case SPELL_BURN:
if (burn_freeze(powc, BEAM_FIRE) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_FREEZE:
if (burn_freeze(powc, BEAM_COLD) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_SUMMON_ELEMENTAL:
if (summon_elemental(powc, 0, 2) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_OZOCUBUS_REFRIGERATION:
@@ -1315,7 +1299,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_STICKY_FLAME:
- SPELL_DIR(spd, beam);
zapping(ZAP_STICKY_FLAME, powc, beam);
break;
@@ -1345,7 +1328,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_DISPEL_UNDEAD:
- SPELL_DIR(spd, beam);
zapping(ZAP_DISPEL_UNDEAD, powc, beam);
break;
@@ -1354,12 +1336,10 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_THUNDERBOLT:
- SPELL_DIR(spd, beam);
zapping(ZAP_LIGHTNING, powc, beam);
break;
case SPELL_FLAME_OF_CLEANSING:
- SPELL_DIR(spd, beam);
zapping(ZAP_CLEANSING_FLAME, powc, beam);
break;
@@ -1383,27 +1363,18 @@ int your_spells( int spc2, int powc, bool allow_fail )
case SPELL_BONE_SHARDS:
if (cast_bone_shards(powc) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_BANISHMENT:
- SPELL_DIR(spd, beam);
zapping(ZAP_BANISHMENT, powc, beam);
break;
case SPELL_CIGOTUVIS_DEGENERATION:
- SPELL_DIR(spd, beam);
-
- if (spd.isMe)
- {
- canned_msg(MSG_UNTHINKING_ACT);
- return (false);
- }
zapping(ZAP_DEGENERATION, powc, beam);
break;
case SPELL_STING:
- SPELL_DIR(spd, beam);
zapping(ZAP_STING, powc, beam);
break;
@@ -1418,7 +1389,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
case SPELL_HELLFIRE:
// should only be available from:
// staff of Dispater & Sceptre of Asmodeus
- SPELL_DIR(spd, beam);
zapping(ZAP_HELLFIRE, powc, beam);
break;
@@ -1488,12 +1458,10 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_BOLT_OF_IRON:
- SPELL_DIR(spd, beam);
zapping(ZAP_IRON_BOLT, powc, beam);
break;
case SPELL_STONE_ARROW:
- SPELL_DIR(spd, beam);
zapping(ZAP_STONE_ARROW, powc, beam);
break;
@@ -1506,7 +1474,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_SHOCK:
- SPELL_DIR(spd, beam);
zapping(ZAP_ELECTRICITY, powc, beam);
break;
@@ -1523,7 +1490,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_ORB_OF_ELECTROCUTION:
- SPELL_DIR(spd, beam);
zapping(ZAP_ORB_OF_ELECTRICITY, powc, beam);
break;
@@ -1557,7 +1523,7 @@ int your_spells( int spc2, int powc, bool allow_fail )
mpr( "Your body is in too poor a condition "
"for this spell to function." );
- return (false);
+ return (SPRET_FAIL);
}
mpr("Your body is suffused with transfigurative energy!");
@@ -1569,8 +1535,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_DEBUGGING_RAY:
- if (spell_direction(spd, beam, DIR_NONE, TARG_ANY) == -1)
- return (false);
zapping(ZAP_DEBUGGING_RAY, powc, beam);
break;
@@ -1580,16 +1544,10 @@ int your_spells( int spc2, int powc, bool allow_fail )
case SPELL_PORTAL:
if (portal() == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_AGONY:
- SPELL_DIR(spd, beam);
- if (spd.isMe)
- {
- canned_msg(MSG_UNTHINKING_ACT);
- return (-1);
- }
zapping(ZAP_AGONY, powc, beam);
break;
@@ -1598,17 +1556,10 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_DISRUPT:
- SPELL_DIR(spd, beam);
zapping(ZAP_DISRUPTION, powc, beam);
break;
case SPELL_DISINTEGRATE:
- SPELL_DIR(spd, beam);
- if (spd.isMe)
- {
- canned_msg(MSG_UNTHINKING_ACT);
- return (-1);
- }
zapping(ZAP_DISINTEGRATION, powc, beam);
break;
@@ -1637,11 +1588,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_SYMBOL_OF_TORMENT:
- if (player_res_torment())
- {
- mpr("To torment others, one must first know what torment means. ");
- return (-1);
- }
torment(TORMENT_SPELL, you.x_pos, you.y_pos);
break;
@@ -1650,27 +1596,23 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_ORB_OF_FRAGMENTATION:
- SPELL_DIR(spd, beam);
zapping(ZAP_ORB_OF_FRAGMENTATION, powc, beam);
break;
case SPELL_ICE_BOLT:
- SPELL_DIR(spd, beam);
zapping(ZAP_ICE_BOLT, powc, beam);
break;
case SPELL_ARC:
if (burn_freeze(powc, BEAM_ELECTRICITY) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_AIRSTRIKE:
- if (airstrike(powc) == -1)
- return (-1);
+ airstrike(powc, spd);
break;
case SPELL_ICE_STORM:
- SPELL_DIR(spd, beam);
zapping(ZAP_ICE_STORM, powc, beam);
break;
@@ -1682,12 +1624,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
//jmf: new spells 19mar2000
case SPELL_FLAME_TONGUE:
- SPELL_DIR(spd, beam);
- if (spd.isMe)
- {
- canned_msg(MSG_UNTHINKING_ACT);
- return (-1);
- }
zapping(ZAP_FLAME_TONGUE, powc, beam);
break;
@@ -1716,12 +1652,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_SLEEP:
- SPELL_DIR(spd, beam);
- if (spd.isMe)
- {
- canned_msg(MSG_UNTHINKING_ACT);
- return (-1);
- }
zapping(ZAP_SLEEP, powc, beam);
break;
@@ -1780,12 +1710,6 @@ int your_spells( int spc2, int powc, bool allow_fail )
break;
case SPELL_BACKLIGHT:
- SPELL_DIR(spd, beam);
- if (spd.isMe)
- {
- canned_msg(MSG_UNTHINKING_ACT);
- return (-1);
- }
zapping(ZAP_BACKLIGHT, powc + 10, beam);
break;
@@ -1828,7 +1752,7 @@ int your_spells( int spc2, int powc, bool allow_fail )
case SPELL_SEMI_CONTROLLED_BLINK:
//jmf: powc is ignored
if (cast_semi_controlled_blink(powc) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
case SPELL_STONESKIN:
@@ -1861,7 +1785,7 @@ int your_spells( int spc2, int powc, bool allow_fail )
case SPELL_APPORTATION:
if (cast_apportation(powc) == -1)
- return (-1);
+ return (SPRET_ABORT);
break;
default:
diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h
index 84dd322bd1..758514fe91 100644
--- a/crawl-ref/source/spl-data.h
+++ b/crawl-ref/source/spl-data.h
@@ -140,373 +140,426 @@
SPELL_IDENTIFY, "Identify",
SPTYP_DIVINATION,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_TELEPORT_SELF, "Teleport Self",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_CAUSE_FEAR, "Cause Fear",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_CREATE_NOISE, "Create Noise",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_REMOVE_CURSE, "Remove Curse",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_MAGIC_DART, "Magic Dart",
SPTYP_CONJURATION,
SPFLAG_DIR_OR_TARGET,
- 1
+ 1,
+ NULL
},
{
SPELL_FIREBALL, "Fireball",
SPTYP_CONJURATION | SPTYP_FIRE,
SPFLAG_DIR_OR_TARGET,
- 6
+ 6,
+ NULL
},
{
SPELL_SWAP, "Swap",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_APPORTATION, "Apportation",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_TWIST, "Twist",
SPTYP_TRANSLOCATION,
SPFLAG_DIR_OR_TARGET,
- 1
+ 1,
+ NULL
},
{
SPELL_CONJURE_FLAME, "Conjure Flame",
SPTYP_CONJURATION | SPTYP_FIRE,
- SPFLAG_GRID | SPFLAG_NOT_SELF,
- 3
+ SPFLAG_NONE,
+ 3,
+ NULL
},
{
SPELL_DIG, "Dig",
SPTYP_TRANSMIGRATION | SPTYP_EARTH,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 4
+ 4,
+ NULL
},
{
SPELL_BOLT_OF_FIRE, "Bolt of Fire",
SPTYP_CONJURATION | SPTYP_FIRE,
SPFLAG_DIR_OR_TARGET,
- 5
+ 5,
+ NULL
},
{
SPELL_BOLT_OF_COLD, "Bolt of Cold",
SPTYP_CONJURATION | SPTYP_ICE,
SPFLAG_DIR_OR_TARGET,
- 5
+ 5,
+ NULL
},
{
SPELL_LIGHTNING_BOLT, "Lightning Bolt",
SPTYP_CONJURATION | SPTYP_AIR,
SPFLAG_DIR_OR_TARGET,
- 6
+ 6,
+ NULL
},
{
SPELL_BOLT_OF_MAGMA, "Bolt of Magma",
SPTYP_CONJURATION | SPTYP_FIRE | SPTYP_EARTH,
SPFLAG_DIR_OR_TARGET,
- 5
+ 5,
+ NULL
},
{
SPELL_POLYMORPH_OTHER, "Polymorph Other",
SPTYP_TRANSMIGRATION, // removed enchantment, wasn't needed -- bwr
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 5
+ 5,
+ NULL
},
{
SPELL_SLOW, "Slow",
SPTYP_ENCHANTMENT,
SPFLAG_DIR_OR_TARGET,
- 3
+ 3,
+ NULL
},
{
SPELL_HASTE, "Haste",
SPTYP_ENCHANTMENT,
SPFLAG_DIR_OR_TARGET | SPFLAG_HELPFUL,
- 6 // lowered to 6 from 8, since its easily available from various items
+ 6, // lowered to 6 from 8, since its easily available from various items
// and Swiftness is level 2 (and gives a similar effect). Its also
// not that much better than Invisibility. -- bwr
+ NULL
},
{
SPELL_PARALYZE, "Paralyze",
SPTYP_ENCHANTMENT,
SPFLAG_DIR_OR_TARGET,
- 4
+ 4,
+ NULL
},
{
SPELL_CONFUSE, "Confuse",
SPTYP_ENCHANTMENT,
SPFLAG_DIR_OR_TARGET,
- 3
+ 3,
+ NULL
},
{
SPELL_INVISIBILITY, "Invisibility",
SPTYP_ENCHANTMENT,
SPFLAG_DIR_OR_TARGET | SPFLAG_HELPFUL,
- 6
+ 6,
+ NULL
},
{
SPELL_THROW_FLAME, "Throw Flame",
SPTYP_CONJURATION | SPTYP_FIRE,
SPFLAG_DIR_OR_TARGET,
- 2
+ 2,
+ NULL
},
{
SPELL_THROW_FROST, "Throw Frost",
SPTYP_CONJURATION | SPTYP_ICE,
SPFLAG_DIR_OR_TARGET,
- 2
+ 2,
+ NULL
},
{
SPELL_CONTROLLED_BLINK, "Controlled Blink",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 8
+ 8,
+ NULL
},
{
SPELL_FREEZING_CLOUD, "Freezing Cloud",
SPTYP_CONJURATION | SPTYP_ICE | SPTYP_AIR,
SPFLAG_GRID,
- 7
+ 7,
+ "Where do you want to put it?"
},
{
SPELL_MEPHITIC_CLOUD, "Mephitic Cloud",
SPTYP_CONJURATION | SPTYP_POISON | SPTYP_AIR,
SPFLAG_DIR_OR_TARGET,
- 3
+ 3,
+ NULL
},
{
SPELL_RING_OF_FLAMES, "Ring of Flames",
SPTYP_ENCHANTMENT | SPTYP_FIRE,
SPFLAG_NONE,
- 8
+ 8,
+ NULL
},
{
SPELL_RESTORE_STRENGTH, "Restore Strength",
SPTYP_HOLY,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_RESTORE_INTELLIGENCE, "Restore Intelligence",
SPTYP_HOLY,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_RESTORE_DEXTERITY, "Restore Dexterity",
SPTYP_HOLY,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_VENOM_BOLT, "Venom Bolt",
SPTYP_CONJURATION | SPTYP_POISON,
SPFLAG_DIR_OR_TARGET,
- 5
+ 5,
+ NULL
},
{
SPELL_OLGREBS_TOXIC_RADIANCE, "Olgreb's Toxic Radiance",
SPTYP_POISON,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_TELEPORT_OTHER, "Teleport Other",
SPTYP_TRANSLOCATION,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 4
+ 4,
+ NULL
},
{
SPELL_LESSER_HEALING, "Lesser Healing",
SPTYP_HOLY,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_GREATER_HEALING, "Greater Healing",
SPTYP_HOLY,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_CURE_POISON_I, "Cure Poison",
SPTYP_HOLY,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_PURIFICATION, "Purification",
SPTYP_HOLY,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_DEATHS_DOOR, "Death's Door",
SPTYP_ENCHANTMENT | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 8
+ 8,
+ NULL
},
{
SPELL_SELECTIVE_AMNESIA, "Selective Amnesia",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_MASS_CONFUSION, "Mass Confusion",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_SMITING, "Smiting",
SPTYP_HOLY,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_REPEL_UNDEAD, "Repel Undead",
SPTYP_HOLY,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_HOLY_WORD, "Holy Word",
SPTYP_HOLY,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_DETECT_CURSE, "Detect Curse",
SPTYP_DIVINATION,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_SUMMON_SMALL_MAMMAL, "Summon Small Mammals",
SPTYP_SUMMONING,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_ABJURATION_I, "Abjuration",
SPTYP_SUMMONING,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_SUMMON_SCORPIONS, "Summon Scorpions",
SPTYP_SUMMONING | SPTYP_POISON,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_LEVITATION, "Levitation",
SPTYP_ENCHANTMENT | SPTYP_AIR,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_BOLT_OF_DRAINING, "Bolt of Draining",
SPTYP_CONJURATION | SPTYP_NECROMANCY,
SPFLAG_DIR_OR_TARGET,
- 6
+ 6,
+ NULL
},
{
SPELL_LEHUDIBS_CRYSTAL_SPEAR, "Lehudib's Crystal Spear",
SPTYP_CONJURATION | SPTYP_EARTH,
SPFLAG_DIR_OR_TARGET,
- 8
+ 8,
+ NULL
},
{
SPELL_BOLT_OF_INACCURACY, "Bolt of Inaccuracy",
SPTYP_CONJURATION,
SPFLAG_DIR_OR_TARGET,
- 2
+ 2,
+ NULL
},
{
SPELL_POISONOUS_CLOUD, "Poisonous Cloud",
SPTYP_CONJURATION | SPTYP_POISON | SPTYP_AIR,
SPFLAG_GRID,
- 6
+ 6,
+ "Where do you want to put it?"
}
,
@@ -514,21 +567,24 @@
SPELL_FIRE_STORM, "Fire Storm",
SPTYP_CONJURATION | SPTYP_FIRE,
SPFLAG_GRID,
- 9
+ 9,
+ "Where?"
},
{
SPELL_DETECT_TRAPS, "Detect Traps",
SPTYP_DIVINATION,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_BLINK, "Blink",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
@@ -538,196 +594,224 @@
SPELL_ISKENDERUNS_MYSTIC_BLAST, "Iskenderun's Mystic Blast",
SPTYP_CONJURATION,
SPFLAG_DIR_OR_TARGET,
- 4
+ 4,
+ NULL
},
{
SPELL_SWARM, "Summon Swarm",
SPTYP_SUMMONING,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_SUMMON_HORRIBLE_THINGS, "Summon Horrible Things",
SPTYP_SUMMONING,
SPFLAG_UNHOLY,
- 8
+ 8,
+ NULL
},
{
SPELL_ENSLAVEMENT, "Enslavement",
SPTYP_ENCHANTMENT,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 4
+ 4,
+ NULL
},
{
SPELL_MAGIC_MAPPING, "Magic Mapping",
SPTYP_DIVINATION | SPTYP_EARTH,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_HEAL_OTHER, "Heal Other",
SPTYP_HOLY,
SPFLAG_DIR_OR_TARGET | SPFLAG_HELPFUL | SPFLAG_NOT_SELF,
- 3
+ 3,
+ NULL
},
{
SPELL_ANIMATE_DEAD, "Animate Dead",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_PAIN, "Pain",
SPTYP_NECROMANCY,
SPFLAG_DIR_OR_TARGET,
- 1
+ 1,
+ NULL
},
{
SPELL_EXTENSION, "Extension",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_CONTROL_UNDEAD, "Control Undead",
SPTYP_ENCHANTMENT | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_ANIMATE_SKELETON, "Animate Skeleton",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_VAMPIRIC_DRAINING, "Vampiric Draining",
SPTYP_NECROMANCY,
SPFLAG_DIR | SPFLAG_NOT_SELF,
- 3
+ 3,
+ NULL
},
{
SPELL_SUMMON_WRAITHS, "Summon Wraiths",
SPTYP_NECROMANCY | SPTYP_SUMMONING,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_DETECT_ITEMS, "Detect Items",
SPTYP_DIVINATION,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_BORGNJORS_REVIVIFICATION, "Borgnjor's Revivification",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_BURN, "Burn", // used by wanderers
SPTYP_FIRE,
- SPFLAG_DIR | SPFLAG_NOT_SELF,
- 1
+ SPFLAG_NONE,
+ 1,
+ NULL
},
{
SPELL_FREEZE, "Freeze",
SPTYP_ICE,
- SPFLAG_DIR | SPFLAG_NOT_SELF,
- 1
+ SPFLAG_NONE,
+ 1,
+ NULL
},
{
SPELL_SUMMON_ELEMENTAL, "Summon Elemental",
SPTYP_SUMMONING,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_OZOCUBUS_REFRIGERATION, "Ozocubu's Refrigeration",
SPTYP_ICE,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_STICKY_FLAME, "Sticky Flame",
SPTYP_CONJURATION | SPTYP_FIRE,
SPFLAG_DIR_OR_TARGET,
- 4
+ 4,
+ NULL
},
{
SPELL_SUMMON_ICE_BEAST, "Summon Ice Beast",
SPTYP_ICE | SPTYP_SUMMONING,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_OZOCUBUS_ARMOUR, "Ozocubu's Armour",
SPTYP_ENCHANTMENT | SPTYP_ICE,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_CALL_IMP, "Call Imp",
SPTYP_SUMMONING,
SPFLAG_UNHOLY,
- 3
+ 3,
+ NULL
},
{
SPELL_REPEL_MISSILES, "Repel Missiles",
SPTYP_ENCHANTMENT | SPTYP_AIR,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_BERSERKER_RAGE, "Berserker Rage",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_DISPEL_UNDEAD, "Dispel Undead",
SPTYP_NECROMANCY,
SPFLAG_DIR_OR_TARGET,
- 4
+ 4,
+ NULL
},
{
SPELL_GUARDIAN, "Guardian",
SPTYP_HOLY,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_PESTILENCE, "Pestilence",
SPTYP_HOLY,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
@@ -742,168 +826,192 @@
SPELL_FLAME_OF_CLEANSING, "Flame of Cleansing",
SPTYP_HOLY,
SPFLAG_DIR_OR_TARGET,
- 8
+ 8,
+ NULL
},
{
SPELL_SHINING_LIGHT, "Shining Light",
SPTYP_HOLY,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_SUMMON_DAEVA, "Summon Daeva",
SPTYP_HOLY,
SPFLAG_NONE,
- 8
+ 8,
+ NULL
},
{
SPELL_ABJURATION_II, "Abjuration",
SPTYP_HOLY,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_TWISTED_RESURRECTION, "Twisted Resurrection",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_REGENERATION, "Regeneration",
SPTYP_ENCHANTMENT | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_BONE_SHARDS, "Bone Shards",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_BANISHMENT, "Banishment",
SPTYP_TRANSLOCATION,
SPFLAG_DIR_OR_TARGET | SPFLAG_UNHOLY,
- 5
+ 5,
+ NULL
},
{
SPELL_CIGOTUVIS_DEGENERATION, "Cigotuvi's Degeneration",
SPTYP_TRANSMIGRATION | SPTYP_NECROMANCY,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 5
+ 5,
+ NULL
},
{
SPELL_STING, "Sting",
SPTYP_CONJURATION | SPTYP_POISON,
SPFLAG_DIR_OR_TARGET,
- 1
+ 1,
+ NULL
},
{
SPELL_SUBLIMATION_OF_BLOOD, "Sublimation of Blood",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_TUKIMAS_DANCE, "Tukima's Dance",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_HELLFIRE, "Hellfire",
SPTYP_CONJURATION | SPTYP_FIRE,
SPFLAG_DIR_OR_TARGET | SPFLAG_UNHOLY,
- 9
+ 9,
+ NULL
},
{
SPELL_SUMMON_DEMON, "Summon Demon",
SPTYP_SUMMONING,
SPFLAG_UNHOLY,
- 5
+ 5,
+ NULL
},
{
SPELL_DEMONIC_HORDE, "Demonic Horde",
SPTYP_SUMMONING,
SPFLAG_UNHOLY,
- 6
+ 6,
+ NULL
},
{
SPELL_SUMMON_GREATER_DEMON, "Summon Greater Demon",
SPTYP_SUMMONING,
SPFLAG_UNHOLY,
- 7
+ 7,
+ NULL
},
{
SPELL_CORPSE_ROT, "Corpse Rot",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_TUKIMAS_VORPAL_BLADE, "Tukima's Vorpal Blade",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_FIRE_BRAND, "Fire Brand",
SPTYP_ENCHANTMENT | SPTYP_FIRE,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_FREEZING_AURA, "Freezing Aura",
SPTYP_ENCHANTMENT | SPTYP_ICE,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_LETHAL_INFUSION, "Lethal Infusion",
SPTYP_ENCHANTMENT | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_CRUSH, "Crush",
SPTYP_EARTH,
SPFLAG_DIR | SPFLAG_NOT_SELF,
- 1
+ 1,
+ NULL
},
{
SPELL_BOLT_OF_IRON, "Bolt of Iron",
SPTYP_CONJURATION | SPTYP_EARTH,
SPFLAG_DIR_OR_TARGET,
- 6
+ 6,
+ NULL
},
{
SPELL_STONE_ARROW, "Stone Arrow",
SPTYP_CONJURATION | SPTYP_EARTH,
SPFLAG_DIR_OR_TARGET,
- 3
+ 3,
+ NULL
},
{
@@ -918,49 +1026,56 @@
SPELL_STONEMAIL, "Stonemail",
SPTYP_ENCHANTMENT | SPTYP_EARTH,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_SHOCK, "Shock",
SPTYP_CONJURATION | SPTYP_AIR,
SPFLAG_DIR_OR_TARGET,
- 1
+ 1,
+ NULL
},
{
SPELL_SWIFTNESS, "Swiftness",
SPTYP_ENCHANTMENT | SPTYP_AIR,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_FLY, "Fly",
SPTYP_ENCHANTMENT | SPTYP_AIR,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_INSULATION, "Insulation",
SPTYP_ENCHANTMENT | SPTYP_AIR,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_ORB_OF_ELECTROCUTION, "Orb of Electrocution",
SPTYP_CONJURATION | SPTYP_AIR,
SPFLAG_DIR_OR_TARGET,
- 7
+ 7,
+ NULL
},
{
SPELL_DETECT_CREATURES, "Detect Creatures",
SPTYP_DIVINATION,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
@@ -975,7 +1090,8 @@
SPELL_CONTROL_TELEPORT, "Control Teleport",
SPTYP_ENCHANTMENT | SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
@@ -990,168 +1106,192 @@
SPELL_POISON_WEAPON, "Poison Weapon",
SPTYP_ENCHANTMENT | SPTYP_POISON,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_RESIST_POISON, "Resist Poison",
SPTYP_ENCHANTMENT | SPTYP_POISON,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_PROJECTED_NOISE, "Projected Noise",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_ALTER_SELF, "Alter Self",
SPTYP_TRANSMIGRATION,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_DEBUGGING_RAY, "Debugging Ray",
SPTYP_CONJURATION,
SPFLAG_DIR_OR_TARGET,
- 7
+ 7,
+ NULL
},
{
SPELL_RECALL, "Recall",
SPTYP_SUMMONING | SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_PORTAL, "Portal",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_AGONY, "Agony",
SPTYP_NECROMANCY,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 5
+ 5,
+ NULL
},
{
SPELL_SPIDER_FORM, "Spider Form",
SPTYP_TRANSMIGRATION | SPTYP_POISON,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_DISRUPT, "Disrupt",
SPTYP_TRANSMIGRATION,
SPFLAG_DIR_OR_TARGET,
- 1
+ 1,
+ NULL
},
{
SPELL_DISINTEGRATE, "Disintegrate",
SPTYP_TRANSMIGRATION,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 6
+ 6,
+ NULL
},
{
SPELL_BLADE_HANDS, "Blade Hands",
SPTYP_TRANSMIGRATION,
SPFLAG_NONE,
- 5 // only removes weapon, so I raised this from 4 -- bwr
+ 5, // only removes weapon, so I raised this from 4 -- bwr
+ NULL
},
{
SPELL_STATUE_FORM, "Statue Form",
SPTYP_TRANSMIGRATION | SPTYP_EARTH,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_ICE_FORM, "Ice Form",
SPTYP_ICE | SPTYP_TRANSMIGRATION,
SPFLAG_NONE,
- 4 // doesn't allow for equipment, so I lowered this from 5 -- bwr
+ 4, // doesn't allow for equipment, so I lowered this from 5 -- bwr
+ NULL
},
{
SPELL_DRAGON_FORM, "Dragon Form",
SPTYP_FIRE | SPTYP_TRANSMIGRATION,
SPFLAG_NONE,
- 8
+ 8,
+ NULL
},
{
SPELL_NECROMUTATION, "Necromutation",
SPTYP_TRANSMIGRATION | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 8
+ 8,
+ NULL
},
{
SPELL_DEATH_CHANNEL, "Death Channel",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 9
+ 9,
+ NULL
},
{
SPELL_SYMBOL_OF_TORMENT, "Symbol of Torment",
SPTYP_NECROMANCY,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_DEFLECT_MISSILES, "Deflect Missiles",
SPTYP_ENCHANTMENT | SPTYP_AIR,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_ORB_OF_FRAGMENTATION, "Orb of Fragmentation",
SPTYP_CONJURATION | SPTYP_EARTH,
SPFLAG_DIR_OR_TARGET,
- 7
+ 7,
+ NULL
},
{
SPELL_ICE_BOLT, "Ice Bolt",
SPTYP_CONJURATION | SPTYP_ICE,
SPFLAG_DIR_OR_TARGET,
- 4
+ 4,
+ NULL
},
{
SPELL_ICE_STORM, "Ice Storm",
SPTYP_CONJURATION | SPTYP_ICE,
SPFLAG_DIR_OR_TARGET,
- 9
+ 9,
+ NULL
},
{
SPELL_ARC, "Arc",
SPTYP_AIR,
- SPFLAG_DIR | SPFLAG_NOT_SELF,
- 1
+ SPFLAG_NONE,
+ 1,
+ NULL
},
{
SPELL_AIRSTRIKE, "Airstrike",
SPTYP_AIR,
SPFLAG_TARGET | SPFLAG_NOT_SELF,
- 4
+ 4,
+ NULL
},
{
@@ -1166,14 +1306,16 @@
SPELL_CONFUSING_TOUCH, "Confusing Touch",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_SURE_BLADE, "Sure Blade",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
@@ -1185,287 +1327,328 @@
SPELL_FLAME_TONGUE, "Flame Tongue",
SPTYP_CONJURATION | SPTYP_FIRE,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 1
+ 1,
+ NULL
},
{
SPELL_PASSWALL, "Passwall",
SPTYP_TRANSMIGRATION | SPTYP_EARTH,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_IGNITE_POISON, "Ignite Poison",
SPTYP_FIRE | SPTYP_TRANSMIGRATION,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_STICKS_TO_SNAKES, "Sticks to Snakes",
SPTYP_TRANSMIGRATION | SPTYP_SUMMONING,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_SUMMON_LARGE_MAMMAL, "Call Canine Familiar",
SPTYP_SUMMONING,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_SUMMON_DRAGON, "Summon Dragon",
SPTYP_FIRE | SPTYP_SUMMONING,
SPFLAG_NONE,
- 9
+ 9,
+ NULL
},
{
SPELL_TAME_BEASTS, "Tame Beasts",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_SLEEP, "Ensorcelled Hibernation",
SPTYP_ENCHANTMENT | SPTYP_ICE,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 2
+ 2,
+ NULL
},
{
SPELL_MASS_SLEEP, "Metabolic Englaciation",
SPTYP_ENCHANTMENT | SPTYP_ICE,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_DETECT_MAGIC, "Detect Magic",
SPTYP_DIVINATION,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_DETECT_SECRET_DOORS, "Detect Secret Doors",
SPTYP_DIVINATION,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_SEE_INVISIBLE, "See Invisible",
SPTYP_ENCHANTMENT | SPTYP_DIVINATION,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_FORESCRY, "Forescry",
SPTYP_DIVINATION,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_SUMMON_BUTTERFLIES, "Summon Butterflies",
SPTYP_SUMMONING,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_EXCRUCIATING_WOUNDS, "Excruciating Wounds",
SPTYP_ENCHANTMENT | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 5 // fairly high level - potentially one of the best brands
+ 5, // fairly high level - potentially one of the best brands
+ NULL
},
{
SPELL_WARP_BRAND, "Warp Weapon",
SPTYP_ENCHANTMENT | SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 7 // this is high for a reason - Warp brands are very powerful.
+ 7, // this is high for a reason - Warp brands are very powerful.
+ NULL
},
{
SPELL_SILENCE, "Silence",
SPTYP_ENCHANTMENT | SPTYP_AIR,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_SHATTER, "Shatter",
SPTYP_TRANSMIGRATION | SPTYP_EARTH,
SPFLAG_NONE,
- 9
+ 9,
+ NULL
},
{
SPELL_DISPERSAL, "Dispersal",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_DISCHARGE, "Static Discharge",
SPTYP_CONJURATION | SPTYP_AIR,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_BEND, "Bend",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_BACKLIGHT, "Corona",
SPTYP_ENCHANTMENT,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 1
+ 1,
+ NULL
},
{
SPELL_INTOXICATE, "Alistair's Intoxication",
SPTYP_TRANSMIGRATION | SPTYP_POISON,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_GLAMOUR, "Glamour",
SPTYP_ENCHANTMENT,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_EVAPORATE, "Evaporate",
SPTYP_FIRE | SPTYP_TRANSMIGRATION,
SPFLAG_NONE,
- 2 // XXX: level 2 or 3, what should it be now? -- bwr
+ 2, // XXX: level 2 or 3, what should it be now? -- bwr
+ NULL
},
{
SPELL_ERINGYAS_SURPRISING_BOUQUET, "Eringya's Surprising Bouquet",
SPTYP_TRANSMIGRATION | SPTYP_EARTH,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_FRAGMENTATION, "Lee's Rapid Deconstruction",
SPTYP_TRANSMIGRATION | SPTYP_EARTH,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_AIR_WALK, "Air Walk",
SPTYP_TRANSMIGRATION | SPTYP_AIR,
SPFLAG_NONE,
- 9
+ 9,
+ NULL
},
{
SPELL_SANDBLAST, "Sandblast",
SPTYP_TRANSMIGRATION | SPTYP_EARTH,
SPFLAG_DIR_OR_TARGET | SPFLAG_NOT_SELF,
- 1
+ 1,
+ NULL
},
{
SPELL_ROTTING, "Rotting",
SPTYP_TRANSMIGRATION | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 5
+ 5,
+ NULL
},
{
SPELL_MAXWELLS_SILVER_HAMMER, "Maxwell's Silver Hammer",
SPTYP_TRANSMIGRATION | SPTYP_EARTH,
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_CONDENSATION_SHIELD, "Condensation Shield",
SPTYP_ICE | SPTYP_TRANSMIGRATION,
SPFLAG_NONE,
- 4
+ 4,
+ NULL
},
{
SPELL_SEMI_CONTROLLED_BLINK, "Semi-Controlled Blink",
SPTYP_TRANSLOCATION,
SPFLAG_NONE,
- 3
+ 3,
+ NULL
},
{
SPELL_STONESKIN, "Stoneskin",
SPTYP_EARTH | SPTYP_TRANSMIGRATION, // was ench -- bwr
SPFLAG_NONE,
- 2
+ 2,
+ NULL
},
{
SPELL_SIMULACRUM, "Simulacrum",
SPTYP_ICE | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 6
+ 6,
+ NULL
},
{
SPELL_CONJURE_BALL_LIGHTNING, "Conjure Ball Lightning",
SPTYP_AIR | SPTYP_CONJURATION,
SPFLAG_NONE,
- 8
+ 8,
+ NULL
},
{
SPELL_CHAIN_LIGHTNING, "Chain Lightning",
SPTYP_AIR | SPTYP_CONJURATION,
SPFLAG_NONE,
- 8
+ 8,
+ NULL
},
{
SPELL_DELAYED_FIREBALL, "Delayed Fireball",
SPTYP_FIRE | SPTYP_CONJURATION,
SPFLAG_NONE,
- 7
+ 7,
+ NULL
},
{
SPELL_FULSOME_DISTILLATION, "Fulsome Distillation",
SPTYP_TRANSMIGRATION | SPTYP_NECROMANCY,
SPFLAG_NONE,
- 1
+ 1,
+ NULL
},
{
SPELL_POISON_ARROW, "Poison Arrow",
SPTYP_CONJURATION | SPTYP_POISON,
SPFLAG_DIR_OR_TARGET,
- 6
+ 6,
+ NULL
},
{
SPELL_STRIKING, "Striking",
0,
SPFLAG_DIR_OR_TARGET,
- 1
+ 1,
+ NULL
},
{
@@ -1473,6 +1656,7 @@
0,
0,
0,
+ NULL
},
diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc
index 2892b6b67e..b490d19294 100644
--- a/crawl-ref/source/spl-util.cc
+++ b/crawl-ref/source/spl-util.cc
@@ -211,6 +211,11 @@ unsigned int get_spell_flags( int which_spell )
return (seekspell(which_spell)->flags);
}
+const char *get_spell_target_prompt( int which_spell )
+{
+ return (seekspell(which_spell)->target_prompt);
+}
+
bool spell_typematch(int which_spell, unsigned int which_discipline)
{
return (seekspell(which_spell)->disciplines & which_discipline);
@@ -675,11 +680,12 @@ void apply_area_cloud( int (*func) (int, int, int, int), int x, int y,
} // end apply_area_cloud()
char spell_direction( struct dist &spelld, struct bolt &pbolt,
- targeting_type restrict, int mode )
+ targeting_type restrict, int mode,
+ const char *prompt )
{
message_current_target();
- direction( spelld, restrict, mode );
+ direction( spelld, restrict, mode, false, prompt );
if (!spelld.isValid)
{
diff --git a/crawl-ref/source/spl-util.h b/crawl-ref/source/spl-util.h
index f81ca07ba5..6afb307431 100644
--- a/crawl-ref/source/spl-util.h
+++ b/crawl-ref/source/spl-util.h
@@ -25,6 +25,7 @@ struct playerspell
unsigned int disciplines; // bitfield
unsigned int flags; // bitfield
unsigned int level;
+ const char *target_prompt;
};
@@ -46,6 +47,7 @@ int spell_mana(int which_spell);
// * called from: chardump - it_use3 - player - spell - spl-book -
// * spells0 - spells3
int spell_difficulty(int which_spell);
+const char *get_spell_target_prompt( int which_spell );
int spell_levels_required(int which_spell);
@@ -83,7 +85,8 @@ int apply_area_within_radius(int (*func) (int, int, int, int),
char spell_direction( struct dist &spelld, struct bolt &pbolt,
targeting_type restrict = DIR_NONE,
- int mode = TARG_ENEMY );
+ int mode = TARG_ENEMY,
+ const char *prompt = NULL );
void apply_area_cloud(int (*func) (int, int, int, int), int x, int y,
int pow, int number, int ctype);
diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc
index c2d314a78a..8e7edddbcf 100644
--- a/crawl-ref/source/tutorial.cc
+++ b/crawl-ref/source/tutorial.cc
@@ -54,7 +54,6 @@ void load_tutorial( FILE* fp )
void init_tutorial_options()
{
if (!Options.tutorial_left) {
- mpr("return from tutorial check");
return;
}
@@ -889,6 +888,7 @@ void tutorial_first_item(item_def item)
Options.tut_just_triggered = 1;
}
+#if 0
static void tutorial_first_stairs(int x, int y) {
std::string text = "<magenta>The ";
@@ -903,7 +903,8 @@ static void tutorial_first_stairs(int x, int y) {
"this level again, press <w><<<magenta> while standing on the "
"upstairs.";
print_formatted_paragraph(text, 80, MSGCH_TUTORIAL);
-}
+}
+#endif
void learned_something_new(unsigned int seen_what, int x, int y)
{