summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/decks.cc
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-11-30 11:04:07 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2007-11-30 11:04:07 +0000
commitbdcd305d09236d064dfd0dd695dd4f4a0f205030 (patch)
tree86ff506b5b47f1e6560f6686d130c06338c50554 /crawl-ref/source/decks.cc
parentf6a1d5082c4ae9853ded65581030b86f5c7991fb (diff)
downloadcrawl-ref-bdcd305d09236d064dfd0dd695dd4f4a0f205030.tar.gz
crawl-ref-bdcd305d09236d064dfd0dd695dd4f4a0f205030.zip
Added Sage card, which boosts skill training.
[Side note: rm saves/ * is a bad idea.] git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2945 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/decks.cc')
-rw-r--r--crawl-ref/source/decks.cc44
1 files changed, 44 insertions, 0 deletions
diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc
index 89fa8a9e9e..30b5fb703d 100644
--- a/crawl-ref/source/decks.cc
+++ b/crawl-ref/source/decks.cc
@@ -36,6 +36,7 @@
#include "output.h"
#include "player.h"
#include "religion.h"
+#include "skills2.h"
#include "spells1.h"
#include "spells2.h"
#include "spells3.h"
@@ -133,6 +134,7 @@ const deck_archetype deck_of_wonders[] = {
{ CARD_EXPERIENCE, {5, 5, 5} },
{ CARD_WILD_MAGIC, {5, 5, 5} },
{ CARD_HELIX, {5, 5, 5} },
+ { CARD_SAGE, {5, 5, 5} },
END_OF_DECK
};
@@ -264,6 +266,7 @@ const char* card_name(card_type card)
case CARD_SHUFFLE: return "Shuffle";
case CARD_EXPERIENCE: return "Experience";
case CARD_HELIX: return "the Helix";
+ case CARD_SAGE: return "the Sage";
case CARD_DOWSING: return "Dowsing";
case CARD_TROWEL: return "the Trowel";
case CARD_MINEFIELD: return "the Minefield";
@@ -1945,6 +1948,46 @@ static void helix_card(int power, deck_rarity_type rarity)
mpr("You feel transcendent for a moment.");
}
+static void sage_card(int power, deck_rarity_type rarity)
+{
+ const int power_level = get_power_level(power, rarity);
+ int c; // how much to weight your skills
+ if ( power_level == 0 )
+ c = 0;
+ else if ( power_level == 1 )
+ c = random2(10) + 1;
+ else
+ c = 10;
+
+ // FIXME: yet another reproduction of random_choose_weighted
+ // Ah for Python:
+ // skill = random_choice([x*(40-x)*c/10 for x in skill_levels])
+ int totalweight = 0;
+ int result = -1;
+ for (int i = 0; i < NUM_SKILLS; ++i )
+ {
+ if ( you.skills[i] < MAX_SKILL_LEVEL )
+ {
+ const int curweight = 1 + you.skills[i] * (40-you.skills[i]) * c;
+ totalweight += curweight;
+ if ( random2(totalweight) < curweight )
+ result = i;
+ }
+ }
+
+ if ( result == -1 )
+ {
+ mpr("You feel omnipotent."); // all skills maxed
+ }
+ else
+ {
+ you.duration[DUR_SAGE] = random2(1800) + 200;
+ you.sage_bonus_skill = static_cast<skill_type>(result);
+ you.sage_bonus_degree = power / 25;
+ mprf(MSGCH_PLAIN, "You feel studious about %s.", skill_name(result));
+ }
+}
+
static void glass_card(int power, deck_rarity_type rarity)
{
const int power_level = get_power_level(power, rarity);
@@ -2339,6 +2382,7 @@ bool card_effect(card_type which_card, deck_rarity_type rarity,
case CARD_SHUFFLE: shuffle_card(power, rarity); break;
case CARD_EXPERIENCE: potion_effect(POT_EXPERIENCE, power/4); 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;
case CARD_DOWSING: dowsing_card(power, rarity); break;
case CARD_MINEFIELD: minefield_card(power, rarity); break;