From 57ae10de70746396e8218821fcd8a93b7a4451dc Mon Sep 17 00:00:00 2001 From: haranp Date: Sat, 1 Dec 2007 23:47:56 +0000 Subject: 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 --- crawl-ref/source/decks.cc | 36 +++++++++++++++++++++++++++++++++++- crawl-ref/source/player.cc | 26 +------------------------- 2 files changed, 36 insertions(+), 26 deletions(-) (limited to 'crawl-ref/source') 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 { -- cgit v1.2.3-54-g00ecf