diff options
-rw-r--r-- | crawl-ref/source/abl-show.cc | 46 | ||||
-rw-r--r-- | crawl-ref/source/acr.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/delay.cc | 204 | ||||
-rw-r--r-- | crawl-ref/source/delay.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/enum.h | 8 | ||||
-rw-r--r-- | crawl-ref/source/initfile.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/religion.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/spells4.cc | 99 | ||||
-rw-r--r-- | crawl-ref/source/spells4.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/spl-book.cc | 1 | ||||
-rw-r--r-- | crawl-ref/source/spl-cast.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/spl-data.h | 9 |
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, |