summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/abl-show.cc
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 /crawl-ref/source/abl-show.cc
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
Diffstat (limited to 'crawl-ref/source/abl-show.cc')
-rw-r--r--crawl-ref/source/abl-show.cc46
1 files changed, 17 insertions, 29 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] ?