summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-24 23:58:22 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-24 23:58:22 +0000
commit54022e5775e364b6be880373b9603f9094f20525 (patch)
treed86a1de4058cdc3941674bddb0ed72afc7868529
parent41d70af6d353eb5f2da26f908fb75e02e1e9af57 (diff)
downloadcrawl-ref-54022e5775e364b6be880373b9603f9094f20525.tar.gz
crawl-ref-54022e5775e364b6be880373b9603f9094f20525.zip
Remove GLAMOUR, and introduce RECITE (new Zin invocation)
The latter is a work in progress and may have strange results. It is intended as a multiturn invocation that is interrupted by large hp losses. IMHO, reciting things is an action that needs to take several turns. Each turn an attempt at influencing intelligent monsters is made. They usually fall asleep, are confused or turn berserk. The delay gets cancelled when the player is heavily wounded or when there are no impressionable monsters around anymore. I think the power formula will have to be tweaked. Comments welcome! git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3321 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/abl-show.cc46
-rw-r--r--crawl-ref/source/acr.cc2
-rw-r--r--crawl-ref/source/delay.cc204
-rw-r--r--crawl-ref/source/delay.h1
-rw-r--r--crawl-ref/source/enum.h8
-rw-r--r--crawl-ref/source/initfile.cc1
-rw-r--r--crawl-ref/source/mon-util.cc4
-rw-r--r--crawl-ref/source/religion.cc4
-rw-r--r--crawl-ref/source/spells4.cc99
-rw-r--r--crawl-ref/source/spells4.h1
-rw-r--r--crawl-ref/source/spl-book.cc1
-rw-r--r--crawl-ref/source/spl-cast.cc4
-rw-r--r--crawl-ref/source/spl-data.h9
13 files changed, 229 insertions, 155 deletions
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc
index f37ccb2854..3d3e7f7adc 100644
--- a/crawl-ref/source/abl-show.cc
+++ b/crawl-ref/source/abl-show.cc
@@ -39,6 +39,7 @@
#include "abyss.h"
#include "beam.h"
#include "decks.h"
+#include "delay.h"
#include "effects.h"
#include "food.h"
#include "it_use2.h"
@@ -78,7 +79,7 @@ enum ability_flag_type
{
ABFLAG_NONE = 0x00000000,
ABFLAG_BREATH = 0x00000001, // ability uses DUR_BREATH_WEAPON
- ABFLAG_DELAY = 0x00000002, // ability has its own delay (ie glamour)
+ ABFLAG_DELAY = 0x00000002, // ability has its own delay (ie recite)
ABFLAG_PAIN = 0x00000004, // ability must hurt player (ie torment)
ABFLAG_EXHAUSTION = 0x00000008, // fails if you.exhausted
ABFLAG_INSTANT = 0x00000010, // doesn't take time to use
@@ -110,7 +111,7 @@ ability_type god_abilities[MAX_NUM_GODS][MAX_GOD_ABILITIES] =
{ ABIL_NON_ABILITY, ABIL_NON_ABILITY, ABIL_NON_ABILITY,
ABIL_NON_ABILITY, ABIL_NON_ABILITY },
// Zin
- { ABIL_NON_ABILITY, ABIL_ZIN_SMITING, ABIL_ZIN_REVITALISATION,
+ { ABIL_ZIN_RECITE, ABIL_ZIN_SMITING, ABIL_ZIN_REVITALISATION,
ABIL_NON_ABILITY, ABIL_ZIN_SANCTUARY },
// TSO
{ ABIL_TSO_REPEL_UNDEAD, ABIL_TSO_DIVINE_SHIELD, ABIL_TSO_ANNIHILATE_UNDEAD,
@@ -173,7 +174,6 @@ static const ability_def Ability_List[] =
// NON_ABILITY should always come first
{ ABIL_NON_ABILITY, "No ability", 0, 0, 0, 0, ABFLAG_NONE },
{ ABIL_SPIT_POISON, "Spit Poison", 0, 0, 40, 0, ABFLAG_BREATH },
- { ABIL_GLAMOUR, "Glamour", 5, 0, 40, 0, ABFLAG_DELAY },
{ ABIL_MAPPING, "Sense Surroundings", 0, 0, 30, 0, ABFLAG_NONE },
{ ABIL_TELEPORTATION, "Teleportation", 3, 0, 200, 0, ABFLAG_NONE },
@@ -232,6 +232,7 @@ static const ability_def Ability_List[] =
// INVOCATIONS:
// Zin
+ { ABIL_ZIN_RECITE, "Recite", 3, 0, 150, 0, ABFLAG_DELAY },
{ ABIL_ZIN_SMITING, "Smiting",
3, 0, 50, generic_cost::fixed(2), ABFLAG_NONE },
{ ABIL_ZIN_REVITALISATION, "Revitalisation", 0, 0, 100, 3, ABFLAG_NONE },
@@ -483,10 +484,6 @@ static talent get_talent(ability_type ability, bool check_confused)
break;
// begin species abilities - some are mutagenic, too {dlb}
- case ABIL_GLAMOUR:
- failure = 50 - (you.experience_level * 2);
- break;
-
case ABIL_SPIT_POISON:
failure = ((you.species == SP_NAGA) ? 20 : 40)
- 10 * you.mutation[MUT_SPIT_POISON]
@@ -635,6 +632,7 @@ static talent get_talent(ability_type ability, bool check_confused)
failure = 20 - (you.piety / 20) - (5 * you.skills[SK_INVOCATIONS]);
break;
+ case ABIL_ZIN_RECITE:
case ABIL_TSO_REPEL_UNDEAD:
case ABIL_KIKU_RECALL_UNDEAD_SLAVES:
case ABIL_BEOGH_RECALL_ORCISH_FOLLOWERS:
@@ -994,21 +992,6 @@ static bool do_ability(const ability_def& abil)
you.attribute[ ATTR_DELAYED_FIREBALL ] = 0;
break;
- case ABIL_GLAMOUR:
- if (you.duration[DUR_GLAMOUR])
- {
- canned_msg(MSG_CANNOT_DO_YET);
- return (false);
- }
-
- mpr("You use your Elvish wiles.");
-
- cast_glamour( 10 + random2(you.experience_level)
- + random2(you.experience_level) );
-
- you.duration[DUR_GLAMOUR] = 20 + random2avg(13, 3);
- break;
-
case ABIL_SPIT_POISON: // Naga + spit poison mutation
if (you.duration[DUR_BREATH_WEAPON])
{
@@ -1318,6 +1301,18 @@ static bool do_ability(const ability_def& abil)
break;
// INVOCATIONS:
+
+ case ABIL_ZIN_RECITE:
+ {
+ if (!check_recital_audience())
+ {
+ mpr("There's no-one here to preach to!");
+ return (false);
+ }
+ const int pow = (you.skills[SK_INVOCATIONS] + 12) * (50 + you.piety) / 600;
+ start_delay(DELAY_RECITE, 3, pow, you.hp);
+ break;
+ }
case ABIL_ZIN_SMITING:
if (your_spells( SPELL_SMITING, (2 + skill_bump(SK_INVOCATIONS)) * 6,
false ) == SPRET_ABORT)
@@ -1946,13 +1941,6 @@ std::vector<talent> your_talents( bool check_confused )
if (you.species == SP_MUMMY && you.experience_level >= 13)
add_talent(talents, ABIL_MUMMY_RESTORATION, check_confused);
- if ( ((you.species == SP_GREY_ELF && you.experience_level >= 5) ||
- (you.species == SP_HIGH_ELF && you.experience_level >= 15)) &&
- you.attribute[ATTR_TRANSFORMATION] == TRAN_NONE )
- {
- add_talent(talents, ABIL_GLAMOUR, check_confused);
- }
-
if (you.species == SP_NAGA)
{
add_talent(talents, you.mutation[MUT_BREATHE_POISON] ?
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc
index bad82f21bd..47712a1c81 100644
--- a/crawl-ref/source/acr.cc
+++ b/crawl-ref/source/acr.cc
@@ -2558,8 +2558,6 @@ static void decrement_durations()
if ( decrement_a_duration(DUR_STONESKIN, "Your skin feels tender.") )
you.redraw_armour_class = true;
- decrement_a_duration(DUR_GLAMOUR);
-
if ( decrement_a_duration(DUR_TELEPORT) )
{
// only to a new area of the abyss sometimes (for abyss teleports)
diff --git a/crawl-ref/source/delay.cc b/crawl-ref/source/delay.cc
index 9c2b744b7d..8aae771c2f 100644
--- a/crawl-ref/source/delay.cc
+++ b/crawl-ref/source/delay.cc
@@ -52,6 +52,140 @@ static void handle_run_delays(const delay_queue_item &delay);
static void handle_macro_delay();
static void finish_delay(const delay_queue_item &delay);
+// monster cannot be affected in these states
+static bool recite_mons_useless(const monsters *mon)
+{
+ return (mons_is_fleeing(mon)
+ || mons_is_sleeping(mon)
+ || mons_friendly(mon)
+ || mons_neutral(mon)
+ || mon->has_ench(ENCH_BERSERK));
+}
+
+static int recite_to_monsters(int x, int y, int pow, int turn)
+{
+ const int mon = mgrd[x][y];
+ if (mon == NON_MONSTER)
+ return (0);
+
+ monsters *mons = &menv[mon];
+
+ // monster must be intelligent
+ if (mons_intel(mons->type) < I_NORMAL)
+ return (0);
+
+ if (recite_mons_useless(mons))
+ return (0);
+
+ int attempt = 3 - turn;
+ bool bad_effect =
+ (mons_class_holiness(mon) == MH_DEMONIC? !one_chance_in(8)
+ : pow < random2(attempt*5));
+
+ // 50% chance nothing happens
+ if (bad_effect && coinflip())
+ return (0);
+
+ bool resist = check_mons_resist_magic(mons, pow);
+
+ if (bad_effect) // can still have positive effects
+ {
+ if (!resist)
+ {
+ if (one_chance_in(3) && mons->add_ench(mon_enchant(ENCH_CONFUSION,
+ 0, KC_YOU, (16 + random2avg(13, 2)) * 10)))
+ {
+ simple_monster_message(mons, " looks confused.");
+ return (1);
+ }
+ if (one_chance_in(4) && mons->add_ench(ENCH_FEAR))
+ {
+ simple_monster_message(mons, " turns to flee.");
+ return (1);
+ }
+ if (one_chance_in(4))
+ {
+ mons->put_to_sleep();
+ simple_monster_message(mons, " falls asleep!");
+ return (1);
+ }
+ }
+ if (one_chance_in(3) && mons->add_ench(mon_enchant(ENCH_HASTE, 0,
+ KC_YOU, (16 + random2avg(13, 2)) * 10)))
+ {
+ simple_monster_message(mons, " is annoyed!");
+ return (1);
+ }
+ if (mons->can_go_berserk()) // seriously annoyed now
+ {
+ mons->go_berserk(true);
+ return (1);
+ }
+ return (0); // no effect
+ }
+
+ if (resist)
+ {
+ simple_monster_message(mons, " resists!");
+ return (0);
+ }
+
+ switch (random2(pow))
+ {
+ default: // nothing happens
+ return (0);
+ case 6:
+ case 7:
+ if (mons->add_ench(ENCH_FEAR))
+ {
+ simple_monster_message(mons, " turns to flee.");
+ return (1);
+ }
+ break;
+ case 8:
+ case 9:
+ mons->put_to_sleep();
+ simple_monster_message(mons, " falls asleep!");
+ return (1);
+ case 10:
+ case 11:
+ case 12:
+ if (mons->add_ench(mon_enchant(ENCH_CONFUSION, 0, KC_YOU,
+ (16 + random2avg(13, 2)) * 10)))
+ {
+ simple_monster_message(mons, " looks confused.");
+ return (1);
+ }
+ break;
+ case 13:
+ case 14:
+ if (mons->add_ench(mon_enchant(ENCH_PARALYSIS, 0, KC_YOU,
+ (16 + random2avg(13, 2)) * 10)))
+ {
+ simple_monster_message(mons, " is paralyzed!");
+ return (1);
+ }
+ break;
+ case 15:
+ case 16:
+ case 17:
+ case 18:
+ if (mons->add_ench(ENCH_NEUTRAL))
+ {
+ simple_monster_message(mons, " seems impressed!");
+ return (1);
+ }
+ break;
+ case 19:
+ case 20:
+ mons->attitude = ATT_NEUTRAL; // but same message as above
+ simple_monster_message(mons, " seems impressed!");
+ return (1);
+ }
+
+ return (0);
+} // end recite_to_monsters()
+
// Returns true if this delay can act as a parent to other delays, i.e. if
// other delays can be spawned while this delay is running. If is_parent_delay
// returns true, new delays will be pushed immediately to the front of the
@@ -196,6 +330,11 @@ void stop_delay( void )
mpr( "You stop dropping stuff." );
pop_delay();
break;
+
+ case DELAY_RECITE:
+ mpr( "You stop reciting.");
+ pop_delay();
+ break;
case DELAY_RUN:
case DELAY_REST:
@@ -295,6 +434,39 @@ bool is_being_butchered(const item_def &item)
return (false);
}
+// check whether there are monsters who might be influenced by Recite
+bool check_recital_audience()
+{
+ int mid;
+ monsters *mons;
+
+ for (int x = you.x_pos - 8; x <= you.x_pos + 8; x++)
+ for (int y = you.y_pos - 8; y <= you.y_pos + 8; y++)
+ {
+ if (!in_bounds(x,y) || !see_grid(x, y))
+ continue;
+
+ mid = mgrd[x][y];
+ if (mid == NON_MONSTER)
+ continue;
+
+ mons = &menv[mid];
+
+ // can not be affected in these states
+ if (recite_mons_useless(mons))
+ continue;;
+
+ return (true);
+ }
+
+#ifdef DEBUG_DIAGNOSTICS
+ mpr(MSGCH_DIAGNOSTICS, "No audience found!");
+#endif
+
+ // Sorry, no audience found!
+ return (false);
+}
+
// Xom is amused by a potential food source going to waste, and is
// more amused the hungrier you are.
static void xom_check_corpse_waste()
@@ -333,6 +505,12 @@ void handle_delay( void )
case DELAY_PASSWALL:
mpr("You begin to meditate on the wall.", MSGCH_MULTITURN_ACTION);
break;
+ case DELAY_RECITE:
+ mprf(MSGCH_MULTITURN_ACTION,
+ "You begin to recite %s's Axioms of Law.",
+ god_name(GOD_ZIN).c_str());
+ apply_area_visible(recite_to_monsters, delay.parm1, delay.duration);
+ break;
default:
break;
}
@@ -429,6 +607,19 @@ void handle_delay( void )
}
}
+ if ( delay.type == DELAY_RECITE)
+ {
+
+ if (!check_recital_audience() // maybe no unaffected monsters in LOS?
+ || Options.hp_warning && you.hp*Options.hp_warning <= you.hp_max
+ && delay.parm2*Options.hp_warning > you.hp_max
+ || you.hp*2 < delay.parm2) // or significant health drop
+ {
+ stop_delay();
+ return;
+ }
+ }
+
// Handle delay:
if (delay.duration > 0)
{
@@ -464,6 +655,11 @@ void handle_delay( void )
mpr("You continue meditating on the rock.",
MSGCH_MULTITURN_ACTION);
break;
+ case DELAY_RECITE:
+ mpr("You continue reciting the Axioms of Law.",
+ MSGCH_MULTITURN_ACTION);
+ apply_area_visible(recite_to_monsters, delay.parm1, delay.duration);
+ break;
case DELAY_MULTIDROP:
drop_item( items_for_multidrop[0].slot,
items_for_multidrop[0].quantity,
@@ -563,6 +759,10 @@ static void finish_delay(const delay_queue_item &delay)
mpr( "You finish memorising." );
add_spell_to_memory( static_cast<spell_type>( delay.parm1 ) );
break;
+
+ case DELAY_RECITE:
+ mpr( "You finish reciting the Axioms of Law." );
+ break;
case DELAY_PASSWALL:
{
@@ -1289,8 +1489,8 @@ static const char *delay_names[] =
{
"not_delayed", "eat", "armour_on", "armour_off", "jewellery_on",
"memorise", "butcher", "weapon_swap", "passwall",
- "drop_item", "multidrop", "ascending_stairs", "descending_stairs", "run",
- "rest", "travel", "macro", "interruptible", "uninterruptible",
+ "drop_item", "multidrop", "ascending_stairs", "descending_stairs", "recite",
+ "run", "rest", "travel", "macro", "interruptible", "uninterruptible",
};
// Gets a delay given its name.
diff --git a/crawl-ref/source/delay.h b/crawl-ref/source/delay.h
index 81e14807f0..5168d12574 100644
--- a/crawl-ref/source/delay.h
+++ b/crawl-ref/source/delay.h
@@ -74,6 +74,7 @@ void start_delay( delay_type type, int turns, int parm1 = 0, int parm2 = 0 );
void stop_delay( void );
bool you_are_delayed( void );
delay_type current_delay_action( void );
+bool check_recital_audience( void );
void handle_delay( void );
bool is_run_delay(int delay);
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index c70edd1b95..fd5f87287d 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -36,7 +36,6 @@ enum ability_type
{
ABIL_NON_ABILITY = -1,
ABIL_SPIT_POISON = 1, // 1
- ABIL_GLAMOUR,
ABIL_MAPPING,
ABIL_TELEPORTATION,
ABIL_BREATHE_FIRE, // 5
@@ -75,7 +74,8 @@ enum ability_type
ABIL_END_TRANSFORMATION, // 55
// Divine abilities
- ABIL_ZIN_SMITING = 110, // 110
+ ABIL_ZIN_RECITE = 110, // 110
+ ABIL_ZIN_SMITING,
ABIL_ZIN_REVITALISATION,
ABIL_ZIN_SANCTUARY,
ABIL_TSO_REPEL_UNDEAD = 120, // 120
@@ -704,6 +704,7 @@ enum delay_type
DELAY_MULTIDROP,
DELAY_ASCENDING_STAIRS,
DELAY_DESCENDING_STAIRS,
+ DELAY_RECITE, // Zin's Recite invocation
// [dshaligram] Shift-running, resting, travel and macros are now
// also handled as delays.
@@ -1075,7 +1076,6 @@ enum duration_type
DUR_SEE_INVISIBLE,
DUR_WEAPON_BRAND, // general "branding" spell counter
DUR_SILENCE,
- DUR_GLAMOUR,
DUR_CONDENSATION_SHIELD,
DUR_STONESKIN,
DUR_REPEL_UNDEAD,
@@ -1122,6 +1122,7 @@ enum enchant_type
ENCH_FATIGUE, // Post-berserk fatigue.
ENCH_HELD, // caught in a net
ENCH_BATTLE_FRENZY, // Monster is in a battle frenzy
+ ENCH_NEUTRAL,
NUM_ENCHANTMENTS
};
@@ -2512,7 +2513,6 @@ enum spell_type
SPELL_BEND,
SPELL_BACKLIGHT,
SPELL_INTOXICATE, // confusion but only "smart" creatures
- SPELL_GLAMOUR, // charm/confuse/sleep but only "smart" creatures 190
SPELL_EVAPORATE, // turn a potion into a cloud
SPELL_ERINGYAS_SURPRISING_BOUQUET, // turn sticks into herbivore food
SPELL_FRAGMENTATION, // replacement for "orb of frag"
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc
index b9dd3f493e..c4530e341a 100644
--- a/crawl-ref/source/initfile.cc
+++ b/crawl-ref/source/initfile.cc
@@ -479,6 +479,7 @@ void game_options::set_default_activity_interrupts()
// the delay will just trash all queued delays, including travel.
"interrupt_ascending_stairs =",
"interrupt_descending_stairs =",
+ "interrupt_recite = teleport",
"interrupt_uninterruptible =",
"interrupt_weapon_swap =",
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index c573acfb6c..aeb0c84bba 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -1788,7 +1788,7 @@ bool mons_friendly(const monsters *m)
bool mons_neutral(const monsters *m)
{
- return (m->attitude == ATT_NEUTRAL);
+ return (m->attitude == ATT_NEUTRAL || m->has_ench(ENCH_NEUTRAL));
}
mon_attitude_type mons_attitude(const monsters *m)
@@ -4338,7 +4338,7 @@ void monsters::timeout_enchantments(int levels)
case ENCH_SLOW: case ENCH_HASTE: case ENCH_FEAR:
case ENCH_INVIS: case ENCH_CHARM: case ENCH_SLEEP_WARY:
case ENCH_SICK: case ENCH_SLEEPY: case ENCH_PARALYSIS:
- case ENCH_BATTLE_FRENZY:
+ case ENCH_BATTLE_FRENZY: case ENCH_NEUTRAL:
lose_ench_levels(i->second, levels);
break;
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index 9146cea387..12ba52fc84 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -189,7 +189,7 @@ const char* god_gain_power_messages[NUM_GODS][MAX_GOD_ABILITIES] =
// no god
{ "", "", "", "", "" },
// Zin
- { "",
+ { "recite Zin's Axioms of Law",
"smite your foes",
"call upon Zin for revitalisation",
"",
@@ -274,7 +274,7 @@ const char* god_lose_power_messages[NUM_GODS][MAX_GOD_ABILITIES] =
// no god
{ "", "", "", "", "" },
// Zin
- { "",
+ { "recite Zin's Axioms of Law",
"smite your foes",
"call upon Zin for revitalisation",
"",
diff --git a/crawl-ref/source/spells4.cc b/crawl-ref/source/spells4.cc
index 02ffc88846..c2832fc7c5 100644
--- a/crawl-ref/source/spells4.cc
+++ b/crawl-ref/source/spells4.cc
@@ -1519,105 +1519,6 @@ void cast_intoxicate(int pow)
apply_area_visible(intoxicate_monsters, pow);
} // end cast_intoxicate()
-// intended as a high-level Elven (a)bility
-static int glamour_monsters(int x, int y, int pow, int garbage)
-{
- UNUSED( garbage );
-
- int mon = mgrd[x][y];
-
- // Power in this function is already limited by a function of
- // experience level (10 + level / 2) since it's only an ability,
- // never an actual spell. -- bwr
-
- if (mon == NON_MONSTER)
- return (0);
-
- if (one_chance_in(5))
- return (0);
-
- if (mons_intel(menv[mon].type) < I_NORMAL)
- return (0);
-
- if (mons_class_holiness(mon) != MH_NATURAL)
- return (0);
-
- if (!mons_is_humanoid( menv[mon].type ))
- return (0);
-
- const char show_char = mons_char( menv[mon].type );
-
- // gargoyles are immune.
- if (menv[mon].type == MONS_GARGOYLE
- || menv[mon].type == MONS_METAL_GARGOYLE
- || menv[mon].type == MONS_MOLTEN_GARGOYLE)
- {
- return (0);
- }
-
- // orcs resist thru hatred of elves
- // elves resist cause they're elves
- // boggarts are malevolent highly magical wee-folk
- if (show_char == 'o' || show_char == 'e' || menv[mon].type == MONS_BOGGART)
- pow = (pow / 2) + 1;
-
- if (check_mons_resist_magic(&menv[mon], pow))
- return (0);
-
- switch (random2(6))
- {
- case 0:
- menv[mon].add_ench(ENCH_FEAR);
- break;
- case 1:
- case 4:
- menv[mon].add_ench(mon_enchant(ENCH_CONFUSION, 0, KC_YOU));
- break;
- case 2:
- case 5:
- menv[mon].add_ench(ENCH_CHARM);
- break;
- case 3:
- menv[mon].behaviour = BEH_SLEEP;
- break;
- }
-
- // why no, there's no message as to which effect happened >:^)
- if (!one_chance_in(4))
- {
- std::string msg = menv[mon].name(DESC_CAP_THE);
-
- switch (random2(4))
- {
- case 0:
- msg += " looks dazed.";
- break;
- case 1:
- msg += " blinks several times.";
- break;
- case 2:
- msg += " rubs its eye";
- if (menv[mon].type != MONS_CYCLOPS &&
- menv[mon].type != MONS_POLYPHEMUS)
- msg += "s";
- msg += ".";
- break;
- case 3:
- msg += " tilts its head.";
- break;
- }
-
- mpr(msg.c_str());
- }
-
- return (1);
-} // end glamour_monsters()
-
-void cast_glamour(int pow)
-{
- apply_area_visible(glamour_monsters, pow);
-} // end cast_glamour()
-
bool backlight_monsters(int x, int y, int pow, int garbage)
{
UNUSED( pow );
diff --git a/crawl-ref/source/spells4.h b/crawl-ref/source/spells4.h
index f807104e3d..e0ee9d40b9 100644
--- a/crawl-ref/source/spells4.h
+++ b/crawl-ref/source/spells4.h
@@ -37,7 +37,6 @@ void cast_twist(int powc);
void cast_far_strike(int powc);
void cast_swap(int powc);
int cast_apportation(int powc);
-void cast_glamour(int pow);
void cast_ignite_poison(int pow);
void cast_intoxicate(int pow);
void cast_mass_sleep(int pow);
diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc
index f5953b0fd6..be9bf4069d 100644
--- a/crawl-ref/source/spl-book.cc
+++ b/crawl-ref/source/spl-book.cc
@@ -1116,7 +1116,6 @@ bool undead_cannot_memorise(spell_type spell, char being)
case SPELL_CURE_POISON_II:
case SPELL_DEATHS_DOOR:
case SPELL_DRAGON_FORM:
- case SPELL_GLAMOUR:
case SPELL_ICE_FORM:
case SPELL_INTOXICATE:
case SPELL_NECROMUTATION:
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index d719feabde..dab3229a35 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -1829,10 +1829,6 @@ spret_type your_spells( spell_type spell, int powc, bool allow_fail )
cast_intoxicate(powc);
break;
- case SPELL_GLAMOUR:
- cast_glamour(powc);
- break;
-
case SPELL_EVAPORATE:
if ( !cast_evaporate(powc, beam, potion) )
return SPRET_ABORT;
diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h
index ed15d675f4..d61bd51498 100644
--- a/crawl-ref/source/spl-data.h
+++ b/crawl-ref/source/spl-data.h
@@ -1978,15 +1978,6 @@
},
{
- SPELL_GLAMOUR, "Glamour",
- SPTYP_ENCHANTMENT,
- SPFLAG_NONE,
- 5,
- 200,
- NULL
-},
-
-{
SPELL_EVAPORATE, "Evaporate",
SPTYP_FIRE | SPTYP_TRANSMIGRATION,
SPFLAG_DIR_OR_TARGET,