diff options
author | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-06-10 13:37:17 +0000 |
---|---|---|
committer | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-06-10 13:37:17 +0000 |
commit | 8fcf9242d71cf3fa44ad46bc5e37313e8b6b73b9 (patch) | |
tree | 4ba2cc2830d7503540677ae6ededc9192dbb076f /crawl-ref/source/spl-cast.cc | |
parent | 22e375d42eabd760283d4e0d8ea42c65e66108af (diff) | |
download | crawl-ref-8fcf9242d71cf3fa44ad46bc5e37313e8b6b73b9.tar.gz crawl-ref-8fcf9242d71cf3fa44ad46bc5e37313e8b6b73b9.zip |
Reorder spells in your_spells() and clean up.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5702 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/spl-cast.cc')
-rw-r--r-- | crawl-ref/source/spl-cast.cc | 912 |
1 files changed, 466 insertions, 446 deletions
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index 065c549315..a44084f7e7 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -913,6 +913,9 @@ static bool _spell_is_uncastable(spell_type spell) // Returns SPRET_SUCCESS if spell is successfully cast for purposes of // exercising, SPRET_FAIL otherwise, or SPRET_ABORT if the player canceled // the casting. +// Not all of these are actually real spells; invocations, decks, rods or misc. +// effects might also land us here. +// Others are currently unused or unimplemented. spret_type your_spells(spell_type spell, int powc, bool allow_fail) { struct dist spd; @@ -938,10 +941,10 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) (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); + (testbits( flags, SPFLAG_TARGET ) ? DIR_TARGET : + testbits( flags, SPFLAG_GRID ) ? DIR_TARGET : + testbits( flags, SPFLAG_DIR ) ? DIR_DIR + : DIR_NONE); const char *prompt = get_spell_target_prompt(spell); if (spell == SPELL_EVAPORATE) @@ -1072,374 +1075,351 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) switch (spell) { - case SPELL_IDENTIFY: - identify(powc); - break; - - case SPELL_TELEPORT_SELF: - you_teleport(); + // Attack spells. + // using burn_freeze() + case SPELL_BURN: + if (burn_freeze(powc, BEAM_FIRE) == -1) + return (SPRET_ABORT); break; - case SPELL_CAUSE_FEAR: - mass_enchantment(ENCH_FEAR, powc, MHITYOU); + case SPELL_FREEZE: + if (burn_freeze(powc, BEAM_COLD) == -1) + return (SPRET_ABORT); break; - case SPELL_CREATE_NOISE: // unused, the player can shout to do this - bwr - noisy(25, you.x_pos, you.y_pos, "You hear a voice calling your name!"); + case SPELL_CRUSH: + if (burn_freeze(powc, BEAM_MISSILE) == -1) + return (SPRET_ABORT); break; - case SPELL_REMOVE_CURSE: - remove_curse(false); + case SPELL_ARC: + if (burn_freeze(powc, BEAM_ELECTRICITY) == -1) + return (SPRET_ABORT); break; + // direct beams/bolts case SPELL_MAGIC_DART: if (!zapping(ZAP_MAGIC_DARTS, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_FIREBALL: - if (!fireball(powc, beam)) - return (SPRET_ABORT); - break; - - case SPELL_DELAYED_FIREBALL: - crawl_state.cant_cmd_repeat("You can't repeat delayed fireball."); - // This spell has two main advantages over Fireball: - // - // (1) The release is instantaneous, so monsters will not - // get an action before the player... this allows the - // player to hit monsters with a double fireball (this - // is why we only allow one delayed fireball at a time, - // if you want to allow for more, then the release should - // take at least some amount of time). - // - // The casting of this spell still costs a turn. So - // casting Delayed Fireball and immediately releasing - // the fireball is only slightly different than casting - // a regular Fireball (monsters act in the middle instead - // of at the end). This is why we allow for the spell - // level discount so that Fireball is free with this spell - // (so that it only costs 7 levels instead of 13 to have - // both). - // - // (2) When the fireball is released, it is guaranteed to - // go off... the spell only fails at this point. This can - // be a large advantage for characters who have difficulty - // casting Fireball in their standard equipment. However, - // the power level for the actual fireball is determined at - // release, so if you do swap out your enhancers you'll - // get a less powerful ball when its released. -- bwr - // - if (!you.attribute[ ATTR_DELAYED_FIREBALL ]) - { - // okay, this message is weak but functional -- bwr - mpr( "You feel magically charged." ); - you.attribute[ ATTR_DELAYED_FIREBALL ] = 1; - } - else - canned_msg( MSG_NOTHING_HAPPENS ); - break; - case SPELL_STRIKING: if (!zapping(ZAP_STRIKING, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_CONJURE_FLAME: - if (!conjure_flame(powc)) + case SPELL_THROW_FLAME: + if (!zapping(ZAP_FLAME, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_DIG: - if (!zapping(ZAP_DIGGING, powc, beam, true)) + case SPELL_THROW_FROST: + if (!zapping(ZAP_FROST, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_BOLT_OF_FIRE: - if (!zapping(ZAP_FIRE, powc, beam, true)) + case SPELL_PAIN: + if (!zapping(ZAP_PAIN, powc, beam, true)) return (SPRET_ABORT); + dec_hp(1, false); break; - case SPELL_BOLT_OF_COLD: - if (!zapping(ZAP_COLD, powc, beam, true)) + case SPELL_FLAME_TONGUE: + if (!zapping(ZAP_FLAME_TONGUE, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_LIGHTNING_BOLT: - if (!zapping(ZAP_LIGHTNING, powc, beam, true)) + case SPELL_SANDBLAST: + if (!cast_sandblast(powc, beam)) return (SPRET_ABORT); break; - case SPELL_BOLT_OF_MAGMA: - if (!zapping(ZAP_MAGMA, powc, beam, true)) + case SPELL_BONE_SHARDS: + if (!cast_bone_shards(powc, beam)) return (SPRET_ABORT); break; - case SPELL_POLYMORPH_OTHER: - // Trying is already enough, even if it fails. - did_god_conduct(DID_DELIBERATE_MUTATING, 10); - - if (!zapping(ZAP_POLYMORPH_OTHER, powc, beam, true)) + case SPELL_SHOCK: + if (!zapping(ZAP_ELECTRICITY, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_SLOW: - if (!zapping(ZAP_SLOWING, powc, beam, true)) + case SPELL_STING: + if (!zapping(ZAP_STING, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_HASTE: - if (!zapping(ZAP_HASTING, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_VAMPIRIC_DRAINING: + vampiric_drain(powc, spd); break; - case SPELL_PARALYSE: - if (!zapping(ZAP_PARALYSIS, powc, beam, true)) + case SPELL_BOLT_OF_FIRE: + if (!zapping(ZAP_FIRE, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_CONFUSE: - if (!zapping(ZAP_CONFUSION, powc, beam, true)) + case SPELL_BOLT_OF_COLD: + if (!zapping(ZAP_COLD, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_CONFUSING_TOUCH: - cast_confusing_touch(powc); - break; - - case SPELL_SURE_BLADE: - cast_sure_blade(powc); - break; - - case SPELL_INVISIBILITY: - if (!zapping(ZAP_INVISIBILITY, powc, beam, true)) + case SPELL_STONE_ARROW: + if (!zapping(ZAP_STONE_ARROW, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_THROW_FLAME: - if (!zapping(ZAP_FLAME, powc, beam, true)) + case SPELL_POISON_ARROW: + if (!zapping(ZAP_POISON_ARROW, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_THROW_FROST: - if (!zapping(ZAP_FROST, powc, beam, true)) + case SPELL_BOLT_OF_IRON: + if (!zapping(ZAP_IRON_BOLT, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_CONTROLLED_BLINK: - if (blink(powc, true) == -1) + case SPELL_LIGHTNING_BOLT: + if (!zapping(ZAP_LIGHTNING, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_FREEZING_CLOUD: - cast_big_c(powc, CLOUD_COLD, KC_YOU, beam); + case SPELL_BOLT_OF_MAGMA: + if (!zapping(ZAP_MAGMA, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_MEPHITIC_CLOUD: - if (!stinking_cloud(powc, beam)) + case SPELL_VENOM_BOLT: + if (!zapping(ZAP_VENOM_BOLT, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_RING_OF_FLAMES: - cast_ring_of_flames(powc); + case SPELL_BOLT_OF_DRAINING: + if (!zapping(ZAP_NEGATIVE_ENERGY, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_RESTORE_STRENGTH: - restore_stat(STAT_STRENGTH, 0, false); + case SPELL_LEHUDIBS_CRYSTAL_SPEAR: + if (!zapping(ZAP_CRYSTAL_SPEAR, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_RESTORE_INTELLIGENCE: - restore_stat(STAT_INTELLIGENCE, 0, false); + case SPELL_BOLT_OF_INACCURACY: + if (!zapping(ZAP_BEAM_OF_ENERGY, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_RESTORE_DEXTERITY: - restore_stat(STAT_DEXTERITY, 0, false); + case SPELL_STICKY_FLAME: + if (!zapping(ZAP_STICKY_FLAME, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_VENOM_BOLT: - if (!zapping(ZAP_VENOM_BOLT, powc, beam, true)) + case SPELL_DISPEL_UNDEAD: + if (!zapping(ZAP_DISPEL_UNDEAD, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_OLGREBS_TOXIC_RADIANCE: - cast_toxic_radiance(); + case SPELL_ISKENDERUNS_MYSTIC_BLAST: + if (!zapping(ZAP_MYSTIC_BLAST, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_TELEPORT_OTHER: - // teleport creature (I think) - if (!zapping(ZAP_TELEPORTATION, powc, beam, true)) + case SPELL_THUNDERBOLT: + if (!zapping(ZAP_LIGHTNING, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_LESSER_HEALING: - if (!cast_healing(5)) + case SPELL_AGONY: + if (!zapping(ZAP_AGONY, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_GREATER_HEALING: - if (!cast_healing(25)) + case SPELL_DISRUPT: + if (!zapping(ZAP_DISRUPTION, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_CURE_POISON_I: //jmf: `healing' version? group w/ S_C_P_II? - cast_cure_poison(powc); + case SPELL_DISINTEGRATE: + if (!zapping(ZAP_DISINTEGRATION, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_PURIFICATION: - purification(); + case SPELL_ICE_BOLT: + if (!zapping(ZAP_ICE_BOLT, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_DEATHS_DOOR: - cast_deaths_door(powc); + case SPELL_ORB_OF_FRAGMENTATION: + if (!zapping(ZAP_ORB_OF_FRAGMENTATION, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_SELECTIVE_AMNESIA: - crawl_state.cant_cmd_repeat("You can't repeat selective amnesia."); - - if (!cast_selective_amnesia(false)) + case SPELL_CIGOTUVIS_DEGENERATION: + if (!zapping(ZAP_DEGENERATION, powc, beam, true)) return (SPRET_ABORT); - break; // Sif Muna power calls with true - - case SPELL_MASS_CONFUSION: - mass_enchantment(ENCH_CONFUSION, powc, MHITYOU); break; - case SPELL_SMITING: - cast_smiting(powc, spd); + case SPELL_ORB_OF_ELECTROCUTION: + if (!zapping(ZAP_ORB_OF_ELECTRICITY, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_REPEL_UNDEAD: - turn_undead(50); + case SPELL_FLAME_OF_CLEANSING: + if (!zapping(ZAP_CLEANSING_FLAME, powc, beam, true)) + return (SPRET_ABORT); break; case SPELL_HOLY_WORD: holy_word(50, HOLY_WORD_SPELL, you.x_pos, you.y_pos, true); break; - case SPELL_DETECT_CURSE: - detect_curse(false); - break; - - case SPELL_ABJURATION_I: - case SPELL_ABJURATION_II: - abjuration(powc); - break; - - case SPELL_LEVITATION: - potion_effect( POT_LEVITATION, powc ); + case SPELL_REPEL_UNDEAD: + turn_undead(50); break; - case SPELL_BOLT_OF_DRAINING: - if (!zapping(ZAP_NEGATIVE_ENERGY, powc, beam, true)) + case SPELL_HELLFIRE: + // Should only be available from + // staff of Dispater & Sceptre of Asmodeus + if (!zapping(ZAP_HELLFIRE, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_LEHUDIBS_CRYSTAL_SPEAR: - if (!zapping(ZAP_CRYSTAL_SPEAR, powc, beam, true)) + // Clouds and explosions. + case SPELL_MEPHITIC_CLOUD: + if (!stinking_cloud(powc, beam)) return (SPRET_ABORT); break; - case SPELL_BOLT_OF_INACCURACY: - if (!zapping(ZAP_BEAM_OF_ENERGY, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_EVAPORATE: + if (!cast_evaporate(powc, beam, potion)) + return SPRET_ABORT; break; case SPELL_POISONOUS_CLOUD: cast_big_c(powc, CLOUD_POISON, KC_YOU, beam); break; - case SPELL_POISON_ARROW: - if (!zapping(ZAP_POISON_ARROW, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_FREEZING_CLOUD: + cast_big_c(powc, CLOUD_COLD, KC_YOU, beam); break; case SPELL_FIRE_STORM: cast_fire_storm(powc, beam); break; - case SPELL_DETECT_TRAPS: - mprf("You detect %s", (detect_traps(powc) > 0) ? "traps!" - : "nothing."); - break; - - case SPELL_BLINK: - random_blink(true); - break; - - case SPELL_ISKENDERUNS_MYSTIC_BLAST: - if (!zapping(ZAP_MYSTIC_BLAST, powc, beam, true)) + case SPELL_ICE_STORM: + if (!zapping(ZAP_ICE_STORM, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_ENSLAVEMENT: - if (!zapping(ZAP_ENSLAVEMENT, powc, beam, true)) + case SPELL_FIREBALL: + if (!fireball(powc, beam)) return (SPRET_ABORT); break; - case SPELL_MAGIC_MAPPING: - if (you.level_type == LEVEL_PANDEMONIUM) + case SPELL_DELAYED_FIREBALL: + crawl_state.cant_cmd_repeat("You can't repeat delayed fireball."); + // This spell has two main advantages over Fireball: + // + // (1) The release is instantaneous, so monsters will not + // get an action before the player... this allows the + // player to hit monsters with a double fireball (this + // is why we only allow one delayed fireball at a time, + // if you want to allow for more, then the release should + // take at least some amount of time). + // + // The casting of this spell still costs a turn. So + // casting Delayed Fireball and immediately releasing + // the fireball is only slightly different than casting + // a regular Fireball (monsters act in the middle instead + // of at the end). This is why we allow for the spell + // level discount so that Fireball is free with this spell + // (so that it only costs 7 levels instead of 13 to have + // both). + // + // (2) When the fireball is released, it is guaranteed to + // go off... the spell only fails at this point. This can + // be a large advantage for characters who have difficulty + // casting Fireball in their standard equipment. However, + // the power level for the actual fireball is determined at + // release, so if you do swap out your enhancers you'll + // get a less powerful ball when its released. -- bwr + // + if (!you.attribute[ ATTR_DELAYED_FIREBALL ]) { - mpr("Your Earth magic cannot map Pandemonium."); + // okay, this message is weak but functional -- bwr + mpr( "You feel magically charged." ); + you.attribute[ ATTR_DELAYED_FIREBALL ] = 1; } else - { - powc = stepdown_value( powc, 10, 10, 40, 45 ); - magic_mapping( 5 + powc, 50 + random2avg( powc * 2, 2 ), false ); - } + canned_msg( MSG_NOTHING_HAPPENS ); break; - case SPELL_HEAL_OTHER: - zapping(ZAP_HEALING, powc, beam); + // LOS spells + case SPELL_SMITING: + cast_smiting(powc, spd); break; - case SPELL_PAIN: - if (!zapping(ZAP_PAIN, powc, beam, true)) - return (SPRET_ABORT); - dec_hp(1, false); + case SPELL_TWIST: + cast_twist(powc); break; - case SPELL_EXTENSION: - extension(powc); + case SPELL_AIRSTRIKE: + airstrike(powc, spd); break; - case SPELL_CONTROL_UNDEAD: - mass_enchantment(ENCH_CHARM, powc, MHITYOU); + case SPELL_FRAGMENTATION: + cast_fragmentation(powc); break; - case SPELL_VAMPIRIC_DRAINING: - vampiric_drain(powc, spd); + case SPELL_FAR_STRIKE: + cast_far_strike(powc); break; - case SPELL_DETECT_ITEMS: - mprf("You detect %s", (detect_items(powc) > 0) ? "items!" - : "nothing."); + case SPELL_PORTAL_PROJECTILE: + if (!cast_portal_projectile(powc)) + return SPRET_ABORT; break; - case SPELL_BORGNJORS_REVIVIFICATION: - cast_revivification(powc); + // other effects + case SPELL_DISCHARGE: + cast_discharge(powc); break; - case SPELL_BURN: - if (burn_freeze(powc, BEAM_FIRE) == -1) - return (SPRET_ABORT); + case SPELL_CHAIN_LIGHTNING: + cast_chain_lightning(powc); break; - case SPELL_FREEZE: - if (burn_freeze(powc, BEAM_COLD) == -1) - return (SPRET_ABORT); + case SPELL_DISPERSAL: + cast_dispersal(powc); + break; + + case SPELL_SHATTER: + cast_shatter(powc); + break; + + case SPELL_BEND: + cast_bend(powc); + break; + + case SPELL_SYMBOL_OF_TORMENT: + torment(TORMENT_SPELL, you.x_pos, you.y_pos); break; case SPELL_OZOCUBUS_REFRIGERATION: cast_refrigeration(powc); break; - case SPELL_STICKY_FLAME: - if (!zapping(ZAP_STICKY_FLAME, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_IGNITE_POISON: + cast_ignite_poison(powc); break; - // Spells that create new monsters. If a god is making you cast one - // of these spells, any monsters produced will count as god gifts. + case SPELL_ROTTING: + cast_rotting(powc); + break; + + // Summoning spells, and other spells that create new monsters. + // If a god is making you cast one of these spells, any monsters produced + // will count as god gifts. case SPELL_SUMMON_BUTTERFLIES: cast_summon_butterflies(powc, god_gift); break; @@ -1494,6 +1474,7 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) break; case SPELL_TUKIMAS_DANCE: + // Temporarily turns a wielded weapon into a dancing weapon. crawl_state.cant_cmd_repeat("You can't repeat Tukima's Dance."); cast_tukimas_dance(powc, god_gift); break; @@ -1548,44 +1529,92 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) case SPELL_DEATH_CHANNEL: cast_death_channel(powc, god_gift); break; - // End of spells that create new monsters. - case SPELL_OZOCUBUS_ARMOUR: - ice_armour(powc, false); + // Enchantments. + case SPELL_CONFUSING_TOUCH: + cast_confusing_touch(powc); break; - case SPELL_REPEL_MISSILES: - missile_prot(powc); + case SPELL_BACKLIGHT: + if (!zapping(ZAP_BACKLIGHT, powc + 10, beam, true)) + return (SPRET_ABORT); break; - case SPELL_BERSERKER_RAGE: - cast_berserk(); + case SPELL_CAUSE_FEAR: + mass_enchantment(ENCH_FEAR, powc, MHITYOU); break; - case SPELL_DISPEL_UNDEAD: - if (!zapping(ZAP_DISPEL_UNDEAD, powc, beam, true)) + case SPELL_SLOW: + if (!zapping(ZAP_SLOWING, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_THUNDERBOLT: - if (!zapping(ZAP_LIGHTNING, powc, beam, true)) + case SPELL_CONFUSE: + if (!zapping(ZAP_CONFUSION, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_FLAME_OF_CLEANSING: - if (!zapping(ZAP_CLEANSING_FLAME, powc, beam, true)) + case SPELL_ENSLAVEMENT: + if (!zapping(ZAP_ENSLAVEMENT, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_REGENERATION: - cast_regen(powc); + case SPELL_TAME_BEASTS: + cast_tame_beasts(powc); break; - case SPELL_BONE_SHARDS: - if (!cast_bone_shards(powc, beam)) + case SPELL_SLEEP: + { + const int sleep_power = + stepdown_value( powc * 9 / 10, 5, 35, 45, 50 ); +#ifdef DEBUG_DIAGNOSTICS + mprf(MSGCH_DIAGNOSTICS, "Sleep power stepdown: %d -> %d", + powc, sleep_power); +#endif + if (!zapping(ZAP_SLEEP, sleep_power, beam, true)) + return (SPRET_ABORT); + break; + } + + case SPELL_PARALYSE: + if (!zapping(ZAP_PARALYSIS, powc, beam, true)) return (SPRET_ABORT); break; + case SPELL_POLYMORPH_OTHER: + // Trying is already enough, even if it fails. + did_god_conduct(DID_DELIBERATE_MUTATING, 10); + + if (!zapping(ZAP_POLYMORPH_OTHER, powc, beam, true)) + return (SPRET_ABORT); + break; + + case SPELL_TELEPORT_OTHER: + if (!zapping(ZAP_TELEPORTATION, powc, beam, true)) + return (SPRET_ABORT); + break; + + case SPELL_INTOXICATE: + cast_intoxicate(powc); + break; + + case SPELL_MASS_CONFUSION: + mass_enchantment(ENCH_CONFUSION, powc, MHITYOU); + break; + + case SPELL_MASS_SLEEP: + cast_mass_sleep(powc); + break; + + case SPELL_CONTROL_UNDEAD: + mass_enchantment(ENCH_CHARM, powc, MHITYOU); + break; + + case SPELL_ABJURATION_I: + case SPELL_ABJURATION_II: + abjuration(powc); + break; + case SPELL_BANISHMENT: if (beam.target_x == you.x_pos && beam.target_y == you.y_pos) { @@ -1596,29 +1625,79 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) return (SPRET_ABORT); break; - case SPELL_CIGOTUVIS_DEGENERATION: - if (!zapping(ZAP_DEGENERATION, powc, beam, true)) + case SPELL_OLGREBS_TOXIC_RADIANCE: + cast_toxic_radiance(); + break; + + // beneficial enchantments + case SPELL_HASTE: + if (!zapping(ZAP_HASTING, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_STING: - if (!zapping(ZAP_STING, powc, beam, true)) + case SPELL_INVISIBILITY: + if (!zapping(ZAP_INVISIBILITY, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_SUBLIMATION_OF_BLOOD: - cast_sublimation_of_blood(powc); + case SPELL_LESSER_HEALING: + if (!cast_healing(5)) + return (SPRET_ABORT); break; - case SPELL_HELLFIRE: - // Should only be available from: - // staff of Dispater & Sceptre of Asmodeus - if (!zapping(ZAP_HELLFIRE, powc, beam, true)) + case SPELL_GREATER_HEALING: + if (!cast_healing(25)) return (SPRET_ABORT); break; - case SPELL_CORPSE_ROT: - corpse_rot(0); + case SPELL_HEAL_OTHER: + zapping(ZAP_HEALING, powc, beam); + break; + + // Self-enchantments. (Spells that can only affect the player.) + // Resistances. + case SPELL_INSULATION: + cast_insulation(powc); + break; + + case SPELL_RESIST_POISON: + cast_resist_poison(powc); + break; + + case SPELL_SEE_INVISIBLE: + cast_see_invisible(powc); + break; + + case SPELL_CONTROL_TELEPORT: + cast_teleport_control(powc); + break; + + // Healing. + case SPELL_CURE_POISON_I: // Ely version + case SPELL_CURE_POISON_II: // Poison magic version + // both use same function + cast_cure_poison(powc); + break; + + case SPELL_PURIFICATION: + purification(); + break; + + case SPELL_RESTORE_STRENGTH: + restore_stat(STAT_STRENGTH, 0, false); + break; + + case SPELL_RESTORE_INTELLIGENCE: + restore_stat(STAT_INTELLIGENCE, 0, false); + break; + + case SPELL_RESTORE_DEXTERITY: + restore_stat(STAT_DEXTERITY, 0, false); + break; + + // Weapon brands. + case SPELL_SURE_BLADE: + cast_sure_blade(powc); break; case SPELL_TUKIMAS_VORPAL_BLADE: @@ -1636,11 +1715,6 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) canned_msg(MSG_SPELL_FIZZLES); break; - case SPELL_LETHAL_INFUSION: - if (!brand_weapon(SPWPN_DRAINING, powc)) - canned_msg(MSG_SPELL_FIZZLES); - break; - case SPELL_MAXWELLS_SILVER_HAMMER: if (!brand_weapon(SPWPN_DUMMY_CRUSHING, powc)) canned_msg(MSG_SPELL_FIZZLES); @@ -1651,85 +1725,56 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) canned_msg(MSG_SPELL_FIZZLES); break; - case SPELL_CRUSH: - burn_freeze(powc, BEAM_MISSILE); - break; - - case SPELL_BOLT_OF_IRON: - if (!zapping(ZAP_IRON_BOLT, powc, beam, true)) - return (SPRET_ABORT); - break; - - case SPELL_STONE_ARROW: - if (!zapping(ZAP_STONE_ARROW, powc, beam, true)) - return (SPRET_ABORT); - break; - - case SPELL_TOMB_OF_DOROKLOHE: - entomb(powc); - break; - - case SPELL_STONEMAIL: - stone_scales(powc); + case SPELL_EXCRUCIATING_WOUNDS: + if (!brand_weapon(SPWPN_PAIN, powc)) + canned_msg(MSG_SPELL_FIZZLES); break; - case SPELL_SHOCK: - if (!zapping(ZAP_ELECTRICITY, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_LETHAL_INFUSION: + if (!brand_weapon(SPWPN_DRAINING, powc)) + canned_msg(MSG_SPELL_FIZZLES); break; - case SPELL_SWIFTNESS: - cast_swiftness(powc); + case SPELL_WARP_BRAND: + if (!brand_weapon(SPWPN_DISTORTION, powc)) + canned_msg(MSG_SPELL_FIZZLES); break; - case SPELL_FLY: - cast_fly(powc); + case SPELL_POISON_AMMUNITION: + cast_poison_ammo(); break; - case SPELL_INSULATION: - cast_insulation(powc); + // Transformations. + case SPELL_BLADE_HANDS: + transform(powc, TRAN_BLADE_HANDS); break; - case SPELL_ORB_OF_ELECTROCUTION: - if (!zapping(ZAP_ORB_OF_ELECTRICITY, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_SPIDER_FORM: + transform(powc, TRAN_SPIDER); break; - case SPELL_DETECT_CREATURES: - { - int known_plants = count_detected_plants(); - int num_creatures = detect_creatures(powc); - - if (!num_creatures) - mpr("You detect nothing."); - else if (num_creatures == known_plants) - mpr("You detect no further creatures."); - else - mpr("You detect creatures!"); - break; - } - case SPELL_CURE_POISON_II: // poison magic version of cure poison - cast_cure_poison(powc); + case SPELL_STATUE_FORM: + transform(powc, TRAN_STATUE); break; - case SPELL_CONTROL_TELEPORT: - cast_teleport_control(powc); + case SPELL_ICE_FORM: + transform(powc, TRAN_ICE_BEAST); break; - case SPELL_POISON_AMMUNITION: - cast_poison_ammo(); + case SPELL_DRAGON_FORM: + transform(powc, TRAN_DRAGON); break; - case SPELL_RESIST_POISON: - cast_resist_poison(powc); + case SPELL_NECROMUTATION: + transform(powc, TRAN_LICH); break; - case SPELL_PROJECTED_NOISE: - project_noise(); + case SPELL_AIR_WALK: + transform(powc, TRAN_AIR); break; case SPELL_ALTER_SELF: - // trying is already enough, even if it fails + // Trying is already enough, even if it fails. did_god_conduct(DID_DELIBERATE_MUTATING, 10); crawl_state.cant_cmd_repeat("You can't repeat Alter Self."); @@ -1749,249 +1794,224 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) mpr("Odd... you don't feel any different."); break; - case SPELL_DEBUGGING_RAY: - if (!zapping(ZAP_DEBUGGING_RAY, powc, beam, true)) - return (SPRET_ABORT); - break; - - case SPELL_RECALL: - recall(0); + // General enhancement. + case SPELL_BERSERKER_RAGE: + cast_berserk(); break; - case SPELL_PORTAL: - crawl_state.cant_cmd_repeat("You can't repeat create portal."); - if (portal() == -1) - return (SPRET_ABORT); + case SPELL_REGENERATION: + cast_regen(powc); break; - case SPELL_AGONY: - if (!zapping(ZAP_AGONY, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_REPEL_MISSILES: + missile_prot(powc); break; - case SPELL_SPIDER_FORM: - transform(powc, TRAN_SPIDER); + case SPELL_DEFLECT_MISSILES: + deflection(powc); break; - case SPELL_DISRUPT: - if (!zapping(ZAP_DISRUPTION, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_SWIFTNESS: + cast_swiftness(powc); break; - case SPELL_DISINTEGRATE: - if (!zapping(ZAP_DISINTEGRATION, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_LEVITATION: + potion_effect( POT_LEVITATION, powc ); break; - case SPELL_BLADE_HANDS: - transform(powc, TRAN_BLADE_HANDS); + case SPELL_FLY: + cast_fly(powc); break; - case SPELL_STATUE_FORM: - transform(powc, TRAN_STATUE); + case SPELL_STONESKIN: + cast_stoneskin(powc); break; - case SPELL_ICE_FORM: - transform(powc, TRAN_ICE_BEAST); + case SPELL_STONEMAIL: + stone_scales(powc); break; - case SPELL_DRAGON_FORM: - transform(powc, TRAN_DRAGON); + case SPELL_CONDENSATION_SHIELD: + cast_condensation_shield(powc); break; - case SPELL_NECROMUTATION: - transform(powc, TRAN_LICH); + case SPELL_OZOCUBUS_ARMOUR: + ice_armour(powc, false); break; - case SPELL_SYMBOL_OF_TORMENT: - torment(TORMENT_SPELL, you.x_pos, you.y_pos); + case SPELL_FORESCRY: + cast_forescry(powc); break; - case SPELL_DEFLECT_MISSILES: - deflection(powc); + case SPELL_SILENCE: + cast_silence(powc); break; - case SPELL_ORB_OF_FRAGMENTATION: - if (!zapping(ZAP_ORB_OF_FRAGMENTATION, powc, beam, true)) - return (SPRET_ABORT); - break; + // other + case SPELL_SELECTIVE_AMNESIA: + crawl_state.cant_cmd_repeat("You can't repeat selective amnesia."); - case SPELL_ICE_BOLT: - if (!zapping(ZAP_ICE_BOLT, powc, beam, true)) + // Sif Muna power calls with true + if (!cast_selective_amnesia(false)) return (SPRET_ABORT); break; - case SPELL_ARC: - if (burn_freeze(powc, BEAM_ELECTRICITY) == -1) - return (SPRET_ABORT); + case SPELL_EXTENSION: + extension(powc); break; - case SPELL_AIRSTRIKE: - airstrike(powc, spd); + case SPELL_BORGNJORS_REVIVIFICATION: + cast_revivification(powc); break; - case SPELL_ICE_STORM: - if (!zapping(ZAP_ICE_STORM, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_SUBLIMATION_OF_BLOOD: + cast_sublimation_of_blood(powc); break; - //jmf: new spells 19mar2000 - case SPELL_FLAME_TONGUE: - if (!zapping(ZAP_FLAME_TONGUE, powc, beam, true)) - return (SPRET_ABORT); + case SPELL_DEATHS_DOOR: + cast_deaths_door(powc); break; - case SPELL_PASSWALL: - cast_passwall(powc); + case SPELL_RING_OF_FLAMES: + cast_ring_of_flames(powc); break; - case SPELL_IGNITE_POISON: - cast_ignite_poison(powc); + // Escape spells. + case SPELL_BLINK: + random_blink(true); break; - case SPELL_TAME_BEASTS: - cast_tame_beasts(powc); + case SPELL_TELEPORT_SELF: + you_teleport(); break; - case SPELL_SLEEP: - { - const int sleep_power = - stepdown_value( powc * 9 / 10, 5, 35, 45, 50 ); -#ifdef DEBUG_DIAGNOSTICS - mprf(MSGCH_DIAGNOSTICS, "Sleep power stepdown: %d -> %d", - powc, sleep_power); -#endif - if (!zapping(ZAP_SLEEP, sleep_power, beam, true)) + case SPELL_SEMI_CONTROLLED_BLINK: + //jmf: powc is ignored + if (cast_semi_controlled_blink(powc) == -1) return (SPRET_ABORT); break; - } - case SPELL_MASS_SLEEP: - cast_mass_sleep(powc); + case SPELL_CONTROLLED_BLINK: + if (blink(powc, true) == -1) + return (SPRET_ABORT); break; - case SPELL_DETECT_MAGIC: - mpr("FIXME: implement!"); + // Utility spells. + case SPELL_DETECT_CURSE: + detect_curse(false); break; - case SPELL_DETECT_SECRET_DOORS: - cast_detect_secret_doors(powc); + case SPELL_REMOVE_CURSE: + remove_curse(false); break; - case SPELL_SEE_INVISIBLE: - cast_see_invisible(powc); + case SPELL_IDENTIFY: + identify(powc); break; - case SPELL_FORESCRY: - cast_forescry(powc); + case SPELL_DETECT_SECRET_DOORS: + cast_detect_secret_doors(powc); break; - case SPELL_EXCRUCIATING_WOUNDS: - if (!brand_weapon(SPWPN_PAIN, powc)) - canned_msg(MSG_SPELL_FIZZLES); + case SPELL_DETECT_TRAPS: + mprf("You detect %s", (detect_traps(powc) > 0) ? "traps!" + : "nothing."); break; - case SPELL_WARP_BRAND: - if (!brand_weapon(SPWPN_DISTORTION, powc)) - canned_msg(MSG_SPELL_FIZZLES); + case SPELL_DETECT_ITEMS: + mprf("You detect %s", (detect_items(powc) > 0) ? "items!" + : "nothing."); break; - case SPELL_SILENCE: - cast_silence(powc); - break; + case SPELL_DETECT_CREATURES: + { + int known_plants = count_detected_plants(); + int num_creatures = detect_creatures(powc); - case SPELL_SHATTER: - cast_shatter(powc); + if (!num_creatures) + mpr("You detect nothing."); + else if (num_creatures == known_plants) + mpr("You detect no further creatures."); + else + mpr("You detect creatures!"); break; + } - case SPELL_DISPERSAL: - cast_dispersal(powc); + case SPELL_MAGIC_MAPPING: + if (you.level_type == LEVEL_PANDEMONIUM) + { + mpr("Your Earth magic cannot map Pandemonium."); + } + else + { + powc = stepdown_value( powc, 10, 10, 40, 45 ); + magic_mapping( 5 + powc, 50 + random2avg( powc * 2, 2 ), false ); + } break; - case SPELL_DISCHARGE: - cast_discharge(powc); + case SPELL_CREATE_NOISE: // Unused, the player can shout to do this. - bwr + noisy(25, you.x_pos, you.y_pos, "You hear a voice calling your name!"); break; - case SPELL_BEND: - cast_bend(powc); + case SPELL_PROJECTED_NOISE: + project_noise(); break; - case SPELL_BACKLIGHT: - if (!zapping(ZAP_BACKLIGHT, powc + 10, beam, true)) + case SPELL_CONJURE_FLAME: + if (!conjure_flame(powc)) return (SPRET_ABORT); break; - case SPELL_INTOXICATE: - cast_intoxicate(powc); - break; - - case SPELL_EVAPORATE: - if ( !cast_evaporate(powc, beam, potion) ) - return SPRET_ABORT; - break; - - case SPELL_FULSOME_DISTILLATION: - cast_fulsome_distillation(powc); + case SPELL_DIG: + if (!zapping(ZAP_DIGGING, powc, beam, true)) + return (SPRET_ABORT); break; - case SPELL_FRAGMENTATION: - cast_fragmentation(powc); + case SPELL_PASSWALL: + cast_passwall(powc); break; - case SPELL_AIR_WALK: - transform(powc, TRAN_AIR); + case SPELL_TOMB_OF_DOROKLOHE: + entomb(powc); break; - case SPELL_SANDBLAST: - if (!cast_sandblast(powc, beam)) + case SPELL_APPORTATION: + if (cast_apportation(powc) == -1) return (SPRET_ABORT); break; - case SPELL_ROTTING: - cast_rotting(powc); + case SPELL_SWAP: + crawl_state.cant_cmd_repeat("You can't swap."); + cast_swap(powc); break; - case SPELL_CONDENSATION_SHIELD: - cast_condensation_shield(powc); + case SPELL_RECALL: + recall(0); break; - case SPELL_SEMI_CONTROLLED_BLINK: - //jmf: powc is ignored - if (cast_semi_controlled_blink(powc) == -1) + case SPELL_PORTAL: + crawl_state.cant_cmd_repeat("You can't repeat create portal."); + if (portal() == -1) return (SPRET_ABORT); break; - case SPELL_STONESKIN: - cast_stoneskin(powc); - break; - - case SPELL_CHAIN_LIGHTNING: - cast_chain_lightning(powc); - break; - - case SPELL_TWIST: - cast_twist(powc); + case SPELL_CORPSE_ROT: + corpse_rot(0); break; - case SPELL_FAR_STRIKE: - cast_far_strike(powc); + case SPELL_FULSOME_DISTILLATION: + cast_fulsome_distillation(powc); break; - case SPELL_SWAP: - crawl_state.cant_cmd_repeat("You can't swap."); - cast_swap(powc); + case SPELL_DETECT_MAGIC: + mpr("FIXME: implement!"); break; - case SPELL_APPORTATION: - if (cast_apportation(powc) == -1) + case SPELL_DEBUGGING_RAY: + if (!zapping(ZAP_DEBUGGING_RAY, powc, beam, true)) return (SPRET_ABORT); break; - case SPELL_PORTAL_PROJECTILE: - if (!cast_portal_projectile(powc)) - return SPRET_ABORT; - break; - default: mpr("Invalid spell!"); break; |