summaryrefslogtreecommitdiffstats
path: root/crawl-ref
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
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')
-rw-r--r--crawl-ref/source/decks.cc36
-rw-r--r--crawl-ref/source/player.cc26
2 files changed, 36 insertions, 26 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;
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 05ad9c7f98..53fdbf656f 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -3999,30 +3999,6 @@ unsigned long exp_needed(int lev)
unsigned long level = 0;
-#if 0
- case 1: level = 1;
- case 2: level = 10;
- case 3: level = 35;
- case 4: level = 70;
- case 5: level = 120;
- case 6: level = 250;
- case 7: level = 510;
- case 8: level = 900;
- case 9: level = 1700;
- case 10: level = 3500;
- case 11: level = 8000;
- case 12: level = 20000;
-
- default: //return 14000 * (lev - 11);
- level = 20000 * (lev - 11) + ((lev - 11) * (lev - 11) * (lev - 11)) * 130;
- break;
-#endif
-
- // This is a better behaved function than the above. The above looks
- // really ugly when you consider the second derivative, its not smooth
- // and has a horrible bump at level 12 followed by comparitively easy
- // teen levels. This tries to sort out those issues.
- //
// Basic plan:
// Section 1: levels 1- 5, second derivative goes 10-10-20-30.
// Section 2: levels 6-13, second derivative is exponential/doubling.
@@ -4088,7 +4064,7 @@ unsigned long exp_needed(int lev)
if (lev < 13)
{
lev -= 4;
- level = 10 + 10 * lev + 30 * (2 << lev);
+ level = 10 + 10 * lev + (60 << lev);
}
else
{