From 79dc4f1a099e5f60eaf1dd99d848604e82c77529 Mon Sep 17 00:00:00 2001 From: David Ploog Date: Mon, 28 Dec 2009 02:39:42 +0100 Subject: Ensure that Vault:8 has a loot rich quadrant. --- crawl-ref/source/dat/vaults.des | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/dat/vaults.des b/crawl-ref/source/dat/vaults.des index 274a32e4df..18f7bfe94f 100644 --- a/crawl-ref/source/dat/vaults.des +++ b/crawl-ref/source/dat/vaults.des @@ -362,7 +362,9 @@ ENDMAP # example), which will be used to orient that corner towards the middle of # the map. Each quadrant must be capable of generating a rune, which # should be done by placing an 'O' glyph and calling vault8_rune(_G). - +# +# There is a lot of variance among the possible quadrants but we do ensure +# that (exactly) one quadrant with rich loot is generated. ############################################################################### # The main vault for Vault:8. @@ -371,7 +373,7 @@ NAME: vaults_vault PLACE: Vault:8 ORIENT: encompass TAGS: no_rotate no_dump -SUBVAULT: A : vault8_quadrant +SUBVAULT: A : vault8_quadrant_prize SUBVAULT: B : vault8_quadrant SUBVAULT: C : vault8_quadrant SUBVAULT: D : vault8_quadrant @@ -491,7 +493,7 @@ ENDMAP # # about 24 | NAME: vault8_rooms -TAGS: vault8_quadrant uniq_vault8_prize +TAGS: vault8_quadrant_prize SHUFFLE: AC/BD, EG/FH, IKN/MJL SUBST: A=., B=xx=, C=+, D=x, E=+, F=xx=, G=., H=x SUBST: I=., M=xx=, J=x, K=+, N=+, L=xx= @@ -764,7 +766,7 @@ ENDMAP # Vault:8 - Triangles Quadrant (by Mu.) # about 19 | NAME: vault8_triangles -TAGS: vault8_quadrant uniq_vault8_prize +TAGS: vault8_quadrant_prize SUBST: Q = 8 9 .:20 NSUBST: ? = 1:O / *:| SUBST: " = =:1 x:99 @@ -882,7 +884,7 @@ ENDMAP # Vault:8 - Corners Quadrant (by Mu.) # about 25 | NAME: vault8_corners -TAGS: vault8_quadrant uniq_vault8_prize +TAGS: vault8_quadrant_prize SUBST: Q = 8 9 .:10 NSUBST: $ = 1:O / *:$ SUBST: $ = | *:20 $ @@ -919,7 +921,7 @@ ENDMAP # Vault:8 - Flips Quadrant (by Mu.) # about 21 | NAME: vault8_flips -TAGS: vault8_quadrant uniq_vault8_prize +TAGS: vault8_quadrant_prize NSUBST: ; = 3:l / 3:z / 3:a / *:. SUBST: Q = 8 9 SUBST: $ = | * $ @@ -960,7 +962,7 @@ ENDMAP # Vault:8 - Construction Quadrant (by Mu.) # about 21 | NAME: vault8_construction -TAGS: vault8_quadrant uniq_vault8_prize +TAGS: vault8_quadrant_prize SUBST: Q = 8 9 . NSUBST: $ = 1:O / *:$ SUBST: $ = |*$. -- cgit v1.2.3-54-g00ecf From 719f1284e8de636334894a366507e32d6a36f7f5 Mon Sep 17 00:00:00 2001 From: Jude Brown Date: Mon, 28 Dec 2009 10:39:13 +1000 Subject: Mark spec'd items for summoned monsters as summoned. --- crawl-ref/source/dungeon.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index 18ae2d498b..89e643a68b 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -4533,6 +4533,11 @@ static void _dgn_give_mon_spec_items(mons_spec &mspec, if (item_made != NON_ITEM && item_made != -1) { item_def &item(mitm[item_made]); + + // Mark items on summoned monsters as such. + if (mspec.abjuration_duration != 0) + item.flags |= ISFLAG_SUMMONED; + if (!mon.pickup_item(item, 0, true)) destroy_item(item_made, true); } -- cgit v1.2.3-54-g00ecf From 3c1f575a5c99c03e72a30fe3d8ac91a7248c144e Mon Sep 17 00:00:00 2001 From: Jude Brown Date: Mon, 28 Dec 2009 11:01:51 +1000 Subject: Move and tweak Mislead code. Newly placed monsters during the mislead status are also given a mislead_as monster type. --- crawl-ref/source/makefile.obj | 1 + crawl-ref/source/mislead.cc | 127 ++++++++++++++++++++++++++++++++++++++++++ crawl-ref/source/mislead.h | 8 +++ crawl-ref/source/mon-cast.cc | 103 +--------------------------------- crawl-ref/source/mon-place.cc | 4 ++ 5 files changed, 141 insertions(+), 102 deletions(-) create mode 100644 crawl-ref/source/mislead.cc create mode 100644 crawl-ref/source/mislead.h (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/makefile.obj b/crawl-ref/source/makefile.obj index 926b9d5e50..1b1d038f31 100644 --- a/crawl-ref/source/makefile.obj +++ b/crawl-ref/source/makefile.obj @@ -102,6 +102,7 @@ menu.o \ message.o \ mgen_data.o \ misc.o \ +mislead.o \ mon-abil.o \ mon-act.o \ mon-behv.o \ diff --git a/crawl-ref/source/mislead.cc b/crawl-ref/source/mislead.cc new file mode 100644 index 0000000000..64c574d97a --- /dev/null +++ b/crawl-ref/source/mislead.cc @@ -0,0 +1,127 @@ +/* File: mislead.cc + * Summary: Handling of the Mislead spell and stats + */ + +#include "AppHdr.h" +#include "mislead.h" + +#include "enum.h" +#include "env.h" +#include "message.h" +#include "monster.h" +#include "mon-iter.h" +#include "mon-util.h" +#include "view.h" +#include "random.h" +#include "tutorial.h" +#include "xom.h" + +bool unsuitable_misled_monster(monster_type mons) +{ + return (mons_is_unique(mons) || mons_is_mimic(mons) + || mons_class_is_stationary(mons) || mons_genus(mons) == MONS_DRACONIAN + || mons == MONS_DANCING_WEAPON || mons == MONS_UGLY_THING + || mons == MONS_VERY_UGLY_THING || mons == MONS_ZOMBIE_SMALL + || mons == MONS_ZOMBIE_LARGE || mons == MONS_SKELETON_SMALL + || mons == MONS_SKELETON_LARGE || mons == MONS_SIMULACRUM_SMALL + || mons == MONS_SIMULACRUM_LARGE || mons == MONS_SPECTRAL_THING + || mons == MONS_SLIME_CREATURE || mons == MONS_BALLISTOMYCETE + || mons == MONS_HYDRA || mons == MONS_PLAYER_GHOST + || mons == MONS_SHAPESHIFTER || mons == MONS_PANDEMONIUM_DEMON + || mons == MONS_KILLER_KLOWN || mons == MONS_KRAKEN + || mons == MONS_KRAKEN_TENTACLE + || mons == MONS_GLOWING_SHAPESHIFTER + || mons == MONS_GIANT_BAT); +} + +monster_type get_misled_monster (monsters *monster) +{ + monster_type mons = random_monster_at_grid(monster->pos()); + if (unsuitable_misled_monster(mons)) + mons = random_monster_at_grid(monster->pos()); + + if (unsuitable_misled_monster(mons)) + return (MONS_GIANT_BAT); + + return mons; +} + +bool update_mislead_monster(monsters* monster) +{ + // Don't affect uniques, named monsters, and monsters with special tiles. + if (mons_is_unique(monster->type) || !monster->mname.empty() + || monster->props.exists("monster_tile") + || monster->props.exists("mislead_as")) + { + return (false); + } + + short misled_as = get_misled_monster(monster); + monster->props["mislead_as"] = misled_as; + + if (misled_as == MONS_GIANT_BAT) + return (false); + + return (true); +} + +int update_mislead_monsters(monsters* caster) +{ + int count = 0; + + for (monster_iterator mi; mi; ++mi) + if (*mi != caster && update_mislead_monster(*mi)) + count++; + + return count; +} + +void mons_cast_mislead(monsters *monster) +{ + // This really only affects the player; it causes confusion when cast on + // non-player foes, but that is dealt with inside ye-great-Switch-of-Doom. + if (monster->foe != MHITYOU) + return; + + // Prevents Mislead spam by Mara and co. {due} + if (you.duration[DUR_MISLED] > 10 && one_chance_in(3)) + return; + + if (wearing_amulet(AMU_CLARITY)) + { + mpr("Your vision blurs momentarily."); + return; + } + + update_mislead_monsters(monster); + + const int old_value = you.duration[DUR_MISLED]; + you.increase_duration(DUR_MISLED, monster->hit_dice * 12 / 3, 50); + if (you.duration[DUR_MISLED] > old_value) + { + you.check_awaken(500); + + if (old_value <= 0) + { + mpr("But for a moment, strange images dance in front of your eyes.", MSGCH_WARN); +#ifdef USE_TILE + tiles.add_overlay(you.pos(), tileidx_zap(MAGENTA)); + update_screen(); +#else + flash_view(MAGENTA); +#endif + more(); + } + else + mpr("You are even more misled!", MSGCH_WARN); + + learned_something_new(TUT_YOU_ENCHANTED); + + xom_is_stimulated((you.duration[DUR_MISLED] - old_value) + / BASELINE_DELAY); + } + + return; +} + + diff --git a/crawl-ref/source/mislead.h b/crawl-ref/source/mislead.h new file mode 100644 index 0000000000..540ffea9b1 --- /dev/null +++ b/crawl-ref/source/mislead.h @@ -0,0 +1,8 @@ +/* File: mislead.h + * Summary: Handling of the Mislead spell and stats + */ + +bool unsuitable_misled_monster(monster_type mons); +monster_type get_misled_monster (monsters *monster); +int update_mislead_monsters(monsters* caster); +bool update_mislead_monster(monsters* monster); diff --git a/crawl-ref/source/mon-cast.cc b/crawl-ref/source/mon-cast.cc index 761521f7ab..7bbbd77862 100644 --- a/crawl-ref/source/mon-cast.cc +++ b/crawl-ref/source/mon-cast.cc @@ -24,6 +24,7 @@ #include "mon-place.h" #include "terrain.h" #include "tutorial.h" +#include "mislead.h" #include "mgen_data.h" #include "coord.h" #include "mon-speak.h" @@ -1564,108 +1565,6 @@ int _count_mara_fakes() return count; } -bool _unsuitable_misled_monster(monster_type mons) -{ - return (mons_is_unique(mons) || mons_is_mimic(mons) - || mons_class_is_stationary(mons) || mons_genus(mons) == MONS_DRACONIAN - || mons == MONS_DANCING_WEAPON || mons == MONS_UGLY_THING - || mons == MONS_VERY_UGLY_THING || mons == MONS_ZOMBIE_SMALL - || mons == MONS_ZOMBIE_LARGE || mons == MONS_SKELETON_SMALL - || mons == MONS_SKELETON_LARGE || mons == MONS_SIMULACRUM_SMALL - || mons == MONS_SIMULACRUM_LARGE || mons == MONS_SPECTRAL_THING - || mons == MONS_SLIME_CREATURE || mons == MONS_BALLISTOMYCETE - || mons == MONS_HYDRA || mons == MONS_PLAYER_GHOST - || mons == MONS_SHAPESHIFTER || mons == MONS_PANDEMONIUM_DEMON - || mons == MONS_KILLER_KLOWN || mons == MONS_KRAKEN - || mons == MONS_KRAKEN_TENTACLE - || mons == MONS_GLOWING_SHAPESHIFTER); -} - -monster_type _get_misled_monster (monsters *monster) -{ - monster_type mons = random_monster_at_grid(monster->pos()); - if (_unsuitable_misled_monster(mons)) - mons = random_monster_at_grid(monster->pos()); - - if (_unsuitable_misled_monster(mons)) - return (MONS_GIANT_BAT); - - return mons; -} - -int _update_mislead_monsters(monsters* monster) -{ - int count = 0; - - for (monster_iterator mi; mi; ++mi) - { - if (*mi == monster) - continue; - - // Don't affect uniques, named monsters, and monsters with special tiles. - if (mons_is_unique(mi->type) || !mi->mname.empty() - || mi->props.exists("monster_tile") || mi->props.exists("mislead_as")) - { - continue; - } - else - { - mi->props["mislead_as"] = short(_get_misled_monster(*mi)); - count++; - } - } - - return count; -} - -void mons_cast_mislead(monsters *monster) -{ - // This really only affects the player; it causes confusion when cast on - // non-player foes, but that is dealt with inside ye-great-Switch-of-Doom. - if (monster->foe != MHITYOU) - return; - - // Prevents Mislead spam by Mara and co. {due} - if (you.duration[DUR_MISLED] > 10 && one_chance_in(3)) - return; - - if (wearing_amulet(AMU_CLARITY)) - { - mpr("Your vision blurs momentarily."); - return; - } - - _update_mislead_monsters(monster); - - const int old_value = you.duration[DUR_MISLED]; - you.increase_duration(DUR_MISLED, monster->hit_dice * 12 / 3, 50); - if (you.duration[DUR_MISLED] > old_value) - { - you.check_awaken(500); - - if (old_value <= 0) - { - mpr("But for a moment, strange images dance in front of your eyes.", MSGCH_WARN); -#ifdef USE_TILE - tiles.add_overlay(you.pos(), tileidx_zap(MAGENTA)); - update_screen(); -#else - flash_view(MAGENTA); -#endif - more(); - } - else - mpr("You are even more misled!", MSGCH_WARN); - - learned_something_new(TUT_YOU_ENCHANTED); - - xom_is_stimulated((you.duration[DUR_MISLED] - old_value) - / BASELINE_DELAY); - } - - return; -} - bool _find_players_ghost () { bool found = false; diff --git a/crawl-ref/source/mon-place.cc b/crawl-ref/source/mon-place.cc index 9faa371cb8..3a88d27774 100644 --- a/crawl-ref/source/mon-place.cc +++ b/crawl-ref/source/mon-place.cc @@ -24,6 +24,7 @@ #include "lev-pand.h" #include "makeitem.h" #include "message.h" +#include "mislead.h" #include "mon-behv.h" #include "mon-gear.h" #include "mon-iter.h" @@ -1242,6 +1243,9 @@ static int _place_monster_aux(const mgen_data &mg, mon->add_ench(ENCH_SLOWLY_DYING); } + if (!crawl_state.arena && you.misled()) + update_mislead_monster(mon); + if (monster_can_submerge(mon, grd(fpos)) && !one_chance_in(5)) mon->add_ench(ENCH_SUBMERGED); -- cgit v1.2.3-54-g00ecf From cc6a658772e7c26cf2dedceb7028601c9863268f Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Sun, 27 Dec 2009 22:18:44 -0800 Subject: Fix insane non-monotonic fulsome behavior, per Eronarn The following two coder's discretion choices were made: 1. "Lots of chunks" is 5+, as for a draconian 2. "Self affliction at low power" means less than 1dN-1 where N depends on the potion. --- crawl-ref/source/spells4.cc | 123 +++++++++++++++++++------------------------- crawl-ref/source/spl-data.h | 2 +- 2 files changed, 55 insertions(+), 70 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/spells4.cc b/crawl-ref/source/spells4.cc index 6fbb55f399..9d1c969ea6 100644 --- a/crawl-ref/source/spells4.cc +++ b/crawl-ref/source/spells4.cc @@ -1179,7 +1179,7 @@ bool cast_evaporate(int pow, bolt& beem, int pot_idx) // using up the corpse might also lead to game balance problems. - bwr void cast_fulsome_distillation(int pow) { - pow = std::min(50, pow); + pow = std::min(100, pow); int corpse = -1; @@ -1205,96 +1205,73 @@ void cast_fulsome_distillation(int pow) return; } - const bool rotten = food_is_rotten(mitm[corpse]); - const bool big_monster = (mons_type_hit_dice(mitm[corpse].plus) >= 5); - const bool power_up = (rotten && big_monster); - potion_type pot_type = POT_WATER; + int difficulty = 0; - switch (mitm[corpse].plus) + switch (mons_corpse_effect(mitm[corpse].plus)) { - case MONS_GIANT_BAT: // extracting batty behaviour : 1 - case MONS_GIANT_BLOWFLY: // extracting batty behaviour : 5 - pot_type = POT_CONFUSION; + case CE_CLEAN: + pot_type = POT_WATER; + difficulty = 0; break; - case MONS_RED_WASP: // paralysis attack : 8 - case MONS_YELLOW_WASP: // paralysis attack : 4 - pot_type = POT_PARALYSIS; + case CE_CONTAMINATED: + pot_type = (mons_weight(mitm[corpse].plus) >= 900) + ? POT_DEGENERATION : POT_POISON; + difficulty = (pot_type == POT_DEGENERATION) ? 100 : 40; break; - case MONS_SNAKE: // clean meat, but poisonous attack : 2 - case MONS_GIANT_ANT: // clean meat, but poisonous attack : 3 - pot_type = (power_up ? POT_POISON : POT_CONFUSION); + case CE_POISONOUS: + pot_type = POT_POISON; + difficulty = 50; break; - case MONS_ORANGE_RAT: // poisonous meat, but draining attack : 3 - pot_type = (power_up ? POT_DECAY : POT_POISON); + case CE_MUTAGEN_RANDOM: + case CE_MUTAGEN_GOOD: // unused + case CE_RANDOM: // unused + pot_type = POT_MUTATION; + // this is a potentially good potion, so it never tries to get into you + difficulty = 0; break; - case MONS_SPINY_WORM: // 12 - pot_type = (power_up ? POT_DECAY : POT_STRONG_POISON); + case CE_MUTAGEN_BAD: // unused + case CE_ROTTEN: // actually this only occurs via mangling + case CE_HCL: // necrophage + pot_type = POT_DECAY; + difficulty = 100; break; + case CE_NOCORPSE: // shouldn't occur default: - switch (mons_corpse_effect(mitm[corpse].plus)) - { - case CE_CLEAN: - pot_type = (power_up ? POT_CONFUSION : POT_WATER); - break; - - case CE_CONTAMINATED: - pot_type = (power_up ? POT_DEGENERATION : POT_POISON); - break; - - case CE_POISONOUS: - pot_type = (power_up ? POT_STRONG_POISON : POT_POISON); - break; + break; + } - case CE_MUTAGEN_RANDOM: - case CE_MUTAGEN_GOOD: // unused - case CE_RANDOM: // unused - pot_type = POT_MUTATION; - break; + switch (mitm[corpse].plus) + { + case MONS_RED_WASP: // paralysis attack + pot_type = POT_PARALYSIS; + difficulty = 100; + break; - case CE_MUTAGEN_BAD: // unused - case CE_ROTTEN: // actually this only occurs via mangling - case CE_HCL: // necrophage - pot_type = (power_up ? POT_DECAY : POT_STRONG_POISON); - break; + case MONS_YELLOW_WASP: // slowing attack + pot_type = POT_SLOWING; + difficulty = 50; + break; - case CE_NOCORPSE: // shouldn't occur - default: - break; - } + default: break; } - // If not powerful enough, we downgrade the potion. - if (random2(50) > pow + 10 * rotten) + struct monsterentry* smc = get_monster_data(mitm[corpse].plus); + + for (int nattk = 0; nattk < 4; ++nattk) { - switch (pot_type) + if (smc->attack[nattk].flavour == AF_POISON_MEDIUM || + smc->attack[nattk].flavour == AF_POISON_STRONG || + smc->attack[nattk].flavour == AF_POISON_STR) { - case POT_DECAY: - case POT_DEGENERATION: - case POT_STRONG_POISON: - pot_type = POT_POISON; - break; - - case POT_MUTATION: - case POT_POISON: - pot_type = POT_CONFUSION; - break; - - case POT_PARALYSIS: - pot_type = POT_SLOWING; - break; - - case POT_CONFUSION: - case POT_SLOWING: - default: - pot_type = POT_WATER; - break; + pot_type = POT_STRONG_POISON; + difficulty = 75; } } @@ -1310,9 +1287,17 @@ void cast_fulsome_distillation(int pow) mitm[corpse].inscription.clear(); item_colour(mitm[corpse]); // sets special as well + set_ident_type(mitm[corpse], ID_KNOWN_TYPE); + mprf("You extract %s from the corpse.", mitm[corpse].name(DESC_NOCAP_A).c_str()); + if (random2(difficulty + 1) > pow) + { + mpr("Oops! You accidentally inhaled the fumes!"); + potion_effect(pot_type, 40); + } + // Try to move the potion to the player (for convenience). if (move_item_to_player(corpse, 1) != 1) mpr("Unfortunately, you can't carry it right now!"); diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h index 3adc30d1d3..303306cc83 100644 --- a/crawl-ref/source/spl-data.h +++ b/crawl-ref/source/spl-data.h @@ -927,7 +927,7 @@ SPTYP_TRANSMUTATION | SPTYP_NECROMANCY, SPFLAG_NONE, 1, - 50, + 100, -1, -1, 0, NULL, -- cgit v1.2.3-54-g00ecf From 02962c9ca97ca896e2d7be0e891f800efbbd9368 Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Sun, 27 Dec 2009 23:41:17 -0800 Subject: Forms never lower weight cap I'm just building the bikeshed - somebody else needs to paint this stupid thing. --- crawl-ref/source/actor.cc | 4 ++-- crawl-ref/source/actor.h | 2 +- crawl-ref/source/monster.cc | 2 +- crawl-ref/source/monster.h | 2 +- crawl-ref/source/player.cc | 13 ++++++++++--- crawl-ref/source/player.h | 2 +- 6 files changed, 16 insertions(+), 9 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/actor.cc b/crawl-ref/source/actor.cc index 3cdeeb9c50..62a8d87cf6 100644 --- a/crawl-ref/source/actor.cc +++ b/crawl-ref/source/actor.cc @@ -161,9 +161,9 @@ void actor::shield_block_succeeded(actor *foe) } } -int actor::body_weight() const +int actor::body_weight(bool base) const { - switch (body_size(PSIZE_BODY)) + switch (body_size(PSIZE_BODY, base)) { case SIZE_TINY: return (150); diff --git a/crawl-ref/source/actor.h b/crawl-ref/source/actor.h index b29e826307..a6d4899bbb 100644 --- a/crawl-ref/source/actor.h +++ b/crawl-ref/source/actor.h @@ -63,7 +63,7 @@ public: virtual size_type body_size(size_part_type psize = PSIZE_TORSO, bool base = false) const = 0; - virtual int body_weight() const; + virtual int body_weight(bool base = false) const; virtual int total_weight() const = 0; virtual int damage_brand(int which_attack = -1) = 0; diff --git a/crawl-ref/source/monster.cc b/crawl-ref/source/monster.cc index 5285da7795..862aa075c4 100644 --- a/crawl-ref/source/monster.cc +++ b/crawl-ref/source/monster.cc @@ -316,7 +316,7 @@ size_type monsters::body_size(size_part_type /* psize */, bool /* base */) const return (ret); } -int monsters::body_weight() const +int monsters::body_weight(bool /*base*/) const { int mclass = type; diff --git a/crawl-ref/source/monster.h b/crawl-ref/source/monster.h index 400ad01769..524c48b4d4 100644 --- a/crawl-ref/source/monster.h +++ b/crawl-ref/source/monster.h @@ -221,7 +221,7 @@ public: bool can_pass_through_feat(dungeon_feature_type grid) const; bool is_habitable_feat(dungeon_feature_type actual_grid) const; size_type body_size(size_part_type psize = PSIZE_TORSO, bool base = false) const; - int body_weight() const; + int body_weight(bool base = false) const; int total_weight() const; int damage_brand(int which_attack = -1); int damage_type(int which_attack = -1); diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 04c1498297..7ba87a20ff 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -2379,7 +2379,11 @@ int player_sust_abil(bool calc_unid) int carrying_capacity(burden_state_type bs) { - int cap = (2 * you.body_weight()) + (you.strength * 300) + // Yuck. We need this for gameplay - it nerfs small forms too much + // otherwise - but there's no good way to rationalize here... --sorear + int used_weight = std::max(you.body_weight(), you.body_weight(true)); + + int cap = (2 * used_weight) + (you.strength * 300) + (you.airborne() ? 1000 : 0); // We are nice to the lighter species in that strength adds absolutely // instead of relatively to body weight. --dpeg @@ -5593,9 +5597,12 @@ size_type player::body_size(size_part_type psize, bool base) const } } -int player::body_weight() const +int player::body_weight(bool base) const { - int weight = actor::body_weight(); + int weight = actor::body_weight(base); + + if (base) + return (weight); switch (attribute[ATTR_TRANSFORMATION]) { diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.h index a02e5f5c4c..ee34bd703e 100644 --- a/crawl-ref/source/player.h +++ b/crawl-ref/source/player.h @@ -383,7 +383,7 @@ public: bool can_pass_through_feat(dungeon_feature_type grid) const; bool is_habitable_feat(dungeon_feature_type actual_grid) const; size_type body_size(size_part_type psize = PSIZE_TORSO, bool base = false) const; - int body_weight() const; + int body_weight(bool base = false) const; int total_weight() const; int damage_brand(int which_attack = -1); int damage_type(int which_attack = -1); -- cgit v1.2.3-54-g00ecf From e4e726475b5ffaafebe48a0eaf25991a2632ed11 Mon Sep 17 00:00:00 2001 From: Vsevolod Kozlov Date: Mon, 28 Dec 2009 12:44:41 +0300 Subject: Add the long description to ossuary.des. --- crawl-ref/source/dat/ossuary.des | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/dat/ossuary.des b/crawl-ref/source/dat/ossuary.des index 89d9465766..60c46d29dd 100644 --- a/crawl-ref/source/dat/ossuary.des +++ b/crawl-ref/source/dat/ossuary.des @@ -13,7 +13,13 @@ {{ function ossuary_portal(e) - local timeout_turns = crawl.random_range(1500, 2000) + local desc_long = +"You can make out a staircase leading downwards into a small tomb. Sand ".. +"surrounds the staircase and is continuously pouring onto it. Before long the ".. +"staircase will be gone. They say that some distant relatives of the pharaohs ".. +"were entombed here." + + local timeout_turns = crawl.random_range(1500, 2000) local messager = timed_msg { @@ -31,6 +37,7 @@ function ossuary_portal(e) timed_marker { disappear = "The staircase has disappeared completely beneath the sand.", desc = "A sand-covered staircase", + desc_long = desc_long, entity = 'staircase', dst = "ossuary", dstorigin = "in a tomb", -- cgit v1.2.3-54-g00ecf From 679e8fa7154cce598b7fe4946f1c7f7bbe0f72c9 Mon Sep 17 00:00:00 2001 From: Jude Brown Date: Mon, 28 Dec 2009 18:05:19 +1000 Subject: Item quantity adjustment wrappers for dLua. --- crawl-ref/source/l_item.cc | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/l_item.cc b/crawl-ref/source/l_item.cc index 80bbc88df9..e8dc23a2b1 100644 --- a/crawl-ref/source/l_item.cc +++ b/crawl-ref/source/l_item.cc @@ -686,6 +686,53 @@ static int l_item_do_destroy(lua_State *ls) return (1); } +static int l_item_do_dec_quantity(lua_State *ls) +{ + ASSERT_DLUA; + + LUA_ITEM(item, 1); + if (!item || !item->is_valid()) + { + lua_pushboolean(ls, false); + return (1); + } + + // The quantity to reduce by. + int quantity = luaL_checkint(ls, 2); + + bool destroyed = false; + + if (in_inventory(*item)) + destroyed = dec_inv_item_quantity(item->link, quantity); + else + destroyed = dec_mitm_item_quantity(item->index(), quantity); + + lua_pushboolean(ls, destroyed); + return (1); +} + +static int l_item_do_inc_quantity(lua_State *ls) +{ + ASSERT_DLUA; + + LUA_ITEM(item, 1); + if (!item || !item->is_valid()) + { + lua_pushboolean(ls, false); + return (1); + } + + // The quantity to increase by. + int quantity = luaL_checkint(ls, 2); + + if (in_inventory(*item)) + inc_inv_item_quantity(item->link, quantity); + else + inc_mitm_item_quantity(item->index(), quantity); + + return (0); +} + static const struct luaL_reg item_lib[] = { { "artefact", l_item_artefact }, @@ -717,6 +764,8 @@ static const struct luaL_reg item_lib[] = { "dropped", l_item_dropped }, { "can_cut_meat", l_item_can_cut_meat }, { "destroy", l_item_do_destroy }, + { "dec_quantity", l_item_do_dec_quantity }, + { "inc_quantity", l_item_do_inc_quantity }, { NULL, NULL }, }; -- cgit v1.2.3-54-g00ecf From 7c39d1c666a9cc984915bcf87e80e9dde98d215d Mon Sep 17 00:00:00 2001 From: Jude Brown Date: Mon, 28 Dec 2009 18:05:40 +1000 Subject: Inventory and stash iterators for lua. --- crawl-ref/source/dat/clua/iter.lua | 72 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/dat/clua/iter.lua b/crawl-ref/source/dat/clua/iter.lua index b7bf9bc0a0..d9496bdb3c 100644 --- a/crawl-ref/source/dat/clua/iter.lua +++ b/crawl-ref/source/dat/clua/iter.lua @@ -470,3 +470,75 @@ end function iter.slave_iterator (prop, value) return iter.point_iterator:new(dgn.find_marker_positions_by_prop(prop, value)) end + +------------------------------------------------------------------------------- +-- Inventory iterator +------------------------------------------------------------------------------- + +iter.invent_iterator = {} + +function iter.invent_iterator:_new () + local m = {} + setmetatable(m, self) + self.__index = self + return m +end + +function iter.invent_iterator:new (itable, filter, rv_instead) + if itable == nil then + error("itable cannot be nil for invent_iterator") + end + + local mt = iter.invent_iterator:_new() + mt.cur_p = 0 + mt.table = itable + mt.rvi = rv_instead or false + mt.filter = filter or nil + + return mt:iter() +end + +function iter.invent_iterator:next() + local point = nil + local q = 0 + repeat + q = q + 1 + self.cur_p = self.cur_p + 1 + point = self:check_filter(self.table[self.cur_p]) + until point or q == 10 + + return point +end + +function iter.invent_iterator:check_filter(item) + if self.filter ~= nil then + if self.filter(item) then + if self.rvi then + return self.filter(item) + else + return item + end + else + return nil + end + else + return item + end +end + +function iter.invent_iterator:iter () + return function() return self:next() end, nil, nil +end + +-- An easier and more posh way of interfacing with find_marker_positions_by_prop. +function iter.inventory_iterator () + return iter.invent_iterator:new(items.inventory()) +end + +function iter.stash_iterator (point, y) + if y == nil then + return iter.invent_iterator:new(dgn.items_at(point.x, point.y)) + else + return iter.invent_iterator:new(dgn.items_at(point, y)) + end +end -- cgit v1.2.3-54-g00ecf From 1f482e4025a81d46a44479d85c53daa503cb5a11 Mon Sep 17 00:00:00 2001 From: Jude Brown Date: Mon, 28 Dec 2009 18:22:47 +1000 Subject: Give Lua access to DESC_QUALNAME and DESC_BASENAME. These do not seem to leak any information. If so, they can be limited to dlua implementations of item->name. --- crawl-ref/source/libutil.cc | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/libutil.cc b/crawl-ref/source/libutil.cc index ce7fcbb429..26243f405c 100644 --- a/crawl-ref/source/libutil.cc +++ b/crawl-ref/source/libutil.cc @@ -69,6 +69,10 @@ description_level_type description_type_by_name(const char *desc) return DESC_INVENTORY; else if (!strcmp("none", desc)) return DESC_NONE; + else if (!strcmp("base", desc)) + return DESC_BASENAME; + else if (!strcmp("qual", desc)) + return DESC_QUALNAME; return DESC_PLAIN; } -- cgit v1.2.3-54-g00ecf From 4bd11a2119ce0fd7f137233e16cd7f745c13a2dd Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Mon, 28 Dec 2009 01:52:41 -0800 Subject: Rename MF_CREATED_FRIENDLY to MF_NO_REWARD, since that's all it's used for these days. --- crawl-ref/source/attitude-change.cc | 2 +- crawl-ref/source/directn.cc | 4 ++-- crawl-ref/source/enum.h | 2 +- crawl-ref/source/godabil.cc | 4 ++-- crawl-ref/source/misc.cc | 2 +- crawl-ref/source/mon-place.cc | 4 ++-- crawl-ref/source/mon-stuff.cc | 4 ++-- crawl-ref/source/monster.cc | 2 +- crawl-ref/source/religion.cc | 6 +++--- crawl-ref/source/spl-cast.cc | 2 +- crawl-ref/source/tags.cc | 2 +- crawl-ref/source/wiz-mon.cc | 2 +- 12 files changed, 18 insertions(+), 18 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/attitude-change.cc b/crawl-ref/source/attitude-change.cc index fcfcf2d2a9..ef5ef2fcef 100644 --- a/crawl-ref/source/attitude-change.cc +++ b/crawl-ref/source/attitude-change.cc @@ -864,7 +864,7 @@ void beogh_convert_orc(monsters *orc, bool emergency, // The monster is not really *created* friendly, but should it // become hostile later on, it won't count as a good kill. - orc->flags |= MF_CREATED_FRIENDLY; + orc->flags |= MF_NO_REWARD; // Prevent assertion if the orc was previously worshipping a // different god, rather than already worshipping Beogh or being an diff --git a/crawl-ref/source/directn.cc b/crawl-ref/source/directn.cc index 3b0a1262b3..047dcd3974 100644 --- a/crawl-ref/source/directn.cc +++ b/crawl-ref/source/directn.cc @@ -1498,7 +1498,7 @@ void direction(dist& moves, const targetting_type restricts, { case ATT_FRIENDLY: m->attitude = ATT_GOOD_NEUTRAL; - m->flags &= ~MF_CREATED_FRIENDLY; + m->flags &= ~MF_NO_REWARD; m->flags |= MF_WAS_NEUTRAL; break; case ATT_GOOD_NEUTRAL: @@ -1513,7 +1513,7 @@ void direction(dist& moves, const targetting_type restricts, break; case ATT_HOSTILE: m->attitude = ATT_FRIENDLY; - m->flags |= MF_CREATED_FRIENDLY; + m->flags |= MF_NO_REWARD; break; } diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 61dbeb3b2f..48bcb16db5 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2122,7 +2122,7 @@ enum mon_attitude_type // These are now saved in an unsigned long in the monsters struct. enum monster_flag_type { - MF_CREATED_FRIENDLY = 0x01, // no benefit from killing + MF_NO_REWARD = 0x01, // no benefit from killing MF_JUST_SUMMONED = 0x02, // monster skips next available action MF_TAKING_STAIRS = 0x04, // is following player through stairs MF_INTERESTING = 0x08, // Player finds monster interesting diff --git a/crawl-ref/source/godabil.cc b/crawl-ref/source/godabil.cc index f8b6ce9960..8888f868ab 100644 --- a/crawl-ref/source/godabil.cc +++ b/crawl-ref/source/godabil.cc @@ -279,7 +279,7 @@ void yred_make_enslaved_soul(monsters *mon, bool force_hostile, mon->colour = ETC_UNHOLY; - mon->flags |= MF_CREATED_FRIENDLY; + mon->flags |= MF_NO_REWARD; mon->flags |= MF_ENSLAVED_SOUL; if (twisted) @@ -1146,7 +1146,7 @@ bool evolve_flora() current_plant->upgrade_type(current_target.new_type, true, true); current_plant->god = GOD_FEDHAS; current_plant->attitude = ATT_FRIENDLY; - current_plant->flags |= MF_CREATED_FRIENDLY; + current_plant->flags |= MF_NO_REWARD; current_plant->flags |= MF_ATT_CHANGE_ATTEMPT; // Try to remove slowly dying in case we are upgrading a diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc index b5c9e6bb40..2cc226f127 100644 --- a/crawl-ref/source/misc.cc +++ b/crawl-ref/source/misc.cc @@ -3219,7 +3219,7 @@ bool stop_attack_prompt(const monsters *mon, bool beam_attack, const bool isUnchivalric = is_unchivalric_attack(&you, mon); const bool isHoly = mon->is_holy() && (mon->attitude != ATT_HOSTILE - || testbits(mon->flags, MF_CREATED_FRIENDLY) + || testbits(mon->flags, MF_NO_REWARD) || testbits(mon->flags, MF_WAS_NEUTRAL)); if (isFriendly) diff --git a/crawl-ref/source/mon-place.cc b/crawl-ref/source/mon-place.cc index 3a88d27774..27b6c8fe20 100644 --- a/crawl-ref/source/mon-place.cc +++ b/crawl-ref/source/mon-place.cc @@ -1036,7 +1036,7 @@ int place_monster(mgen_data mg, bool force_pos) // Don't give XP for the slaves to discourage hunting. Pikel // has an artificially large XP modifier to compensate for // this. - menv[band_id].flags |= MF_CREATED_FRIENDLY; + menv[band_id].flags |= MF_NO_REWARD; menv[band_id].props["pikel_band"] = true; } } @@ -2578,7 +2578,7 @@ int mons_place(mgen_data mg) if (mg.behaviour > NUM_BEHAVIOURS) { if (mg.behaviour == BEH_FRIENDLY) - creation->flags |= MF_CREATED_FRIENDLY; + creation->flags |= MF_NO_REWARD; if (mg.behaviour == BEH_NEUTRAL || mg.behaviour == BEH_GOOD_NEUTRAL || mg.behaviour == BEH_STRICT_NEUTRAL) diff --git a/crawl-ref/source/mon-stuff.cc b/crawl-ref/source/mon-stuff.cc index 730fb54ef2..7a85194ea2 100644 --- a/crawl-ref/source/mon-stuff.cc +++ b/crawl-ref/source/mon-stuff.cc @@ -595,7 +595,7 @@ static void _give_adjusted_experience(monsters *monster, killer_type killer, const int experience = exper_value(monster); const bool created_friendly = - testbits(monster->flags, MF_CREATED_FRIENDLY); + testbits(monster->flags, MF_NO_REWARD); const bool was_neutral = testbits(monster->flags, MF_WAS_NEUTRAL); const bool no_xp = monster->has_ench(ENCH_ABJ) || !experience; const bool already_got_half_xp = testbits(monster->flags, MF_GOT_HALF_XP); @@ -1616,7 +1616,7 @@ int monster_die(monsters *monster, killer_type killer, && monster->visible_to(&you); const bool exploded = monster->flags & MF_EXPLODE_KILL; - const bool created_friendly = testbits(monster->flags, MF_CREATED_FRIENDLY); + const bool created_friendly = testbits(monster->flags, MF_NO_REWARD); bool anon = (killer_index == ANON_FRIENDLY_MONSTER); const mon_holy_type targ_holy = monster->holiness(); diff --git a/crawl-ref/source/monster.cc b/crawl-ref/source/monster.cc index 862aa075c4..f9d18c97d9 100644 --- a/crawl-ref/source/monster.cc +++ b/crawl-ref/source/monster.cc @@ -5955,7 +5955,7 @@ void monsters::react_to_damage(int damage, beam_type flavour, kill_category whos if (nmons != -1 && nmons != NON_MONSTER) { // Don't allow milking the royal jelly. - menv[nmons].flags |= MF_CREATED_FRIENDLY; + menv[nmons].flags |= MF_NO_REWARD; spawned++; } } diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc index 763f1c0709..3a0c43fb0f 100644 --- a/crawl-ref/source/religion.cc +++ b/crawl-ref/source/religion.cc @@ -2683,7 +2683,7 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known, } if (thing_done == DID_ATTACK_HOLY && victim - && !testbits(victim->flags, MF_CREATED_FRIENDLY) + && !testbits(victim->flags, MF_NO_REWARD) && !testbits(victim->flags, MF_WAS_NEUTRAL)) { break; @@ -3029,7 +3029,7 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known, case GOD_SHINING_ONE: case GOD_ELYVILON: if (victim - && !testbits(victim->flags, MF_CREATED_FRIENDLY) + && !testbits(victim->flags, MF_NO_REWARD) && !testbits(victim->flags, MF_WAS_NEUTRAL)) { break; @@ -3097,7 +3097,7 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known, case GOD_SHINING_ONE: case GOD_ELYVILON: if (victim - && !testbits(victim->flags, MF_CREATED_FRIENDLY) + && !testbits(victim->flags, MF_NO_REWARD) && !testbits(victim->flags, MF_WAS_NEUTRAL)) { break; diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index 7a65c84f2e..9f875c298f 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -1058,7 +1058,7 @@ static void _try_monster_cast(spell_type spell, int powc, mon->type = MONS_HUMAN; mon->behaviour = BEH_SEEK; mon->attitude = ATT_FRIENDLY; - mon->flags = (MF_CREATED_FRIENDLY | MF_JUST_SUMMONED | MF_SEEN + mon->flags = (MF_NO_REWARD | MF_JUST_SUMMONED | MF_SEEN | MF_WAS_IN_VIEW | MF_HARD_RESET); mon->hit_points = you.hp; mon->hit_dice = you.experience_level; diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc index 6d12c323ab..82a2f462ab 100644 --- a/crawl-ref/source/tags.cc +++ b/crawl-ref/source/tags.cc @@ -2426,7 +2426,7 @@ void tag_missing_level_attitude() if (menv[i].type < 0) continue; - is_friendly = testbits(menv[i].flags, MF_CREATED_FRIENDLY); + is_friendly = testbits(menv[i].flags, MF_NO_REWARD); menv[i].foe = MHITNOT; diff --git a/crawl-ref/source/wiz-mon.cc b/crawl-ref/source/wiz-mon.cc index d7270d082a..632b716b54 100644 --- a/crawl-ref/source/wiz-mon.cc +++ b/crawl-ref/source/wiz-mon.cc @@ -285,7 +285,7 @@ void debug_list_monsters() int exp = exper_value(*mi); total_exp += exp; - if ((mi->flags & (MF_WAS_NEUTRAL | MF_CREATED_FRIENDLY)) + if ((mi->flags & (MF_WAS_NEUTRAL | MF_NO_REWARD)) || mi->has_ench(ENCH_ABJ)) { continue; -- cgit v1.2.3-54-g00ecf From adcc6b42f200b5a4c7f75d5826884494684a587b Mon Sep 17 00:00:00 2001 From: Darshan Shaligram Date: Mon, 28 Dec 2009 18:56:12 +0530 Subject: Postprocess shoals levels to fix heightmap for vaults on the level so that the tide interacts reasonably with vaults. --- crawl-ref/source/dgn-shoals.cc | 90 ++++++++++++++++++++++++++++++++---------- crawl-ref/source/dgn-shoals.h | 1 + crawl-ref/source/dungeon.cc | 12 ++++++ 3 files changed, 83 insertions(+), 20 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/dgn-shoals.cc b/crawl-ref/source/dgn-shoals.cc index da0070239e..0215afd81f 100644 --- a/crawl-ref/source/dgn-shoals.cc +++ b/crawl-ref/source/dgn-shoals.cc @@ -6,6 +6,7 @@ #include "dungeon.h" #include "dgn-shoals.h" #include "env.h" +#include "flood_find.h" #include "items.h" #include "maps.h" #include "mon-place.h" @@ -76,6 +77,40 @@ static dungeon_feature_type _shoals_feature_at(const coord_def &c) return _shoals_feature_by_height(height); } +static int _shoals_feature_height(dungeon_feature_type feat) +{ + switch (feat) + { + case DNGN_FLOOR: + return SHT_FLOOR; + case DNGN_SHALLOW_WATER: + return SHT_SHALLOW_WATER; + case DNGN_DEEP_WATER: + return SHT_SHALLOW_WATER - 1; + default: + return 0; + } +} + +// Returns true if the given feature can be affected by Shoals tides. +static bool _shoals_tide_susceptible_feat(dungeon_feature_type feat) +{ + return (feat_is_water(feat) || feat == DNGN_FLOOR); +} + +// Return true if tide effects can propagate through this square. +// NOTE: uses RNG! +static bool _shoals_tide_passable_feat(dungeon_feature_type feat) +{ + return (feat_is_watery(feat) + // The Shoals tide can sometimes lap past the doorways of rooms + // near the water. Note that the actual probability of the tide + // getting through a doorway is this probability * 0.5 -- + // see _shoals_apply_tide. + || (feat == DNGN_OPEN_DOOR && !one_chance_in(3)) + || (feat == DNGN_CLOSED_DOOR && one_chance_in(3))); +} + static void _shoals_init_heights() { env.heightmap.reset(new grid_heightmap); @@ -448,6 +483,31 @@ void prepare_shoals(int level_number) _shoals_furniture(_shoals_margin); } +// Search the map for vaults and set the terrain heights for features +// in the vault to reasonable levels. +void shoals_postprocess_level() +{ + if (!player_in_branch(BRANCH_SHOALS) || !env.heightmap.get()) + return; + + for (rectangle_iterator ri(1); ri; ++ri) + { + const coord_def c(*ri); + if (!(dgn_Map_Mask(c) & MMT_VAULT)) + continue; + + const dungeon_feature_type feat(grd(c)); + if (!_shoals_tide_susceptible_feat(feat)) + continue; + + const dungeon_feature_type expected_feat(_shoals_feature_at(c)); + // It would be nice to do actual height contours within + // vaults, but for now, keep it simple. + if (feat != expected_feat) + shoals_heights(c) = _shoals_feature_height(feat); + } +} + // The raw tide height / TIDE_MULTIPLIER is the actual tide height. The higher // the tide multiplier, the slower the tide advances and recedes. A multiplier // of X implies that the tide will advance visibly about once in X turns. @@ -554,22 +614,8 @@ static void _shoals_apply_tide_feature_at(coord_def c, dungeon_terrain_changed(c, feat, true, false, true); } -static int _shoals_feature_height(dungeon_feature_type feat) -{ - switch (feat) - { - case DNGN_FLOOR: - return SHT_FLOOR; - case DNGN_SHALLOW_WATER: - return SHT_SHALLOW_WATER; - case DNGN_DEEP_WATER: - return SHT_SHALLOW_WATER - 1; - default: - return 0; - } -} - -// Determines if the +// Determines if the tide is rising or falling based on before and +// after features at the same square. static tide_direction _shoals_feature_tide_height_change( dungeon_feature_type oldfeat, dungeon_feature_type newfeat) @@ -623,12 +669,16 @@ static void _shoals_apply_tide(int tide) for (int i = 0, size = cpage.size(); i < size; ++i) { coord_def c(cpage[i]); - const bool was_wet(feat_is_water(grd(c))); + const bool was_wet(_shoals_tide_passable_feat(grd(c))); seen_points(c) = true; _shoals_apply_tide_at(c, tide); - // Only wet squares can propagate the tide onwards. - if (was_wet) + const bool is_wet(feat_is_water(grd(c))); + // Only squares that were wet (before applying tide + // effects!) can propagate the tide onwards. If the tide is + // receding and just left the square dry, there's only a chance of + // it continuing past and draining other squares through this one. + if (was_wet && (is_wet || coinflip())) { for (adjacent_iterator ai(c); ai; ++ai) { @@ -638,7 +688,7 @@ static void _shoals_apply_tide(int tide) if (!seen_points(adj)) { const dungeon_feature_type feat = grd(adj); - if (feat_is_water(feat) || feat == DNGN_FLOOR) + if (_shoals_tide_susceptible_feat(feat)) { npage.push_back(adj); seen_points(adj) = true; diff --git a/crawl-ref/source/dgn-shoals.h b/crawl-ref/source/dgn-shoals.h index aae09ff653..f558f6606f 100644 --- a/crawl-ref/source/dgn-shoals.h +++ b/crawl-ref/source/dgn-shoals.h @@ -2,6 +2,7 @@ #define DGN_SHOALS_H void prepare_shoals(int level_number); +void shoals_postprocess_level(); void shoals_apply_tides(int turns_elapsed); #endif diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index 89e643a68b..48268f2067 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -233,6 +233,8 @@ typedef std::list coord_list; static void _dgn_set_floor_colours(); static bool _fixup_interlevel_connectivity(); +void dgn_postprocess_level(); + ////////////////////////////////////////////////////////////////////////// // Static data @@ -374,6 +376,8 @@ bool builder(int level_number, int level_type) vault_names.push_back(you.level_type_name); } + dgn_postprocess_level(); + dgn_Layout_Type.clear(); Level_Unique_Maps.clear(); Level_Unique_Tags.clear(); @@ -398,6 +402,13 @@ bool builder(int level_number, int level_type) return (false); } +// Should be called after a level is constructed to perform any final +// fixups. +void dgn_postprocess_level() +{ + shoals_postprocess_level(); +} + void level_welcome_messages() { for (int i = 0, size = Level_Vaults.size(); i < size; ++i) @@ -4132,6 +4143,7 @@ bool dgn_place_map(const map_def *mdef, bool clobber, bool make_no_exits, } setup_environment_effects(); + dgn_postprocess_level(); } return (did_map); -- cgit v1.2.3-54-g00ecf From 87f499df5e027c60f0d9f217464dfafd190b0772 Mon Sep 17 00:00:00 2001 From: Darshan Shaligram Date: Mon, 28 Dec 2009 19:01:59 +0530 Subject: Fix shoals tides being arrested on squares with items that cannot be moved to an adjacent square. --- crawl-ref/source/dgn-shoals.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/dgn-shoals.cc b/crawl-ref/source/dgn-shoals.cc index 0215afd81f..a3a2b12ea9 100644 --- a/crawl-ref/source/dgn-shoals.cc +++ b/crawl-ref/source/dgn-shoals.cc @@ -561,10 +561,11 @@ static bool _shoals_tide_sweep_items_clear(coord_def c) return true; const coord_def target(_shoals_escape_place_from(c, false)); - if (target.origin()) - return false; - - move_item_stack_to_grid(c, target); + // Don't abort tide entry because of items. If we can't sweep the + // item clear here, let dungeon_terrain_changed teleport the item + // to the nearest safe square. + if (!target.origin()) + move_item_stack_to_grid(c, target); return true; } -- cgit v1.2.3-54-g00ecf From 1f325d8c00116cee89417c201127b5a9731e0d42 Mon Sep 17 00:00:00 2001 From: Johanna Ploog Date: Mon, 28 Dec 2009 22:49:23 +0100 Subject: Add purge's ballistomycete tiles, thanks! --- crawl-ref/source/mon-abil.cc | 2 -- crawl-ref/source/rltiles/dc-mon.txt | 2 ++ .../source/rltiles/dc-mon/active_ballistomycete.png | Bin 0 -> 3597 bytes crawl-ref/source/rltiles/dc-mon/ballistomycete.png | Bin 0 -> 3523 bytes crawl-ref/source/tilepick.cc | 4 +++- 5 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 crawl-ref/source/rltiles/dc-mon/active_ballistomycete.png create mode 100644 crawl-ref/source/rltiles/dc-mon/ballistomycete.png (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/mon-abil.cc b/crawl-ref/source/mon-abil.cc index 5325d3f27b..b64ffcf9b4 100644 --- a/crawl-ref/source/mon-abil.cc +++ b/crawl-ref/source/mon-abil.cc @@ -1499,7 +1499,5 @@ void activate_ballistomycetes( monsters * monster, const coord_def & origin) } if (you.see_cell(origin) && found_others) - { mprf("You feel the ballistomycetes will spawn a replacement spore."); - } } diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt index 3a48f1307d..aba512e4b7 100644 --- a/crawl-ref/source/rltiles/dc-mon.txt +++ b/crawl-ref/source/rltiles/dc-mon.txt @@ -532,6 +532,8 @@ deep_elf_master_archer MONS_DEEP_ELF_MASTER_ARCHER ## Fungi ('f') fungus MONS_TOADSTOOL fungus MONS_FUNGUS +ballistomycete MONS_BALLISTOMYCETE_INACTIVE +active_ballistomycete MONS_BALLISTOMYCETE_ACTIVE wandering_mushroom MONS_WANDERING_MUSHROOM ## Goblins ('g') diff --git a/crawl-ref/source/rltiles/dc-mon/active_ballistomycete.png b/crawl-ref/source/rltiles/dc-mon/active_ballistomycete.png new file mode 100644 index 0000000000..bd01f0470c Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/active_ballistomycete.png differ diff --git a/crawl-ref/source/rltiles/dc-mon/ballistomycete.png b/crawl-ref/source/rltiles/dc-mon/ballistomycete.png new file mode 100644 index 0000000000..69bff99afd Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/ballistomycete.png differ diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc index 34cbf7eb7f..28c94a04b0 100644 --- a/crawl-ref/source/tilepick.cc +++ b/crawl-ref/source/tilepick.cc @@ -199,7 +199,9 @@ int tileidx_monster_base(const monsters *mon, bool detected) // fungi ('f') case MONS_BALLISTOMYCETE: - return TILEP_MONS_FUNGUS; + if (!detected && mon->has_ench(ENCH_SPORE_PRODUCTION)) + return TILEP_MONS_BALLISTOMYCETE_ACTIVE; + return TILEP_MONS_BALLISTOMYCETE_INACTIVE; case MONS_TOADSTOOL: return TILEP_MONS_TOADSTOOL; case MONS_FUNGUS: -- cgit v1.2.3-54-g00ecf From de9c9716195ef407110fb99bdeed1c3b85e13385 Mon Sep 17 00:00:00 2001 From: Johanna Ploog Date: Mon, 28 Dec 2009 23:01:06 +0100 Subject: Move plant and fungi tiles into their own subdirectory. This seems sensible especially considering we'll also be adding tiles for the toadstool, bush, burning bush, and possibly more plants. That said, the folder could use some renaming itself. Not very creative right now. --- crawl-ref/source/rltiles/dc-mon.txt | 2 ++ .../source/rltiles/dc-mon/active_ballistomycete.png | Bin 3597 -> 0 bytes crawl-ref/source/rltiles/dc-mon/ballistomycete.png | Bin 3523 -> 0 bytes .../dc-mon/fungi_plants/active_ballistomycete.png | Bin 0 -> 3597 bytes .../rltiles/dc-mon/fungi_plants/ballistomycete.png | Bin 0 -> 3523 bytes crawl-ref/source/rltiles/dc-mon/fungi_plants/fungus.png | Bin 0 -> 828 bytes .../source/rltiles/dc-mon/fungi_plants/oklob_plant.png | Bin 0 -> 1037 bytes crawl-ref/source/rltiles/dc-mon/fungi_plants/plant.png | Bin 0 -> 673 bytes .../source/rltiles/dc-mon/fungi_plants/plant_crypt.png | Bin 0 -> 1539 bytes .../rltiles/dc-mon/fungi_plants/wandering_mushroom.png | Bin 0 -> 879 bytes crawl-ref/source/rltiles/dc-mon/fungus.png | Bin 828 -> 0 bytes crawl-ref/source/rltiles/dc-mon/oklob_plant.png | Bin 1037 -> 0 bytes crawl-ref/source/rltiles/dc-mon/plant.png | Bin 673 -> 0 bytes crawl-ref/source/rltiles/dc-mon/plant_crypt.png | Bin 1539 -> 0 bytes crawl-ref/source/rltiles/dc-mon/wandering_mushroom.png | Bin 879 -> 0 bytes 15 files changed, 2 insertions(+) delete mode 100644 crawl-ref/source/rltiles/dc-mon/active_ballistomycete.png delete mode 100644 crawl-ref/source/rltiles/dc-mon/ballistomycete.png create mode 100644 crawl-ref/source/rltiles/dc-mon/fungi_plants/active_ballistomycete.png create mode 100644 crawl-ref/source/rltiles/dc-mon/fungi_plants/ballistomycete.png create mode 100644 crawl-ref/source/rltiles/dc-mon/fungi_plants/fungus.png create mode 100644 crawl-ref/source/rltiles/dc-mon/fungi_plants/oklob_plant.png create mode 100644 crawl-ref/source/rltiles/dc-mon/fungi_plants/plant.png create mode 100644 crawl-ref/source/rltiles/dc-mon/fungi_plants/plant_crypt.png create mode 100644 crawl-ref/source/rltiles/dc-mon/fungi_plants/wandering_mushroom.png delete mode 100644 crawl-ref/source/rltiles/dc-mon/fungus.png delete mode 100644 crawl-ref/source/rltiles/dc-mon/oklob_plant.png delete mode 100644 crawl-ref/source/rltiles/dc-mon/plant.png delete mode 100644 crawl-ref/source/rltiles/dc-mon/plant_crypt.png delete mode 100644 crawl-ref/source/rltiles/dc-mon/wandering_mushroom.png (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt index aba512e4b7..dba205a119 100644 --- a/crawl-ref/source/rltiles/dc-mon.txt +++ b/crawl-ref/source/rltiles/dc-mon.txt @@ -465,6 +465,7 @@ two_headed_ogre MONS_TWO_HEADED_OGRE ogre_mage MONS_OGRE_MAGE ## Plants ('P') +%sdir dc-mon/fungi_plants plant MONS_PLANT plant_crypt MONS_WITHERED_PLANT oklob_plant MONS_OKLOB_PLANT @@ -530,6 +531,7 @@ deep_elf_blademaster MONS_DEEP_ELF_BLADEMASTER deep_elf_master_archer MONS_DEEP_ELF_MASTER_ARCHER ## Fungi ('f') +%sdir dc-mon/fungi_plants fungus MONS_TOADSTOOL fungus MONS_FUNGUS ballistomycete MONS_BALLISTOMYCETE_INACTIVE diff --git a/crawl-ref/source/rltiles/dc-mon/active_ballistomycete.png b/crawl-ref/source/rltiles/dc-mon/active_ballistomycete.png deleted file mode 100644 index bd01f0470c..0000000000 Binary files a/crawl-ref/source/rltiles/dc-mon/active_ballistomycete.png and /dev/null differ diff --git a/crawl-ref/source/rltiles/dc-mon/ballistomycete.png b/crawl-ref/source/rltiles/dc-mon/ballistomycete.png deleted file mode 100644 index 69bff99afd..0000000000 Binary files a/crawl-ref/source/rltiles/dc-mon/ballistomycete.png and /dev/null differ diff --git a/crawl-ref/source/rltiles/dc-mon/fungi_plants/active_ballistomycete.png b/crawl-ref/source/rltiles/dc-mon/fungi_plants/active_ballistomycete.png new file mode 100644 index 0000000000..bd01f0470c Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/fungi_plants/active_ballistomycete.png differ diff --git a/crawl-ref/source/rltiles/dc-mon/fungi_plants/ballistomycete.png b/crawl-ref/source/rltiles/dc-mon/fungi_plants/ballistomycete.png new file mode 100644 index 0000000000..69bff99afd Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/fungi_plants/ballistomycete.png differ diff --git a/crawl-ref/source/rltiles/dc-mon/fungi_plants/fungus.png b/crawl-ref/source/rltiles/dc-mon/fungi_plants/fungus.png new file mode 100644 index 0000000000..75d0cd66ed Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/fungi_plants/fungus.png differ diff --git a/crawl-ref/source/rltiles/dc-mon/fungi_plants/oklob_plant.png b/crawl-ref/source/rltiles/dc-mon/fungi_plants/oklob_plant.png new file mode 100644 index 0000000000..4f0f0da6b2 Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/fungi_plants/oklob_plant.png differ diff --git a/crawl-ref/source/rltiles/dc-mon/fungi_plants/plant.png b/crawl-ref/source/rltiles/dc-mon/fungi_plants/plant.png new file mode 100644 index 0000000000..b3124b5cae Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/fungi_plants/plant.png differ diff --git a/crawl-ref/source/rltiles/dc-mon/fungi_plants/plant_crypt.png b/crawl-ref/source/rltiles/dc-mon/fungi_plants/plant_crypt.png new file mode 100644 index 0000000000..f17a501d4f Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/fungi_plants/plant_crypt.png differ diff --git a/crawl-ref/source/rltiles/dc-mon/fungi_plants/wandering_mushroom.png b/crawl-ref/source/rltiles/dc-mon/fungi_plants/wandering_mushroom.png new file mode 100644 index 0000000000..e8cff68b06 Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/fungi_plants/wandering_mushroom.png differ diff --git a/crawl-ref/source/rltiles/dc-mon/fungus.png b/crawl-ref/source/rltiles/dc-mon/fungus.png deleted file mode 100644 index 75d0cd66ed..0000000000 Binary files a/crawl-ref/source/rltiles/dc-mon/fungus.png and /dev/null differ diff --git a/crawl-ref/source/rltiles/dc-mon/oklob_plant.png b/crawl-ref/source/rltiles/dc-mon/oklob_plant.png deleted file mode 100644 index 4f0f0da6b2..0000000000 Binary files a/crawl-ref/source/rltiles/dc-mon/oklob_plant.png and /dev/null differ diff --git a/crawl-ref/source/rltiles/dc-mon/plant.png b/crawl-ref/source/rltiles/dc-mon/plant.png deleted file mode 100644 index b3124b5cae..0000000000 Binary files a/crawl-ref/source/rltiles/dc-mon/plant.png and /dev/null differ diff --git a/crawl-ref/source/rltiles/dc-mon/plant_crypt.png b/crawl-ref/source/rltiles/dc-mon/plant_crypt.png deleted file mode 100644 index f17a501d4f..0000000000 Binary files a/crawl-ref/source/rltiles/dc-mon/plant_crypt.png and /dev/null differ diff --git a/crawl-ref/source/rltiles/dc-mon/wandering_mushroom.png b/crawl-ref/source/rltiles/dc-mon/wandering_mushroom.png deleted file mode 100644 index e8cff68b06..0000000000 Binary files a/crawl-ref/source/rltiles/dc-mon/wandering_mushroom.png and /dev/null differ -- cgit v1.2.3-54-g00ecf From c3833168fc6d04fd6fc95e15e6fe7fca495710c7 Mon Sep 17 00:00:00 2001 From: Johanna Ploog Date: Tue, 29 Dec 2009 00:47:21 +0100 Subject: Add two placeholder tiles for trees. Crayon-style they're not strictly bad but I feel they don't fit the feel of the rest of the dungeon. Still, much better than error tiles. --- crawl-ref/source/rltiles/dc-dngn.txt | 3 +++ crawl-ref/source/rltiles/dc-dngn/wall/tree1.png | Bin 0 -> 827 bytes crawl-ref/source/rltiles/dc-dngn/wall/tree2.png | Bin 0 -> 870 bytes crawl-ref/source/tilepick.cc | 2 ++ 4 files changed, 5 insertions(+) create mode 100644 crawl-ref/source/rltiles/dc-dngn/wall/tree1.png create mode 100644 crawl-ref/source/rltiles/dc-dngn/wall/tree2.png (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/rltiles/dc-dngn.txt b/crawl-ref/source/rltiles/dc-dngn.txt index 53a5f1270a..6b0ca04184 100644 --- a/crawl-ref/source/rltiles/dc-dngn.txt +++ b/crawl-ref/source/rltiles/dc-dngn.txt @@ -875,6 +875,9 @@ wall/dngn_green_crystal_wall DNGN_GREEN_CRYSTAL_WALL DNGN_CRYSTAL DNGN_CRYSTAL_G %repeat DNGN_CRYSTAL DNGN_CRYSTAL_WHITE %resetcol +wall/tree1 DNGN_TREE +wall/tree2 + ## doors dngn_detected_secret_door DNGN_DETECTED_SECRET_DOOR dngn_closed_door DNGN_CLOSED_DOOR diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/tree1.png b/crawl-ref/source/rltiles/dc-dngn/wall/tree1.png new file mode 100644 index 0000000000..c5c69a2156 Binary files /dev/null and b/crawl-ref/source/rltiles/dc-dngn/wall/tree1.png differ diff --git a/crawl-ref/source/rltiles/dc-dngn/wall/tree2.png b/crawl-ref/source/rltiles/dc-dngn/wall/tree2.png new file mode 100644 index 0000000000..711742ee6b Binary files /dev/null and b/crawl-ref/source/rltiles/dc-dngn/wall/tree2.png differ diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc index 28c94a04b0..723dbc0d00 100644 --- a/crawl-ref/source/tilepick.cc +++ b/crawl-ref/source/tilepick.cc @@ -2474,6 +2474,8 @@ int tileidx_feature(dungeon_feature_type feat, int gx, int gy) return TILE_DNGN_ORCISH_IDOL; case DNGN_WAX_WALL: return TILE_DNGN_WAX_WALL; + case DNGN_TREES: + return TILE_DNGN_TREE; case DNGN_GRANITE_STATUE: return TILE_DNGN_GRANITE_STATUE; case DNGN_LAVA: -- cgit v1.2.3-54-g00ecf From 98949eaaf98a0980872a54fc3e565ba955e6d954 Mon Sep 17 00:00:00 2001 From: Johanna Ploog Date: Tue, 29 Dec 2009 00:48:35 +0100 Subject: Switch the order of trees and deep sea in enum.h, makes more sense. --- crawl-ref/source/enum.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 48bcb16db5..2db6cbe37d 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -993,10 +993,10 @@ enum dungeon_feature_type // Highest grid value which can't be reached through. DNGN_MAX_NONREACH = DNGN_CLEAR_PERMAROCK_WALL, - DNGN_TREES, DNGN_OPEN_SEA, // Shoals equivalent for permarock // Can be seen through and reached past. + DNGN_TREES, DNGN_ORCISH_IDOL = 15, DNGN_GRANITE_STATUE = 21, // 21 DNGN_STATUE_RESERVED, -- cgit v1.2.3-54-g00ecf From 7bf522535b9a6f90f8272043cb7af97b7c7cc2bf Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Mon, 28 Dec 2009 15:45:19 -0800 Subject: Fulsome Distillation tweaks (dshaligram) Fulsome no longer uses power; the chance for self-affliction is removed. The typo which caused contaminated corpses to make poison is gone. --- crawl-ref/source/spells4.cc | 22 ++-------------------- crawl-ref/source/spl-data.h | 2 +- 2 files changed, 3 insertions(+), 21 deletions(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/spells4.cc b/crawl-ref/source/spells4.cc index 9d1c969ea6..7da3ee46af 100644 --- a/crawl-ref/source/spells4.cc +++ b/crawl-ref/source/spells4.cc @@ -1177,10 +1177,8 @@ bool cast_evaporate(int pow, bolt& beem, int pot_idx) // Producing helpful potions would break game balance here... // and producing more than one potion from a corpse, or not // using up the corpse might also lead to game balance problems. - bwr -void cast_fulsome_distillation(int pow) +void cast_fulsome_distillation(int /*pow*/) { - pow = std::min(100, pow); - int corpse = -1; // Search items at the player's location for corpses. @@ -1206,39 +1204,32 @@ void cast_fulsome_distillation(int pow) } potion_type pot_type = POT_WATER; - int difficulty = 0; switch (mons_corpse_effect(mitm[corpse].plus)) { case CE_CLEAN: pot_type = POT_WATER; - difficulty = 0; break; case CE_CONTAMINATED: pot_type = (mons_weight(mitm[corpse].plus) >= 900) - ? POT_DEGENERATION : POT_POISON; - difficulty = (pot_type == POT_DEGENERATION) ? 100 : 40; + ? POT_DEGENERATION : POT_CONFUSION; break; case CE_POISONOUS: pot_type = POT_POISON; - difficulty = 50; break; case CE_MUTAGEN_RANDOM: case CE_MUTAGEN_GOOD: // unused case CE_RANDOM: // unused pot_type = POT_MUTATION; - // this is a potentially good potion, so it never tries to get into you - difficulty = 0; break; case CE_MUTAGEN_BAD: // unused case CE_ROTTEN: // actually this only occurs via mangling case CE_HCL: // necrophage pot_type = POT_DECAY; - difficulty = 100; break; case CE_NOCORPSE: // shouldn't occur @@ -1250,12 +1241,10 @@ void cast_fulsome_distillation(int pow) { case MONS_RED_WASP: // paralysis attack pot_type = POT_PARALYSIS; - difficulty = 100; break; case MONS_YELLOW_WASP: // slowing attack pot_type = POT_SLOWING; - difficulty = 50; break; default: @@ -1271,7 +1260,6 @@ void cast_fulsome_distillation(int pow) smc->attack[nattk].flavour == AF_POISON_STR) { pot_type = POT_STRONG_POISON; - difficulty = 75; } } @@ -1292,12 +1280,6 @@ void cast_fulsome_distillation(int pow) mprf("You extract %s from the corpse.", mitm[corpse].name(DESC_NOCAP_A).c_str()); - if (random2(difficulty + 1) > pow) - { - mpr("Oops! You accidentally inhaled the fumes!"); - potion_effect(pot_type, 40); - } - // Try to move the potion to the player (for convenience). if (move_item_to_player(corpse, 1) != 1) mpr("Unfortunately, you can't carry it right now!"); diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h index 303306cc83..61b544f635 100644 --- a/crawl-ref/source/spl-data.h +++ b/crawl-ref/source/spl-data.h @@ -927,7 +927,7 @@ SPTYP_TRANSMUTATION | SPTYP_NECROMANCY, SPFLAG_NONE, 1, - 100, + 0, -1, -1, 0, NULL, -- cgit v1.2.3-54-g00ecf From 468eddcb57d95046afb8fb35ac22172d1bf73c66 Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Mon, 28 Dec 2009 15:52:16 -0800 Subject: Update Fulsome description --- crawl-ref/source/dat/descript/spells.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crawl-ref/source') diff --git a/crawl-ref/source/dat/descript/spells.txt b/crawl-ref/source/dat/descript/spells.txt index c79c9e1424..8e58527c87 100644 --- a/crawl-ref/source/dat/descript/spells.txt +++ b/crawl-ref/source/dat/descript/spells.txt @@ -280,7 +280,7 @@ This spell will freeze ammunition held by the caster. Such missiles will shatter %%%% Fulsome Distillation -This spell extracts the vile and poisonous essences from a corpse. A rotten corpse may produce a stronger potion. You probably don't want to drink the results. +This spell extracts the vile and poisonous essences from a corpse. You probably don't want to drink the results. The type of potion produced corresponds roughly to the effects of eating said corpse. %%%% Major Healing -- cgit v1.2.3-54-g00ecf