diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-03-29 10:52:16 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-03-29 10:52:16 +0000 |
commit | 775b9001bdbf57534c231191f194ab76b0c5e81c (patch) | |
tree | db6f435eadc0d6d853108243a44cdc4853560431 | |
parent | 253496da889864afbddbaea897571342f6b38d21 (diff) | |
download | crawl-ref-775b9001bdbf57534c231191f194ab76b0c5e81c.tar.gz crawl-ref-775b9001bdbf57534c231191f194ab76b0c5e81c.zip |
Updated changes list.
Give Lugonu's retribution more of the Abyss/distortion theme.
Added extra check for Sif Muna gifts.
Reduced spatial vortex base damage, but give them a distortion attack.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1118 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r-- | crawl-ref/docs/changes.stone_soup | 26 | ||||
-rw-r--r-- | crawl-ref/source/enum.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/fight.cc | 138 | ||||
-rw-r--r-- | crawl-ref/source/fight.h | 3 | ||||
-rw-r--r-- | crawl-ref/source/hiscores.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/mon-data.h | 2 | ||||
-rw-r--r-- | crawl-ref/source/religion.cc | 99 |
7 files changed, 164 insertions, 109 deletions
diff --git a/crawl-ref/docs/changes.stone_soup b/crawl-ref/docs/changes.stone_soup index 5fc9fad78c..efc71148f8 100644 --- a/crawl-ref/docs/changes.stone_soup +++ b/crawl-ref/docs/changes.stone_soup @@ -2,19 +2,23 @@ Stone Soup 0.2 -------------- * Save and bones files formats changed, incompatible with 0.1.x. * Added a game tutorial. -* New entry levels. -* New special levels (Elf:7, Coc:7). +* More vaults and special level layouts. * New evasion model (from 4.1.2). +* Revamped dungeon overview and character information screens. * Targeting interface keymaps changed. +* 'v' examines monsters, items, etc., '?' gives help. * -macro option now specifies a directory, not the macro file. * Item colours changed. * Deeper dungeon levels can have multiple player ghosts. -* Rods of striking now also get magic reservoirs. +* Rods of striking also get magic reservoirs. * Removed unpoisoned needles and blowguns of venom. * Stash search also finds altars and portals. -* Some mutations cleanup. +* Mutation and species abilities cleanup. +* Sif Muna gives gifts on piety gain; Sif Munites do not need to pray. +* Low-HD monsters are less likely to give piety when killed. * Fixed Pandemonium demons getting only magic dart. -* Character names can now includes spaces, dashes and periods. +* Character names can now include spaces, dashes and periods. On Unix, + character names can also end with a digit. * Adjusted beam to-hit calculation. * Weapons animated by Tukima's Dance are now considered thrown for autopickup purposes. @@ -30,7 +34,7 @@ Stone Soup 0.2 * The Hat of the Alchemist is now a real wizard hat, not a helmet. * Fixed identify not clearing empty inscription. * Fixed broken fear behaviour for monsters. -* Shop purchase now asks for confirmation. +* Shop purchase asks for confirmation. * Minor tweaks to some unrand artifacts. * Gourmand contaminated -> clean effect is also gradual now. * Searching is more effective. @@ -52,7 +56,7 @@ Stone Soup 0.2 * Travel is no longer interrupted by submerged monsters. * Travel is no longer interrupted by an invisible monster missing you. * Blinking/teleporting monsters can no longer land on the player's square. -* Fix Abyss banishment crash. +* Fixed Abyss banishment crash. * Monster resists were not taking randarts into account in some cases. * Better handling for travel_delay = -1. * Monsters using draining or hellfire are M_EVIL and take damage from cleansing @@ -70,9 +74,13 @@ Stone Soup 0.2 * Friendly monsters should not flee from the player. * Fixed detect creatures revealing monster identities in notes. * Fixed level-map crashes on large terms. -* no_dark_brand defaults to true. +* no_dark_brand defaults to true, since the option is otherwise too obscure to + find (and the problem it addresses is widespread on Unix terms). +* Added a synthetic cursor (use_fake_cursor = yes) for terms that cannot draw + cursors on black/darkgrey spaces. * Summon horrible things now produces temporary summons. * Monster abjuration is weaker. +* Deflect missiles is less effective. * Unseen horrors no longer resist electricity. * Greedy explore now tries to handle mimics like the items they imitate. * Dungeon builder guarantees that at least one downstair is reachable @@ -83,6 +91,8 @@ Stone Soup 0.2 * Added wizmode &~ to instant travel to any level to test special levels. * Messages can be coloured individually using pattern matches with the message_colour option. +* Monsters dying to friendlies' poison, or damaging clouds are now + correctly attributed as collateral kills. Stone Soup 0.1.7 (20061231) --------------------------- diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index cfc2fbadad..624732ff40 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2288,7 +2288,8 @@ enum mon_attack_flavour AF_POISON_STR, AF_ROT, AF_VAMPIRIC, - AF_KLOWN + AF_KLOWN, + AF_DISTORT }; enum mon_attitude_type diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index c2664ce6ba..ca1d3df729 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -1493,6 +1493,76 @@ void melee_attack::drain_monster() attacker->god_conduct(DID_NECROMANCY, 2); } +bool melee_attack::distortion_affects_defender() +{ + //jmf: blink frogs *like* distortion + // I think could be amended to let blink frogs "grow" like + // jellies do {dlb} + if (defender->id() == MONS_BLINK_FROG) + { + if (one_chance_in(5)) + { + emit_nodmg_hit_message(); + special_damage_message = + make_stringf("%s %s in the translocular energy.", + defender->name(DESC_CAP_THE).c_str(), + defender->conj_verb("bask").c_str()); + + defender->heal(1 + random2avg(7, 2), true); // heh heh + } + return (false); + } + + if (one_chance_in(3)) + { + special_damage_message = + make_stringf( + "Space bends around %s.", + defender->name(DESC_NOCAP_THE).c_str()); + special_damage += 1 + random2avg(7, 2); + return (false); + } + + if (one_chance_in(3)) + { + special_damage_message = + make_stringf( + "Space warps horribly around %s!", + defender->name(DESC_NOCAP_THE).c_str()); + + special_damage += 3 + random2avg(24, 2); + return (false); + } + + if (one_chance_in(3)) + { + emit_nodmg_hit_message(); + defender->blink(); + return (false); + } + + // Used to be coinflip() || coinflip() for players, just coinflip() + // for monsters; this is a compromise. Note that it makes banishment + // a touch more likely for players, and a shade less likely for + // monsters. + if (!one_chance_in(3)) + { + emit_nodmg_hit_message(); + defender->teleport(coinflip(), one_chance_in(5)); + return (false); + } + + if (you.level_type != LEVEL_ABYSS && coinflip()) + { + emit_nodmg_hit_message(); + defender->banish( atk? atk->name(DESC_PLAIN, true) + : attacker->name(DESC_PLAIN) ); + return (true); + } + + return (false); +} + bool melee_attack::apply_damage_brand() { // Monster resistance to the brand. @@ -1665,70 +1735,8 @@ bool melee_attack::apply_damage_brand() break; case SPWPN_DISTORTION: - //jmf: blink frogs *like* distortion - // I think could be amended to let blink frogs "grow" like - // jellies do {dlb} - if (defender->id() == MONS_BLINK_FROG) - { - if (one_chance_in(5)) - { - emit_nodmg_hit_message(); - special_damage_message = - make_stringf("%s %s in the translocular energy.", - defender->name(DESC_CAP_THE).c_str(), - defender->conj_verb("bask").c_str()); - - defender->heal(1 + random2avg(7, 2), true); // heh heh - } - break; - } - - if (one_chance_in(3)) - { - special_damage_message = - make_stringf( - "Space bends around %s.", - defender->name(DESC_NOCAP_THE).c_str()); - special_damage += 1 + random2avg(7, 2); - break; - } - - if (one_chance_in(3)) - { - special_damage_message = - make_stringf( - "Space warps horribly around %s!", - defender->name(DESC_NOCAP_THE).c_str()); - - special_damage += 3 + random2avg(24, 2); - break; - } - - if (one_chance_in(3)) - { - emit_nodmg_hit_message(); - defender->blink(); - break; - } - - // Used to be coinflip() || coinflip() for players, just coinflip() - // for monsters; this is a compromise. Note that it makes banishment - // a touch more likely for players, and a shade less likely for - // monsters. - if (!one_chance_in(3)) - { - emit_nodmg_hit_message(); - defender->teleport(coinflip(), one_chance_in(5)); - break; - } - - if (you.level_type != LEVEL_ABYSS && coinflip()) - { - emit_nodmg_hit_message(); - defender->banish( atk? atk->name(DESC_PLAIN, true) - : attacker->name(DESC_PLAIN) ); + if (distortion_affects_defender()) return (true); - } break; case SPWPN_CONFUSE: @@ -2865,6 +2873,10 @@ void melee_attack::mons_apply_attack_flavour(const mon_attack_def &attk) defender->poison( attacker, 2 + random2(4) ); splash_defender_with_acid(3); break; + + case AF_DISTORT: + distortion_affects_defender(); + break; } } diff --git a/crawl-ref/source/fight.h b/crawl-ref/source/fight.h index ed22a29180..48eb893dc1 100644 --- a/crawl-ref/source/fight.h +++ b/crawl-ref/source/fight.h @@ -150,6 +150,9 @@ private: void splash_defender_with_acid(int strength); void splash_monster_with_acid(int strength); + // Returns true if the defender is banished. + bool distortion_affects_defender(); + private: // Monster-attack specific stuff bool mons_attack_you(); diff --git a/crawl-ref/source/hiscores.cc b/crawl-ref/source/hiscores.cc index bd90c4204c..0efa5f171d 100644 --- a/crawl-ref/source/hiscores.cc +++ b/crawl-ref/source/hiscores.cc @@ -513,7 +513,7 @@ static const char *kill_method_names[] = "mon", "pois", "cloud", "beam", "deaths_door", "lava", "water", "stupidity", "weakness", "clumsiness", "trap", "leaving", "winning", "quitting", "draining", "starvation", "freezing", "burning", "wild_magic", - "xom", "statue", "rotting", "targetting", "spore", "tso_smiting", + "xom", "statue", "rotting", "targeting", "spore", "tso_smiting", "petrification", "unknown", "something", "falling_down_stairs", "acid", "curare", "melting", "bleeding", }; diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index 25643ffb05..31214f6f44 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -2565,7 +2565,7 @@ M_LEVITATE | M_CONFUSED, MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC, 0, 5, MONS_FIRE_VORTEX, MONS_SPATIAL_VORTEX, MH_NONLIVING, MAG_IMMUNE, - { {AT_HIT, AF_PLAIN, 50}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, + { {AT_HIT, AF_DISTORT, 30}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, { 6, 6, 6, 0 }, 0, 5, 15, 7, MST_NO_SPELLS, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT, I_PLANT, MONUSE_NOTHING, SIZE_LARGE diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc index 97eb0b3d41..0556b26ad1 100644 --- a/crawl-ref/source/religion.cc +++ b/crawl-ref/source/religion.cc @@ -1670,7 +1670,10 @@ void gain_piety(char pgn) // naturally slower as the player gains in spell skills. if ((you.piety > 199) || (you.piety > 150 && one_chance_in(5))) + { + do_god_gift(); return; + } } int old_piety = you.piety; @@ -1749,6 +1752,63 @@ void lose_piety(char pgn) } } +static void lugonu_retribution(int god) +{ + if (coinflip()) + { + simple_god_message("'s wrath finds you!", god); + miscast_effect( SPTYP_TRANSLOCATION, 9, 90, 100, "Lugonu's touch" ); + + // No return - Lugonu's touch is independent of other effects. + } + else if (coinflip()) + { + // Give extra opportunities for embarrassing teleports. + simple_god_message("'s wrath finds you!", god); + mpr("Space warps around you!"); + if (!one_chance_in(3)) + you_teleport2(false); + else + random_blink(false); + + // No return. + } + + // abyssal servant theme + if (random2(you.experience_level) > 7 && !one_chance_in(5)) + { + if (create_monster(MONS_GREEN_DEATH + random2(3), 0, + BEH_HOSTILE, you.x_pos, you.y_pos, + MHITYOU, 250) != -1) + { + simple_god_message(" sends a demon after you!", god); + } + else + { + simple_god_message("'s demon is unavoidably detained.", god); + } + } + else + { + bool success = false; + int how_many = 1 + (you.experience_level / 7); + + for (int loopy = 0; loopy < how_many; loopy++) + { + if (create_monster(MONS_NEQOXEC + random2(5), 0, BEH_HOSTILE, + you.x_pos, you.y_pos, MHITYOU, 250) != -1) + { + success = true; + } + } + + if (success) + simple_god_message(" sends minions to punish you.", god); + else + simple_god_message("'s minions fail to arrive.", god); + } +} + void divine_retribution( int god ) { ASSERT(god != GOD_NO_GOD); @@ -2210,39 +2270,7 @@ void divine_retribution( int god ) break; case GOD_LUGONU: - // abyssal servant theme - if (random2(you.experience_level) > 7 && !one_chance_in(5)) - { - if (create_monster(MONS_GREEN_DEATH + random2(3), 0, - BEH_HOSTILE, you.x_pos, you.y_pos, - MHITYOU, 250) != -1) - { - simple_god_message(" sends a demon after you!", god); - } - else - { - simple_god_message("'s demon is unavoidably detained.", god); - } - } - else - { - success = false; - how_many = 1 + (you.experience_level / 7); - - for (loopy = 0; loopy < how_many; loopy++) - { - if (create_monster(MONS_NEQOXEC + random2(5), 0, BEH_HOSTILE, - you.x_pos, you.y_pos, MHITYOU, 250) != -1) - { - success = true; - } - } - - if (success) - simple_god_message(" sends minions to punish you.", god); - else - simple_god_message("'s minions fail to arrive.", god); - } + lugonu_retribution(god); break; case GOD_ELYVILON: // Elyvilon doesn't seek revenge @@ -2253,7 +2281,8 @@ void divine_retribution( int god ) // Sometimes divine experiences are overwhelming... if (one_chance_in(5) && you.experience_level < random2(37)) { - if (coinflip()) { + if (coinflip()) + { mpr( "The divine experience confuses you!", MSGCH_WARN); confuse_player( 3 + random2(10) ); } @@ -2342,7 +2371,7 @@ void excommunication(void) if ( you.level_type == LEVEL_DUNGEON ) { simple_god_message(" casts you back into the Abyss!", old_god); - banished(DNGN_ENTER_ABYSS); + banished(DNGN_ENTER_ABYSS, "Lugonu's wrath"); } inc_penance(old_god, 50); break; |