summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/abl-show.cc
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2006-12-10 20:28:21 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2006-12-10 20:28:21 +0000
commit2b7d6cadecf9c3d272cc1097824ffc7d7e770aab (patch)
tree9456a1e06e5f5399ae8eab1140f01d0cbd46204e /crawl-ref/source/abl-show.cc
parent1a21d2008a3f9bce922aa7d759b3e1df875ab37a (diff)
downloadcrawl-ref-2b7d6cadecf9c3d272cc1097824ffc7d7e770aab.tar.gz
crawl-ref-2b7d6cadecf9c3d272cc1097824ffc7d7e770aab.zip
Streamlined god-given abilities.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@609 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/abl-show.cc')
-rw-r--r--crawl-ref/source/abl-show.cc157
1 files changed, 57 insertions, 100 deletions
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc
index 5f57f30b5c..b505e47e7a 100644
--- a/crawl-ref/source/abl-show.cc
+++ b/crawl-ref/source/abl-show.cc
@@ -80,6 +80,56 @@ static FixedVector< talent, 52 > Curr_abil;
static bool insert_ability( int which_ability );
+// declaring this const messes up externs later, so don't do it
+ability_type god_abilities[MAX_NUM_GODS][MAX_GOD_ABILITIES] =
+{
+ // no god
+ { ABIL_NON_ABILITY, ABIL_NON_ABILITY, ABIL_NON_ABILITY,
+ ABIL_NON_ABILITY, ABIL_NON_ABILITY },
+ // Zin
+ { ABIL_ZIN_REPEL_UNDEAD, ABIL_ZIN_HEALING, ABIL_ZIN_PESTILENCE,
+ ABIL_ZIN_HOLY_WORD, ABIL_ZIN_SUMMON_GUARDIAN },
+ // TSO
+ { ABIL_TSO_REPEL_UNDEAD, ABIL_TSO_SMITING, ABIL_TSO_ANNIHILATE_UNDEAD,
+ ABIL_TSO_CLEANSING_FLAME, ABIL_TSO_SUMMON_DAEVA },
+ // Kikubaaqudgha
+ { ABIL_KIKU_RECALL_UNDEAD_SLAVES, ABIL_NON_ABILITY,
+ ABIL_KIKU_ENSLAVE_UNDEAD, ABIL_NON_ABILITY,
+ ABIL_KIKU_INVOKE_DEATH },
+ // Yredelemnul
+ { ABIL_YRED_ANIMATE_CORPSE, ABIL_YRED_RECALL_UNDEAD,
+ ABIL_YRED_ANIMATE_DEAD, ABIL_YRED_DRAIN_LIFE,
+ ABIL_YRED_CONTROL_UNDEAD },
+ // Xom
+ { ABIL_NON_ABILITY, ABIL_NON_ABILITY, ABIL_NON_ABILITY,
+ ABIL_NON_ABILITY, ABIL_NON_ABILITY },
+ // Vehumet
+ { ABIL_NON_ABILITY, ABIL_NON_ABILITY, ABIL_NON_ABILITY,
+ ABIL_NON_ABILITY, ABIL_NON_ABILITY },
+ // Okawaru
+ { ABIL_OKAWARU_MIGHT, ABIL_OKAWARU_HEALING, ABIL_NON_ABILITY,
+ ABIL_NON_ABILITY, ABIL_OKAWARU_HASTE },
+ // Makhleb
+ { ABIL_NON_ABILITY, ABIL_MAKHLEB_MINOR_DESTRUCTION,
+ ABIL_MAKHLEB_LESSER_SERVANT_OF_MAKHLEB,
+ ABIL_MAKHLEB_MAJOR_DESTRUCTION,
+ ABIL_MAKHLEB_GREATER_SERVANT_OF_MAKHLEB },
+ // Sif Muna
+ { ABIL_SIF_MUNA_CHANNEL_ENERGY,
+ ABIL_SIF_MUNA_FORGET_SPELL, ABIL_NON_ABILITY,
+ ABIL_NON_ABILITY, ABIL_NON_ABILITY },
+ // Trog
+ { ABIL_TROG_BERSERK, ABIL_TROG_MIGHT, ABIL_NON_ABILITY,
+ ABIL_TROG_HASTE_SELF, ABIL_NON_ABILITY },
+ // Nemelex
+ { ABIL_NON_ABILITY, ABIL_NON_ABILITY, ABIL_NON_ABILITY,
+ ABIL_NON_ABILITY, ABIL_NON_ABILITY },
+ // Elyvilon
+ { ABIL_ELYVILON_LESSER_HEALING, ABIL_ELYVILON_PURIFICATION,
+ ABIL_ELYVILON_HEALING, ABIL_ELYVILON_RESTORATION,
+ ABIL_ELYVILON_GREATER_HEALING }
+};
+
// The description screen was way out of date with the actual costs.
// This table puts all the information in one place... -- bwr
//
@@ -1508,107 +1558,14 @@ bool generate_abilities( void )
// gods take abilities away until penance completed -- bwr
if (!player_under_penance() && !silenced( you.x_pos, you.y_pos ))
{
- switch (you.religion)
+ for ( int i = 0; i < MAX_GOD_ABILITIES; ++i )
{
- case GOD_ZIN:
- if (you.piety >= 30)
- insert_ability( ABIL_ZIN_REPEL_UNDEAD );
- if (you.piety >= 50)
- insert_ability( ABIL_ZIN_HEALING );
- if (you.piety >= 75)
- insert_ability( ABIL_ZIN_PESTILENCE );
- if (you.piety >= 100)
- insert_ability( ABIL_ZIN_HOLY_WORD );
- if (you.piety >= 120)
- insert_ability( ABIL_ZIN_SUMMON_GUARDIAN );
- break;
-
- case GOD_SHINING_ONE:
- if (you.piety >= 30)
- insert_ability( ABIL_TSO_REPEL_UNDEAD );
- if (you.piety >= 50)
- insert_ability( ABIL_TSO_SMITING );
- if (you.piety >= 75)
- insert_ability( ABIL_TSO_ANNIHILATE_UNDEAD );
- if (you.piety >= 100)
- insert_ability( ABIL_TSO_CLEANSING_FLAME );
- if (you.piety >= 120)
- insert_ability( ABIL_TSO_SUMMON_DAEVA );
- break;
-
- case GOD_YREDELEMNUL:
- if (you.piety >= 30)
- insert_ability( ABIL_YRED_ANIMATE_CORPSE );
- if (you.piety >= 50)
- insert_ability( ABIL_YRED_RECALL_UNDEAD );
- if (you.piety >= 75)
- insert_ability( ABIL_YRED_ANIMATE_DEAD );
- if (you.piety >= 100)
- insert_ability( ABIL_YRED_DRAIN_LIFE );
- if (you.piety >= 120)
- insert_ability( ABIL_YRED_CONTROL_UNDEAD );
- break;
-
- case GOD_ELYVILON:
- if (you.piety >= 30)
- insert_ability( ABIL_ELYVILON_LESSER_HEALING );
- if (you.piety >= 50)
- insert_ability( ABIL_ELYVILON_PURIFICATION );
- if (you.piety >= 75)
- insert_ability( ABIL_ELYVILON_HEALING );
- if (you.piety >= 100)
- insert_ability( ABIL_ELYVILON_RESTORATION );
- if (you.piety >= 120)
- insert_ability( ABIL_ELYVILON_GREATER_HEALING );
- break;
-
- case GOD_MAKHLEB:
- if (you.piety >= 50)
- insert_ability( ABIL_MAKHLEB_MINOR_DESTRUCTION );
- if (you.piety >= 75)
- insert_ability( ABIL_MAKHLEB_LESSER_SERVANT_OF_MAKHLEB );
- if (you.piety >= 100)
- insert_ability( ABIL_MAKHLEB_MAJOR_DESTRUCTION );
- if (you.piety >= 120)
- insert_ability( ABIL_MAKHLEB_GREATER_SERVANT_OF_MAKHLEB );
- break;
-
- case GOD_KIKUBAAQUDGHA:
- if (you.piety >= 30)
- insert_ability( ABIL_KIKU_RECALL_UNDEAD_SLAVES );
- if (you.piety >= 75)
- insert_ability( ABIL_KIKU_ENSLAVE_UNDEAD );
- if (you.piety >= 120)
- insert_ability( ABIL_KIKU_INVOKE_DEATH );
- break;
-
- case GOD_OKAWARU:
- if (you.piety >= 30)
- insert_ability( ABIL_OKAWARU_MIGHT );
- if (you.piety >= 50)
- insert_ability( ABIL_OKAWARU_HEALING );
- if (you.piety >= 120)
- insert_ability( ABIL_OKAWARU_HASTE );
- break;
-
- case GOD_TROG:
- if (you.piety >= 30)
- insert_ability( ABIL_TROG_BERSERK );
- if (you.piety >= 50)
- insert_ability( ABIL_TROG_MIGHT );
- if (you.piety >= 100)
- insert_ability( ABIL_TROG_HASTE_SELF );
- break;
-
- case GOD_SIF_MUNA:
- if (you.piety >= 30)
- insert_ability( ABIL_SIF_MUNA_CHANNEL_ENERGY );
- if (you.piety >= 50)
- insert_ability( ABIL_SIF_MUNA_FORGET_SPELL );
- break;
-
- default:
- break;
+ if ( you.piety >= piety_breakpoint(i) )
+ {
+ ability_type abil = god_abilities[(int)you.religion][i];
+ if ( abil != ABIL_NON_ABILITY )
+ insert_ability(abil);
+ }
}
}