summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/decks.cc
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-12-01 23:47:56 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-12-01 23:47:56 +0000
commit57ae10de70746396e8218821fcd8a93b7a4451dc (patch)
treed584c06f60ebd22b4fc6857937c26710bacfbe9c /crawl-ref/source/decks.cc
parent5480f286fa2ed4a7b90cf65e5a3bc203b27c7d0e (diff)
downloadcrawl-ref-57ae10de70746396e8218821fcd8a93b7a4451dc.tar.gz
crawl-ref-57ae10de70746396e8218821fcd8a93b7a4451dc.zip
Experience card now doesn't guarantee a level but does add XP to pool.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2963 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/decks.cc')
-rw-r--r--crawl-ref/source/decks.cc36
1 files changed, 35 insertions, 1 deletions
diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc
index 3f83a89dab..a1a686de2a 100644
--- a/crawl-ref/source/decks.cc
+++ b/crawl-ref/source/decks.cc
@@ -1926,6 +1926,40 @@ static void shuffle_card(int power, deck_rarity_type rarity)
burden_change();
}
+static void experience_card(int power, deck_rarity_type rarity)
+{
+ const int power_level = get_power_level(power, rarity);
+
+ if ( you.experience_level < 27 )
+ {
+ mpr("You feel more experienced.");
+ const unsigned long xp_cap = 1 + exp_needed(2 + you.experience_level);
+
+ // power_level 2 means automatic level gain
+ if ( power_level == 2 )
+ you.experience = xp_cap;
+ else
+ {
+ // Likely to give a level gain (power of ~500 is reasonable
+ // at high levels even for non-Nemelexites, so 50,000 XP.)
+ // But not guaranteed.
+ // Overrides archmagi effect, like potions of experience.
+ you.experience += power * 100;
+ if ( you.experience > xp_cap )
+ you.experience = xp_cap;
+ }
+ }
+ else
+ mpr("You feel knowledgeable.");
+
+ // Put some free XP into pool; power_level 2 means fill pool
+ you.exp_available += power * 50;
+ if ( power_level >= 2 || you.exp_available > 20000)
+ you.exp_available = 20000;
+
+ level_change();
+}
+
static void helix_card(int power, deck_rarity_type rarity)
{
mutation_type bad_mutations[] = {
@@ -2419,7 +2453,7 @@ bool card_effect(card_type which_card, deck_rarity_type rarity,
case CARD_POTION: potion_card(power, rarity); break;
case CARD_FOCUS: focus_card(power, rarity); break;
case CARD_SHUFFLE: shuffle_card(power, rarity); break;
- case CARD_EXPERIENCE: potion_effect(POT_EXPERIENCE, power/4); break;
+ case CARD_EXPERIENCE: experience_card(power, rarity); break;
case CARD_HELIX: helix_card(power, rarity); break;
case CARD_SAGE: sage_card(power, rarity); break;
case CARD_GLASS: glass_card(power, rarity); break;