From 459e277ada7ab661190d4a3497a374d76e30c5a4 Mon Sep 17 00:00:00 2001 From: haranp Date: Sun, 8 Feb 2009 16:36:57 +0000 Subject: Redo potions of magic again. They are now effectively potions of heal wounds for MP; there is never any max-MP gain. Classes no longer influence max MP. Instead, you get an extra MP point for each level of Spellcasting between 1 and 5. (This might be too good.) Invocations does not get this boost. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8981 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/decks.cc | 8 ++++- crawl-ref/source/it_use2.cc | 15 ++------ crawl-ref/source/makeitem.cc | 2 +- crawl-ref/source/newgame.cc | 81 ++++++++++++++++++++++---------------------- crawl-ref/source/shopping.cc | 2 -- crawl-ref/source/skills2.cc | 23 +++++-------- 6 files changed, 59 insertions(+), 72 deletions(-) (limited to 'crawl-ref') diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc index fccf5447a9..ad2b4dfba0 100644 --- a/crawl-ref/source/decks.cc +++ b/crawl-ref/source/decks.cc @@ -2031,7 +2031,13 @@ static void _potion_card(int power, deck_rarity_type rarity) pot = (coinflip() ? POT_CURE_MUTATION : POT_MUTATION); if (power_level >= 2 && one_chance_in(5)) - pot = POT_MAGIC; + { + // +1 to a random stat. + const potion_type gain_stat_pots[] = { + POT_GAIN_STRENGTH, POT_GAIN_DEXTERITY, POT_GAIN_INTELLIGENCE + }; + pot = RANDOM_ELEMENT(gain_stat_pots); + } potion_effect(pot, random2(power/4)); } diff --git a/crawl-ref/source/it_use2.cc b/crawl-ref/source/it_use2.cc index f55396eba7..f3625fae6b 100644 --- a/crawl-ref/source/it_use2.cc +++ b/crawl-ref/source/it_use2.cc @@ -301,19 +301,8 @@ bool potion_effect(potion_type pot_eff, int pow, bool drank_it, bool was_known) break; // I'll let this slip past robe of archmagi case POT_MAGIC: - // Restore all MP - you.magic_points = you.max_magic_points; - - // Sometimes boost max - if (one_chance_in(3)) - { - mpr("You feel extremely magical!"); - inc_mp(1, true); - } - else - { - mpr("You feel magical!"); - } + inc_mp((10 + random2avg(28, 3)), false); + mpr("Magic courses through your body."); break; case POT_RESTORE_ABILITIES: diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc index 4843130936..a28f3df31d 100644 --- a/crawl-ref/source/makeitem.cc +++ b/crawl-ref/source/makeitem.cc @@ -2333,7 +2333,7 @@ static void _generate_potion_item(item_def& item, int force_type, 38, POT_GAIN_DEXTERITY, 38, POT_GAIN_INTELLIGENCE, 13, POT_EXPERIENCE, - 14, POT_MAGIC, + 140, POT_MAGIC, 900, POT_RESTORE_ABILITIES, 648, POT_POISON, 162, POT_STRONG_POISON, diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc index 61894e43cb..84e155df2d 100644 --- a/crawl-ref/source/newgame.cc +++ b/crawl-ref/source/newgame.cc @@ -2783,55 +2783,54 @@ static void _jobs_stat_init(job_type which_job) int i = 0; // intelligence mod int d = 0; // dexterity mod int hp = 0; // HP base - int mp = 0; // MP base // Note: Wanderers are correct, they're a challenging class. -- bwr switch (which_job) { - case JOB_FIGHTER: s = 7; i = 0; d = 3; hp = 15; mp = 0; break; - case JOB_BERSERKER: s = 7; i = -1; d = 4; hp = 15; mp = 0; break; - case JOB_GLADIATOR: s = 6; i = 0; d = 4; hp = 14; mp = 0; break; - case JOB_PALADIN: s = 6; i = 2; d = 2; hp = 14; mp = 0; break; - - case JOB_CRUSADER: s = 4; i = 3; d = 3; hp = 13; mp = 1; break; - case JOB_DEATH_KNIGHT: s = 4; i = 3; d = 3; hp = 13; mp = 1; break; - case JOB_CHAOS_KNIGHT: s = 4; i = 3; d = 3; hp = 13; mp = 1; break; - - case JOB_REAVER: s = 4; i = 4; d = 2; hp = 13; mp = 1; break; - case JOB_HEALER: s = 4; i = 4; d = 2; hp = 13; mp = 1; break; - case JOB_PRIEST: s = 4; i = 4; d = 2; hp = 12; mp = 1; break; - - case JOB_ASSASSIN: s = 2; i = 2; d = 6; hp = 12; mp = 0; break; - case JOB_THIEF: s = 3; i = 2; d = 5; hp = 13; mp = 0; break; - case JOB_STALKER: s = 2; i = 3; d = 5; hp = 12; mp = 1; break; - - case JOB_HUNTER: s = 3; i = 3; d = 4; hp = 13; mp = 0; break; - case JOB_WARPER: s = 3; i = 4; d = 3; hp = 12; mp = 1; break; - - case JOB_MONK: s = 2; i = 2; d = 6; hp = 13; mp = 0; break; - case JOB_TRANSMUTER: s = 2; i = 4; d = 4; hp = 12; mp = 1; break; - - case JOB_WIZARD: s = -1; i = 8; d = 3; hp = 8; mp = 5; break; - case JOB_CONJURER: s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - case JOB_ENCHANTER: s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - case JOB_FIRE_ELEMENTALIST: s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - case JOB_ICE_ELEMENTALIST: s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - case JOB_AIR_ELEMENTALIST: s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - case JOB_EARTH_ELEMENTALIST:s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - case JOB_SUMMONER: s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - case JOB_VENOM_MAGE: s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - case JOB_NECROMANCER: s = 0; i = 6; d = 4; hp = 10; mp = 3; break; - - case JOB_WANDERER: s = 2; i = 2; d = 2; hp = 11; mp = 1; break; - - case JOB_ARTIFICER: s = 2; i = 3; d = 4; hp = 13; mp = 0; break; - default: s = 0; i = 0; d = 0; hp = 10; mp = 0; break; + case JOB_FIGHTER: s = 7; i = 0; d = 3; hp = 15; break; + case JOB_BERSERKER: s = 7; i = -1; d = 4; hp = 15; break; + case JOB_GLADIATOR: s = 6; i = 0; d = 4; hp = 14; break; + case JOB_PALADIN: s = 6; i = 2; d = 2; hp = 14; break; + + case JOB_CRUSADER: s = 4; i = 3; d = 3; hp = 13; break; + case JOB_DEATH_KNIGHT: s = 4; i = 3; d = 3; hp = 13; break; + case JOB_CHAOS_KNIGHT: s = 4; i = 3; d = 3; hp = 13; break; + + case JOB_REAVER: s = 4; i = 4; d = 2; hp = 13; break; + case JOB_HEALER: s = 4; i = 4; d = 2; hp = 13; break; + case JOB_PRIEST: s = 4; i = 4; d = 2; hp = 12; break; + + case JOB_ASSASSIN: s = 2; i = 2; d = 6; hp = 12; break; + case JOB_THIEF: s = 3; i = 2; d = 5; hp = 13; break; + case JOB_STALKER: s = 2; i = 3; d = 5; hp = 12; break; + + case JOB_HUNTER: s = 3; i = 3; d = 4; hp = 13; break; + case JOB_WARPER: s = 3; i = 4; d = 3; hp = 12; break; + + case JOB_MONK: s = 2; i = 2; d = 6; hp = 13; break; + case JOB_TRANSMUTER: s = 2; i = 4; d = 4; hp = 12; break; + + case JOB_WIZARD: s = -1; i = 8; d = 3; hp = 8; break; + case JOB_CONJURER: s = 0; i = 6; d = 4; hp = 10; break; + case JOB_ENCHANTER: s = 0; i = 6; d = 4; hp = 10; break; + case JOB_FIRE_ELEMENTALIST: s = 0; i = 6; d = 4; hp = 10; break; + case JOB_ICE_ELEMENTALIST: s = 0; i = 6; d = 4; hp = 10; break; + case JOB_AIR_ELEMENTALIST: s = 0; i = 6; d = 4; hp = 10; break; + case JOB_EARTH_ELEMENTALIST:s = 0; i = 6; d = 4; hp = 10; break; + case JOB_SUMMONER: s = 0; i = 6; d = 4; hp = 10; break; + case JOB_VENOM_MAGE: s = 0; i = 6; d = 4; hp = 10; break; + case JOB_NECROMANCER: s = 0; i = 6; d = 4; hp = 10; break; + + case JOB_WANDERER: s = 2; i = 2; d = 2; hp = 11; break; + + case JOB_ARTIFICER: s = 2; i = 3; d = 4; hp = 13; break; + default: s = 0; i = 0; d = 0; hp = 10; break; } modify_all_stats( s, i, d ); - set_hp( hp, true ); - set_mp( mp, true ); + set_hp(hp, true); + set_mp(0, true); } void give_basic_mutations(species_type speci) diff --git a/crawl-ref/source/shopping.cc b/crawl-ref/source/shopping.cc index 9ca277ad22..24cd1631bd 100644 --- a/crawl-ref/source/shopping.cc +++ b/crawl-ref/source/shopping.cc @@ -1338,8 +1338,6 @@ unsigned int item_value( item_def item, bool ident ) valued += 150; break; case POT_MAGIC: - valued += 120; - break; case POT_RESISTANCE: valued += 70; break; diff --git a/crawl-ref/source/skills2.cc b/crawl-ref/source/skills2.cc index e33b7643e5..300b190b84 100644 --- a/crawl-ref/source/skills2.cc +++ b/crawl-ref/source/skills2.cc @@ -2152,28 +2152,23 @@ void init_skill_order( void ) int calc_hp(bool real_hp) { int hitp = get_real_hp(!real_hp, false); - you.hp_max = hitp; - - deflate_hp( you.hp_max, false ); - + deflate_hp(you.hp_max, false); return (hitp); -} // end calc_hp() +} int calc_mp(bool real_mp) { - int enp; + // base_magic_points2 accounts for species + int enp = (you.base_magic_points2 - 5000); - // base_magic_points2 accounts for species and magic potions - enp = (you.base_magic_points2 - 5000); + // You get 1 bonus MP for each of the first five levels of Spellcasting. + int spell_extra = (you.experience_level * you.skills[SK_SPELLCASTING]) / 4 + + std::min(you.skills[SK_SPELLCASTING], 5); - int spell_extra = (you.experience_level * you.skills[SK_SPELLCASTING]) / 4; int invoc_extra = (you.experience_level * you.skills[SK_INVOCATIONS]) / 6; - if (spell_extra > invoc_extra) - enp += spell_extra; - else - enp += invoc_extra; + enp += std::max(spell_extra, invoc_extra); you.max_magic_points = stepdown_value( enp, 9, 18, 45, 100 ); @@ -2207,7 +2202,7 @@ int calc_mp(bool real_mp) you.redraw_magic_points = true; return (you.max_magic_points); -} // end calc_mp() +} unsigned int skill_exp_needed(int lev) { -- cgit v1.2.3-54-g00ecf