From 1f6a4f26c153e8d607afe939e1c2fadb648c1002 Mon Sep 17 00:00:00 2001 From: dshaligram Date: Tue, 26 Sep 2006 08:27:43 +0000 Subject: Fine-tuned Sif Muna piety numbers a little more. Moved Channel Energy from Vehumet to Sif Muna at 30 piety. Tweaked ammo destruction numbers. Needles are 1 in 6, stones 1 in 4, darts 1 in 3 and bolts 1 in 4. Changed salamander flame-brand check from check-for-bow to check-for-launcher. Vorpal launchers now work for monsters, launcher base damage is taken into account for monsters. Halved frequency of Okawaru ammo drops. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/branches/stone_soup@125 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/abl-show.cc | 25 ++++++++----------------- crawl-ref/source/beam.cc | 8 ++++---- crawl-ref/source/describe.cc | 10 +++++----- crawl-ref/source/dungeon.cc | 2 +- crawl-ref/source/enum.h | 5 +++-- crawl-ref/source/mstuff2.cc | 13 ++++++++++++- crawl-ref/source/notes.cc | 8 ++++---- crawl-ref/source/religion.cc | 19 +++++++++---------- 8 files changed, 46 insertions(+), 44 deletions(-) diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc index ae7c89fa59..56b0f7f11f 100644 --- a/crawl-ref/source/abl-show.cc +++ b/crawl-ref/source/abl-show.cc @@ -175,9 +175,6 @@ static const struct ability_def Ability_List[] = { ABIL_YRED_DRAIN_LIFE, "Drain Life", 6, 0, 200, 2, ABFLAG_NONE }, { ABIL_YRED_CONTROL_UNDEAD, "Control Undead", 5, 0, 150, 2, ABFLAG_NONE }, - // Vehumet - { ABIL_VEHUMET_CHANNEL_ENERGY, "Channel Energy", 0, 0, 50, 0, ABFLAG_NONE }, - // Okawaru { ABIL_OKAWARU_MIGHT, "Might", 2, 0, 50, 1, ABFLAG_NONE }, { ABIL_OKAWARU_HEALING, "Healing", 2, 0, 75, 1, ABFLAG_NONE }, @@ -190,6 +187,7 @@ static const struct ability_def Ability_List[] = { ABIL_MAKHLEB_GREATER_SERVANT_OF_MAKHLEB, "Greater Servant of Makhleb", 6, 0, 100, 3, ABFLAG_NONE }, // Sif Muna + { ABIL_SIF_MUNA_CHANNEL_ENERGY, "Channel Energy", 0, 0, 100, 0, ABFLAG_NONE }, { ABIL_SIF_MUNA_FORGET_SPELL, "Forget Spell", 5, 0, 0, 8, ABFLAG_NONE }, // Trog @@ -943,7 +941,7 @@ bool activate_ability(void) exercise(SK_INVOCATIONS, 3 + random2(4)); break; - case ABIL_VEHUMET_CHANNEL_ENERGY: + case ABIL_SIF_MUNA_CHANNEL_ENERGY: mpr("You channel some magical energy."); inc_mp(1 + random2(you.skills[SK_INVOCATIONS] / 4 + 2), false); @@ -1588,15 +1586,12 @@ bool generate_abilities( void ) break; case GOD_SIF_MUNA: + if (you.piety >= 30) + insert_ability( ABIL_SIF_MUNA_CHANNEL_ENERGY ); if (you.piety >= 50) insert_ability( ABIL_SIF_MUNA_FORGET_SPELL ); break; - case GOD_VEHUMET: - if (you.piety >= 100) - insert_ability( ABIL_VEHUMET_CHANNEL_ENERGY ); - break; - default: break; } @@ -1740,11 +1735,6 @@ void set_god_ability_slots( void ) num_abil = 5; break; - case GOD_VEHUMET: - abil_start = ABIL_VEHUMET_CHANNEL_ENERGY; - num_abil = 1; - break; - case GOD_OKAWARU: abil_start = ABIL_OKAWARU_MIGHT; num_abil = 3; @@ -1756,8 +1746,8 @@ void set_god_ability_slots( void ) break; case GOD_SIF_MUNA: - abil_start = ABIL_SIF_MUNA_FORGET_SPELL; - num_abil = 1; + abil_start = ABIL_SIF_MUNA_CHANNEL_ENERGY; + num_abil = 2; break; case GOD_TROG: @@ -1770,6 +1760,7 @@ void set_god_ability_slots( void ) num_abil = 5; break; + case GOD_VEHUMET: case GOD_NEMELEX_XOBEH: case GOD_XOM: default: @@ -2076,7 +2067,7 @@ static bool insert_ability( int which_ability ) failure = 40 - (you.piety / 20) - (5 * you.skills[SK_INVOCATIONS]); break; - case ABIL_VEHUMET_CHANNEL_ENERGY: + case ABIL_SIF_MUNA_CHANNEL_ENERGY: invoc = true; failure = 40 - you.intel - you.skills[SK_INVOCATIONS]; break; diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index db87bde832..029ee173d8 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -2515,11 +2515,11 @@ static void beam_drop_object( struct bolt &beam, item_def *item, int x, int y ) // The effect is nigh impossible to perceive. switch (item->sub_type) { - case MI_NEEDLE: chance = 7; break; - case MI_STONE: chance = 6; break; - case MI_DART: chance = 4; break; + case MI_NEEDLE: chance = 6; break; + case MI_STONE: chance = 4; break; + case MI_DART: chance = 3; break; case MI_ARROW: chance = 4; break; - case MI_BOLT: chance = 5; break; + case MI_BOLT: chance = 4; break; case MI_LARGE_ROCK: default: diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 81b8b97fc0..157fd8e490 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -6709,9 +6709,6 @@ void describe_god( int which_god, bool give_title ) if (you.piety >= 75) cprintf( "During prayer you have some protection from summoned creatures." EOL ); - - if (you.piety >= 100) - print_god_abil_desc( ABIL_VEHUMET_CHANNEL_ENERGY ); break; @@ -6751,11 +6748,14 @@ void describe_god( int which_god, bool give_title ) break; case GOD_SIF_MUNA: - if (you.piety >= 50) - print_god_abil_desc( ABIL_SIF_MUNA_FORGET_SPELL ); + if (you.piety >= 30) + print_god_abil_desc( ABIL_SIF_MUNA_CHANNEL_ENERGY ); else cprintf( "None." EOL ); + if (you.piety >= 50) + print_god_abil_desc( ABIL_SIF_MUNA_FORGET_SPELL ); + if (you.piety >= 100) cprintf( "You are protected from some side-effects of spellcasting." EOL ); break; diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index f30e09ecab..399c9b58ff 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -3124,7 +3124,7 @@ void give_item(int mid, int level_number) //mv: cleanup+minor changes (temp_rand == 1) ? WPN_BOW : WPN_HALBERD); - if (mitm[bp].sub_type == WPN_BOW) + if (is_range_weapon(mitm[bp])) set_item_ego_type( mitm[bp], OBJ_WEAPONS, SPWPN_FLAME ); else set_item_ego_type( mitm[bp], OBJ_WEAPONS, SPWPN_FLAMING ); diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 46cc1c8c74..b07df97f61 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -91,7 +91,7 @@ enum ability_type ABIL_YRED_ANIMATE_DEAD, ABIL_YRED_DRAIN_LIFE, ABIL_YRED_CONTROL_UNDEAD, // 144 - ABIL_VEHUMET_CHANNEL_ENERGY = 160, // 160 + // 160 - reserved for Vehumet ABIL_OKAWARU_MIGHT = 170, // 170 ABIL_OKAWARU_HEALING, ABIL_OKAWARU_HASTE, // 172 @@ -99,7 +99,8 @@ enum ability_type ABIL_MAKHLEB_LESSER_SERVANT_OF_MAKHLEB, ABIL_MAKHLEB_MAJOR_DESTRUCTION, ABIL_MAKHLEB_GREATER_SERVANT_OF_MAKHLEB, // 183 - ABIL_SIF_MUNA_FORGET_SPELL = 190, // 190 + ABIL_SIF_MUNA_CHANNEL_ENERGY = 190, // 190 + ABIL_SIF_MUNA_FORGET_SPELL, ABIL_TROG_BERSERK = 200, // 200 ABIL_TROG_MIGHT, ABIL_TROG_HASTE_SELF, // 202 diff --git a/crawl-ref/source/mstuff2.cc b/crawl-ref/source/mstuff2.cc index 7014752199..2b2fbf508c 100644 --- a/crawl-ref/source/mstuff2.cc +++ b/crawl-ref/source/mstuff2.cc @@ -901,9 +901,11 @@ bool mons_throw(struct monsters *monster, struct bolt &pbolt, int hand_used) int ammoHitBonus = 0, ammoDamBonus = 0; // from thrown or ammo int lnchHitBonus = 0, lnchDamBonus = 0; // special add from launcher int exHitBonus = 0, exDamBonus = 0; // 'extra' bonus from skill/dex/str + int lnchBaseDam = 0; int hitMult = 0; int damMult = 0; + int diceMult = 100; bool launched = false; // item is launched bool thrown = false; // item is sensible thrown item @@ -937,6 +939,7 @@ bool mons_throw(struct monsters *monster, struct bolt &pbolt, int hand_used) { lnchHitBonus = mitm[ weapon ].plus; lnchDamBonus = mitm[ weapon ].plus2; + lnchBaseDam = property(mitm[weapon], PWPN_DAMAGE); } // extract weapon/ammo bonuses due to magic @@ -1010,7 +1013,10 @@ bool mons_throw(struct monsters *monster, struct bolt &pbolt, int hand_used) break; } - baseDam = property( item, PWPN_DAMAGE ); + // Launcher is now more important than ammo for base damage. + baseDam = property(item, PWPN_DAMAGE); + if (lnchBaseDam) + baseDam = lnchBaseDam + random2(1 + baseDam); // missiles don't have pluses2; use hit bonus ammoDamBonus = ammoHitBonus; @@ -1043,6 +1049,9 @@ bool mons_throw(struct monsters *monster, struct bolt &pbolt, int hand_used) if (bow_brand == SPWPN_VENOM && ammo_brand == SPMSL_NORMAL) set_item_ego_type( item, OBJ_MISSILES, SPMSL_POISONED ); + // Vorpal brand increases damage dice size. + if (bow_brand == SPWPN_VORPAL) + diceMult = diceMult * 130 / 100; // WEAPON or AMMO of FIRE if ((bow_brand == SPWPN_FLAME || ammo_brand == SPMSL_FLAME) @@ -1140,6 +1149,8 @@ bool mons_throw(struct monsters *monster, struct bolt &pbolt, int hand_used) pbolt.damage.size += lnchDamBonus; pbolt.hit += lnchHitBonus; } + + pbolt.damage.size = diceMult * pbolt.damage.size / 100; scale_dice(pbolt.damage); // decrease inventory diff --git a/crawl-ref/source/notes.cc b/crawl-ref/source/notes.cc index 91900bcdb3..744661acf8 100644 --- a/crawl-ref/source/notes.cc +++ b/crawl-ref/source/notes.cc @@ -37,7 +37,7 @@ static int real_god_power( int religion, int idx ) { return -1; return idx-1; case GOD_VEHUMET: - return ( idx == 4 ? -1 : idx ); + return ( idx > 3 ? -1 : idx ); case GOD_OKAWARU: if ( idx < 2 ) return idx; @@ -45,9 +45,9 @@ static int real_god_power( int religion, int idx ) { return -1; return idx - 2; case GOD_SIF_MUNA: - if ( idx == 0 || idx == 2 || idx == 4 ) return -1; - if ( idx == 1 ) return 0; - if ( idx == 3 ) return 1; + if ( idx == 2 || idx == 4 ) return -1; + if ( idx < 2 ) return idx; + if ( idx == 3 ) return 2; case GOD_TROG: if ( idx == 2 || idx == 4 ) return -1; if ( idx < 2 ) return idx; diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc index 755b14a8ce..2aa663dacd 100644 --- a/crawl-ref/source/religion.cc +++ b/crawl-ref/source/religion.cc @@ -349,7 +349,7 @@ void pray(void) && you.piety > 80 && random2( you.piety ) > 70 && !grid_destroys_items( grd[you.x_pos][you.y_pos] ) - && one_chance_in(4) + && one_chance_in(8) && you.skills[ best_skill(SK_SLINGS, SK_RANGED_COMBAT) ] >= 7) { success = acquirement( OBJ_MISSILES, you.religion ); @@ -1272,7 +1272,7 @@ bool did_god_conduct( int thing_done, int level ) // magical kills tend to do both at the same time (unlike melee). // This means high level spells probably work pretty much like // they used to (use spell, get piety). - piety_change = div_rand_round( level + 10, 60 ); + piety_change = div_rand_round( level + 10, 80 ); #ifdef DEBUG_DIAGNOSTICS mprf(MSGCH_DIAGNOSTICS, "Spell practise, level: %d, dpiety: %d", level, piety_change); @@ -1404,14 +1404,14 @@ void gain_piety(char pgn) case GOD_NO_GOD: case GOD_XOM: case GOD_NEMELEX_XOBEH: - case GOD_SIF_MUNA: break; default: strcpy(info, "You can now "); strcat(info, (you.religion == GOD_ZIN || you.religion == GOD_SHINING_ONE) ? "repel the undead" : - + (you.religion == GOD_SIF_MUNA) + ? "tap ambient magical fields" : (you.religion == GOD_KIKUBAAQUDGHA) ? "recall your undead slaves" : (you.religion == GOD_YREDELEMNUL) @@ -1530,6 +1530,7 @@ void gain_piety(char pgn) case GOD_OKAWARU: case GOD_NEMELEX_XOBEH: case GOD_KIKUBAAQUDGHA: + case GOD_VEHUMET: break; case GOD_SIF_MUNA: simple_god_message @@ -1546,8 +1547,6 @@ void gain_piety(char pgn) ? "hurl bolts of divine anger" : (you.religion == GOD_YREDELEMNUL) ? "drain ambient lifeforce" : - (you.religion == GOD_VEHUMET) - ? "tap ambient magical fields" : (you.religion == GOD_MAKHLEB) ? "hurl Makhleb's greater destruction" : (you.religion == GOD_TROG) @@ -1664,6 +1663,7 @@ void lose_piety(char pgn) case GOD_OKAWARU: case GOD_NEMELEX_XOBEH: case GOD_KIKUBAAQUDGHA: + case GOD_VEHUMET: break; case GOD_SIF_MUNA: god_speaks(you.religion,"Sif Muna is no longer protecting you from miscast magic."); @@ -1679,8 +1679,6 @@ void lose_piety(char pgn) ? "hurl bolts of divine anger" : (you.religion == GOD_YREDELEMNUL) ? "drain ambient life force" : - (you.religion == GOD_VEHUMET) - ? "tap ambient magical fields" : (you.religion == GOD_MAKHLEB) ? "direct Makhleb's greater destructive powers" : (you.religion == GOD_TROG) @@ -1784,7 +1782,6 @@ void lose_piety(char pgn) case GOD_NO_GOD: case GOD_XOM: case GOD_NEMELEX_XOBEH: - case GOD_SIF_MUNA: break; default: strcpy(info, "You can no longer "); @@ -1796,6 +1793,8 @@ void lose_piety(char pgn) ? "recall your undead slaves" : (you.religion == GOD_YREDELEMNUL) ? "animate corpses" : + (you.religion == GOD_SIF_MUNA) + ? "tap ambient magical fields" : (you.religion == GOD_VEHUMET) ? "gain power from killing in Vehumet's name" : (you.religion == GOD_MAKHLEB) @@ -2747,7 +2746,7 @@ void handle_god_time(void) // [dshaligram] Sif Muna is now very patient - has to be // to make up for the new spell training requirements, else // it's practically impossible to get Master of Arcane status. - if (one_chance_in(60)) + if (one_chance_in(50)) lose_piety(1); if (you.piety < 1) excommunication(); -- cgit v1.2.3-54-g00ecf