|
From: <gi...@cr...> - 2013-07-30 18:05:29
|
via 28e5a1086e4a3bdcfda6a4e7c88e584a734ea0e1 (commit)
via f6483b8b966e8e45d0d62e1811e6313c6ae37b8c (commit)
via 466a8a3a5aa86f8cf9afcfdfe00699b41b7cff86 (commit)
via afaf2447a597d0a469300887fdd2da55cd85165d (commit)
via 386241e36da94c6b83ab55b0f31cf561abd5aa82 (commit)
via b82d040b36774ce3617ad7200f5e99d719e965b8 (commit)
via 98f3daa54eafb848a96e25075ade55771ead222c (commit)
via 5f5b25ea26f4c4c8e51ff2b2536da260946813e5 (commit)
via 95d56f92b418c0efeb1b9762d4d6294f6a4a78cf (commit)
via 74529203639d14b9d6ed874934a89abf0f4ba8b4 (commit)
via f504fa9b7ab7bb75df1f3dab6e2f4354ee32e9d3 (commit)
via 6f007d93b95d43b90f54cc4f2030438eb87cef91 (commit)
via 20a8841cf3646f604d16340aa879a271bd81c914 (commit)
from fd23a319141c1d6c4da4375ef1ad913ab0119c79 (commit)
-----------------------------------------------------------------------
commit 28e5a1086e4a3bdcfda6a4e7c88e584a734ea0e1
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 15:05:06 2013 -0230
Make spirit wolves invalid polymorph targets
commit f6483b8b966e8e45d0d62e1811e6313c6ae37b8c
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 14:56:20 2013 -0230
Remove Olgreb's Toxic Radiance from the effect list for Venom cards
It could be a bit obnoxious repeatedly (and sometimes heavily) poisoning
yourself this way, especially earlier on (and was still a 50% chance even
with plain venom cards). Admittedly sting/venom bolt/poison arrow is
a touch boring, but no moreso than several other damaging cards.
commit 466a8a3a5aa86f8cf9afcfdfe00699b41b7cff86
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 14:54:05 2013 -0230
Slightly adjust some Forest spawn chances
commit afaf2447a597d0a469300887fdd2da55cd85165d
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 14:49:19 2013 -0230
Buff Thorn Hunters
Increase defenses, HD, and melee damage.
For something intended to be one of the more 'noticable' monsters in
the branch, they have been distinctly ineffective at actual threatening
players. Perhaps this is still too conservative, but we'll see.
commit 386241e36da94c6b83ab55b0f31cf561abd5aa82
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 14:46:26 2013 -0230
Slightly increase chance of Spriggan Berserkers having an antimagic weapon
commit b82d040b36774ce3617ad7200f5e99d719e965b8
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 14:43:46 2013 -0230
Remove deflect missiles from Tengu Reavers, nudge a little deeper in D
commit 98f3daa54eafb848a96e25075ade55771ead222c
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 14:43:04 2013 -0230
Reduce elemental wellspring hp slightly, reduce chance of summoning elementals
commit 5f5b25ea26f4c4c8e51ff2b2536da260946813e5
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 14:39:54 2013 -0230
Boost statue form's defenses for gargoyles
Even with these considerable boosts, it's dubious whether it's actually
more durable than their base form, due to rendering their already bad EV
even worse (and melding body armour), but this should hopefully at least
make it somewhat competitive in that regard.
Though to be honest, I'd be just as happy to disable statue form for
gargoyles, since they're kind of already a living statue (even if one that
lacks the strong offensive boost it gives). I mentioned this before, but I
seem to recall opposition.
commit 95d56f92b418c0efeb1b9762d4d6294f6a4a78cf
Author: DracoOmega <dra...@li...>
Date: Tue Jul 30 14:22:48 2013 -0230
Adjust Gargoyle defenses
While the massive racial AC bonus looks extremely good on paper (perhaps
even too large), in practice it still leaves them a lot squishier than one
might expect. In fact, when compared to other -2 hp races, even tengu (a
race hardly known for its durability) with similar xp investment in defensive
skills and dex, take less average melee damage than gargoyles in a variety of
situations beyond earlygame, and kobolds take noticably less than even that.
This is especially true in lighter armour, or against hard-hitting ranged
attacks (which tend to be the most dangerous things anyway).
Inversely, gargoyles start with an almost silly level of AC for the first few
floors, making them an incredibly durable start (which then becomes unusually
fragile a little later on).
This commit adjusts the AC curve, making them have noticably less AC at the
start of the game, though eventually catching up to the same levels by the end.
In addition, gargoyles gain a noticable passive GDR bonus, intended to shore up
their durability against common melee threats (where they really ought not to
be taking more damage than tengu, in my opinion). Their greater resiliance in
melee is likely offset, compared to other low hp races, by their increased
vulnerability to hard-hitting ranged attacks, but I think this could be a viable
niche.
commit 74529203639d14b9d6ed874934a89abf0f4ba8b4
Author: DracoOmega <dra...@li...>
Date: Mon Jul 29 21:59:56 2013 -0230
Thin giant fireflies a little from some early vaults
commit f504fa9b7ab7bb75df1f3dab6e2f4354ee32e9d3
Author: DracoOmega <dra...@li...>
Date: Mon Jul 29 19:26:42 2013 -0230
Increase spriggan rider hp, raise EV to match that of their mounts
Note that this still leaves them with noticably lower EV than other
spriggans.
commit 6f007d93b95d43b90f54cc4f2030438eb87cef91
Author: DracoOmega <dra...@li...>
Date: Mon Jul 29 19:17:36 2013 -0230
Buff Giant Fireflies
Giant fireflies now gain the ability to flash a signal beacon. This is
somewhat similar to generating noise, though with a few significant
differences. Firstly, it alerts only creatures which are already awake,
with the exception of other fireflies and spriggan riders, who are keyed
to be alerted by these signals. Secondly, the signal gives more precise
locational information than noise does, making it easier for monsters to
hone in on the specific position it occurs.
Also, double their pathetic melee damage and increase hp somewhat.
The hope is that this will make the fact that spriggan riders sometimes
leave a firefly upon death ocassionally meaningful (as opposed to
completely meaningless at present)
commit 20a8841cf3646f604d16340aa879a271bd81c914
Author: DracoOmega <dra...@li...>
Date: Mon Jul 29 16:32:30 2013 -0230
Change how Spirit Wolves work somewhat
While the very low per-turn chance of the wolves using their spirit howl
was intended to mean that a majority of packs would not use it at all
before being killed, in practice the randomness involved meant that
sometimes a player could be afflicted by the status several encounters in
a row. Worse, for a player with good defenses, the wolf attacks presented
little danger, but still took a very long time to stop. In general, this
could lead to them being an irritating encounter that nonetheless presented
little danger. This commit is aimed at trying to address this.
Spirit howl now lasts less time, but the spawning of packs within it happens
somewhat more rapidly. Spirit wolves themselves hit noticably harder and are
a little more accurate.
The wolves attracted by spirit howl no longer count as summons, but are
finite in number across all uses of spirit howl (ie: they represent the
rest of the spirit pack, attracted from outside the waking world). This has
a couple ramifications: there is now some reward for actually fighting them
instead of running away until they time out (yet one that cannot be farmed)
and (significantly) there is an upper limit on how many times the player has
to deal with this effect, instead of potentially having to deal with it over
and over and over again as one clears Forest.
Wolves within sight of the player no longer disappear when the howl ends,
though those out of view do (and are thus eligable to be called again by a
subsequent spirit howl), providing another tangible strategic advantage to
killing them instead of running away until they stop showing up.
Finally, there is also a lengthly cooldown after the effect ends before any
wolf can use it again (so there is no longer any chance for one to howl the
moment the first one expires)
Overall, the aim is that spirit howl occur less times in total, take up less
of the player's overall time, be a little less annoying in some ways, and also
provide more actual threat when it occurs.
This commit also fixes multiple bugs with the original implementation:
non-hostile wolves will no longer howl, placement will more properly respect
LoS instead of sometimes spawning them immediately in view, and some
pathfinding bugs that could cause wolves to not properly pursue the player
have been fixed.
-----------------------------------------------------------------------
Summary of changes:
crawl-ref/source/dactions.cc | 14 ++++
crawl-ref/source/dat/des/branches/lair.des | 4 +-
crawl-ref/source/dat/des/builder/food.des | 2 +-
crawl-ref/source/dat/descript/monsters.txt | 4 +-
crawl-ref/source/decks.cc | 9 ---
crawl-ref/source/enum.h | 1 +
crawl-ref/source/main.cc | 17 ++---
crawl-ref/source/mon-abil.cc | 96 ++++++++++++++++++++++++---
crawl-ref/source/mon-data.h | 26 ++++----
crawl-ref/source/mon-gear.cc | 2 +-
crawl-ref/source/mon-pick-data.h | 24 ++++----
crawl-ref/source/mon-place.cc | 2 +-
crawl-ref/source/mon-spll.h | 4 +-
crawl-ref/source/mutation.cc | 3 +-
crawl-ref/source/output.cc | 3 +-
crawl-ref/source/player.cc | 15 +++-
16 files changed, 157 insertions(+), 69 deletions(-)
diff --git a/crawl-ref/source/dactions.cc b/crawl-ref/source/dactions.cc
index a4359a8..eb6428b 100644
--- a/crawl-ref/source/dactions.cc
+++ b/crawl-ref/source/dactions.cc
@@ -119,6 +119,10 @@ bool mons_matches_daction(const monster* mon, daction_type act)
&& (mon->props.exists("kirke_band")
|| mon->props.exists(ORIG_MONSTER_KEY)));
+ case DACT_END_SPIRIT_HOWL:
+ return (mon->type == MONS_SPIRIT_WOLF
+ && mon->props.exists("howl_called"));
+
default:
return false;
}
@@ -220,6 +224,15 @@ void apply_daction_to_mons(monster* mon, daction_type act, bool local)
_daction_hog_to_human(mon);
break;
+ case DACT_END_SPIRIT_HOWL:
+ if (!you.can_see(mon))
+ {
+ // This wolf is available to be called again later
+ you.props["spirit_wolf_total"].get_int()++;
+ monster_die(mon, KILL_RESET, NON_MONSTER);
+ }
+ break;
+
// The other dactions do not affect monsters directly.
default:
break;
@@ -248,6 +261,7 @@ static void _apply_daction(daction_type act)
case DACT_HOLY_PETS_GO_NEUTRAL:
case DACT_PIKEL_SLAVES:
case DACT_KIRKE_HOGS:
+ case DACT_END_SPIRIT_HOWL:
for (monster_iterator mi; mi; ++mi)
{
if (mons_matches_daction(*mi, act))
diff --git a/crawl-ref/source/dat/des/branches/lair.des b/crawl-ref/source/dat/des/branches/lair.des
index cd631cb..e2eb416 100644
--- a/crawl-ref/source/dat/des/branches/lair.des
+++ b/crawl-ref/source/dat/des/branches/lair.des
@@ -1944,8 +1944,8 @@ MAP
@........@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
..PP.XX..Px..xxxxxxxxxxxxxxxxxX4x9xxxxx
..PP.XX..PPxxxxxxxxXX88Xxxxxx4%..xxxxxx
- ...x.....PPP.xxxxxP...88XxxxX44..Xxxxxx
- ..XxX..X.....xxxxxX....88xxx244..xxxxxx
+ ...x.....PPP.xxxxxP....8XxxxX44..Xxxxxx
+ ..XxX..X.....xxxxxX.....8xxx244..xxxxxx
.Pxxxxx.x...xxxxxxx....%XxxxxX41.4xxxxx
xxccccxx..XPPxxxxxP11.XPxxxxxxxXP.xxxxx
Xxcc$$ccxxXxx..xxxxxX1..xXxxxxXxx.1xxxxx
diff --git a/crawl-ref/source/dat/des/builder/food.des b/crawl-ref/source/dat/des/builder/food.des
index 03ff453..2146942 100644
--- a/crawl-ref/source/dat/des/builder/food.des
+++ b/crawl-ref/source/dat/des/builder/food.des
@@ -123,7 +123,7 @@ NAME: hangedman_pestilent_swarm
DEPTH: D:8-14
CHANCE: 100% (D:14), 15%
TAGS: uniq_second_food extra chance_second_food no_monster_gen patrolling
-MONS: spider / giant firefly / brain worm w:5 / goliath beetle / giant centipede
+MONS: spider / brain worm w:5 / goliath beetle / giant centipede
MONS: yellow wasp w:7 / rock worm w:5 / boring beetle / soldier ant w:13 / giant slug
ITEM: cheese q:3 / beef jerky q:3 / lemon q:3, potion of porridge, honeycomb q:6
MAP
diff --git a/crawl-ref/source/dat/descript/monsters.txt b/crawl-ref/source/dat/descript/monsters.txt
index 42f0c57..d1a3255 100644
--- a/crawl-ref/source/dat/descript/monsters.txt
+++ b/crawl-ref/source/dat/descript/monsters.txt
@@ -1866,8 +1866,8 @@ giant eyeball:quote
giant firefly
Unlike its mundane counterparts that are merely half an inch big, this enormous
-flying bug is large enough to be ridden by some spriggans. Its glow, though, is
-faint enough to be hardly visible.
+flying bug is large enough to be ridden by some spriggans. When threatened, it
+can flash warning signals to its kin (and anyone else close enough to observe).
%%%%
giant frog
diff --git a/crawl-ref/source/decks.cc b/crawl-ref/source/decks.cc
index 84d8a04..81679a5 100644
--- a/crawl-ref/source/decks.cc
+++ b/crawl-ref/source/decks.cc
@@ -3016,15 +3016,6 @@ void card_effect(card_type which_card, deck_rarity_type rarity,
case CARD_MERCENARY: _mercenary_card(power, rarity); break;
case CARD_VENOM:
- if (coinflip())
- {
- mprf("You have %s %s.", participle, card_name(which_card));
- your_spells(SPELL_OLGREBS_TOXIC_RADIANCE, random2(power/4), false);
- }
- else
- _damaging_card(which_card, power, rarity, flags & CFLAG_DEALT);
- break;
-
case CARD_VITRIOL:
case CARD_FLAME:
case CARD_FROST:
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index f55134e..a08c774 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -3808,6 +3808,7 @@ enum daction_type
DACT_SLIME_NEW_ATTEMPT,
#endif
DACT_KIRKE_HOGS,
+ DACT_END_SPIRIT_HOWL,
NUM_DACTIONS,
};
diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc
index 3325112..56ff4d8 100644
--- a/crawl-ref/source/main.cc
+++ b/crawl-ref/source/main.cc
@@ -47,6 +47,7 @@
#include "coord.h"
#include "coordit.h"
#include "crash.h"
+#include "dactions.h"
#include "database.h"
#include "dbg-scan.h"
#include "dbg-util.h"
@@ -2992,12 +2993,12 @@ static void _decrement_durations()
{
if (you.props.exists("next_spirit_pack")
&& you.elapsed_time >= you.props["next_spirit_pack"].get_int()
- && you.duration[DUR_SPIRIT_HOWL] > 150)
+ && you.duration[DUR_SPIRIT_HOWL] > 185)
{
int num = spawn_spirit_pack(&you);
- you.props["next_spirit_pack"].get_int() = you.elapsed_time + 50
- + random2(80)
- + (num * num) * 8;
+ you.props["next_spirit_pack"].get_int() = you.elapsed_time + 35
+ + random2(60)
+ + (num * num) * 7;
// If we somehow couldn't spawn any, wait longer than normal
// (probably the player is in some place where spawning more isn't
@@ -3008,11 +3009,9 @@ static void _decrement_durations()
if (_decrement_a_duration(DUR_SPIRIT_HOWL, delay))
{
mpr("The howling abruptly ceases.", MSGCH_DURATION);
- for (monster_iterator mi; mi; ++mi)
- {
- if (mi->type == MONS_SPIRIT_WOLF && mi->has_ench(ENCH_HAUNTING))
- mi->del_ench(ENCH_ABJ);
- }
+ add_daction(DACT_END_SPIRIT_HOWL);
+ you.props["spirit_howl_cooldown"].get_int() =
+ you.elapsed_time + random_range(1500, 3000);
}
}
diff --git a/crawl-ref/source/mon-abil.cc b/crawl-ref/source/mon-abil.cc
index 7014c60..81d6759 100644
--- a/crawl-ref/source/mon-abil.cc
+++ b/crawl-ref/source/mon-abil.cc
@@ -34,6 +34,7 @@
#include "mon-cast.h"
#include "mon-chimera.h"
#include "mon-iter.h"
+#include "mon-pathfind.h"
#include "mon-place.h"
#include "mon-project.h"
#include "mon-util.h"
@@ -4142,14 +4143,30 @@ bool mon_special_ability(monster* mons, bolt & beem)
case MONS_SPIRIT_WOLF:
{
- if (!you.duration[DUR_SPIRIT_HOWL] && !mons->is_summoned()
- && (one_chance_in(45)
- || (mons->hit_points < mons->max_hit_points / 3 && one_chance_in(9))))
+ if (!you.duration[DUR_SPIRIT_HOWL] && !mons->is_summoned() && !mons->wont_attack()
+ && (one_chance_in(35)
+ || (mons->hit_points < mons->max_hit_points / 3 && one_chance_in(7))))
{
+ // Take a little breather between howl effects
+ if (you.props.exists("spirit_howl_cooldown")
+ && you.props["spirit_howl_cooldown"].get_int() > you.elapsed_time)
+ {
+ break;
+ }
+
+ // Set total number of wolves in the pack, if we haven't already
+ if (!you.props.exists("spirit_wolf_total"))
+ you.props["spirit_wolf_total"].get_int() = random_range(12, 20);
+
+ // Too few wolves to bother summoning
+ if (you.props["spirit_wolf_total"].get_int() < 3)
+ break;
+
simple_monster_message(mons, " howls for its pack!", MSGCH_MONSTER_SPELL);
- you.duration[DUR_SPIRIT_HOWL] = 600 + random2(350);
+ you.duration[DUR_SPIRIT_HOWL] = 450 + random2(350);
spawn_spirit_pack(&you);
- you.props["next_spirit_pack"].get_int() = you.elapsed_time + 50 + random2(100);
+ you.props["next_spirit_pack"].get_int() = you.elapsed_time + 40 + random2(85);
+ used = true;
}
}
break;
@@ -4233,6 +4250,60 @@ bool mon_special_ability(monster* mons, bolt & beem)
}
break;
+ case MONS_FIREFLY:
+ if (one_chance_in(7) && !mons->friendly() && !mons->confused())
+ {
+ // In the odd case we're invisible somehow
+ mons->del_ench(ENCH_INVIS);
+ simple_monster_message(mons, " flashes a warning beacon!",
+ MSGCH_MONSTER_SPELL);
+
+ circle_def range(mons->pos(), 13, C_ROUND);
+ for (monster_iterator mi(&range); mi; ++mi)
+ {
+ // Fireflies (and their riders) are attuned enough to the light
+ // to wake in response, while other creatures sleep through it
+ if (mi->asleep() && (mi->type == MONS_FIREFLY
+ || mi->type == MONS_SPRIGGAN_RIDER))
+ {
+ behaviour_event(*mi, ME_DISTURB, mons->get_foe(), mons->pos());
+
+ // Give riders a chance to shout and alert their companions
+ // (this won't otherwise happen if the player is still out
+ // of their sight)
+ if (mi->behaviour == BEH_WANDER && coinflip())
+ handle_monster_shouts(*mi);
+ }
+
+ if (!mi->asleep())
+ {
+ // We consider the firefly's foe to be the 'source' of the
+ // light here so that monsters wandering around for the player
+ // will be alerted by fireflies signaling in response to the
+ // player, but ignore signals in response to other monsters
+ // if they're already in pursuit of the player.
+ behaviour_event(*mi, ME_ALERT, mons->get_foe(), mons->pos());
+ if (mi->target == mons->pos())
+ {
+ monster_pathfind mp;
+ if (mp.init_pathfind(*mi, mons->pos()))
+ {
+ mi->travel_path = mp.calc_waypoints();
+ if (!mi->travel_path.empty())
+ {
+ mi->target = mi->travel_path[0];
+ mi->travel_target = MTRAV_PATROL;
+ }
+ }
+ }
+ }
+ }
+
+ if (!you.see_cell(mons->pos()) && range.contains(you.pos()))
+ mpr("You see a distant pulse of light.");
+ }
+ break;
+
default:
break;
}
@@ -4762,27 +4833,30 @@ int spawn_spirit_pack(const actor* target)
coord_def base_spot;
int tries = 0;
- while (tries < 10 && base_spot.origin()
- && !cell_see_cell(target->pos(), base_spot, LOS_DEFAULT))
+ while (tries < 10 && base_spot.origin())
{
find_habitable_spot_near(area, MONS_SPIRIT_WOLF, 6, false, base_spot);
+ if (cell_see_cell(target->pos(), base_spot, LOS_DEFAULT))
+ base_spot.reset();
++tries;
}
if (base_spot.origin())
continue;
- int wolves = 1 + random2(3);
+ int wolves = min(1 + random2(3), you.props["spirit_wolf_total"].get_int());
int created = 0;
for (int i = 0; i < wolves; ++i)
{
if (monster *mons = create_monster(
- mgen_data(MONS_SPIRIT_WOLF,BEH_HOSTILE, NULL,
- 5, SPELL_NO_SPELL, area,
+ mgen_data(MONS_SPIRIT_WOLF, BEH_HOSTILE, NULL,
+ 0, SPELL_NO_SPELL, base_spot,
target->mindex(), MG_FORCE_BEH)))
{
mons->add_ench(mon_enchant(ENCH_HAUNTING, 1, target, INFINITE_DURATION));
- mons->foe = target->mindex();
+ mons->props["howl_called"].get_bool() = true;
+ mons->behaviour = BEH_SEEK;
++created;
+ you.props["spirit_wolf_total"].get_int()--;
}
}
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index 6ddf2e5..51fcda9 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -995,11 +995,11 @@ static monsterentry mondata[] = {
{
MONS_SPIRIT_WOLF, 'h', LIGHTMAGENTA, "spirit wolf",
- M_SENSE_INVIS | M_BLOOD_SCENT | M_PHASE_SHIFT | M_GLOWS_LIGHT,
+ M_SENSE_INVIS | M_BLOOD_SCENT | M_PHASE_SHIFT | M_GLOWS_LIGHT | M_NO_POLY_TO,
mrd(MR_RES_NEG | MR_RES_POISON, 3),
- 450, 6, MONS_SPIRIT_WOLF, MONS_WOLF, MH_NATURAL, -5,
- { {AT_BITE, AF_PLAIN, 23}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 11, 3, 3, 0 },
+ 450, 3, MONS_SPIRIT_WOLF, MONS_WOLF, MH_NATURAL, -5,
+ { {AT_BITE, AF_PLAIN, 27}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ { 13, 3, 2, 0 },
5, 19, MST_NO_SPELLS, CE_NOCORPSE, Z_SMALL, S_BARK,
I_ANIMAL, HT_LAND, FL_NONE, 15, DEFAULT_ENERGY,
MONUSE_NOTHING, MONEAT_NOTHING, SIZE_MEDIUM
@@ -1109,8 +1109,8 @@ static monsterentry mondata[] = {
MR_VUL_POISON, // the mount
200, 10, MONS_SPRIGGAN, MONS_SPRIGGAN, MH_NATURAL, -7,
{ {AT_HIT, AF_PLAIN, 21}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 11, 3, 2, 0 },
- 1, 16, MST_NO_SPELLS, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT,
+ { 11, 4, 3, 0 },
+ 1, 18, MST_NO_SPELLS, CE_CONTAMINATED, Z_NOZOMBIE, S_SHOUT,
I_HIGH, HT_LAND, FL_WINGED, 16, DEFAULT_ENERGY,
MONUSE_WEAPONS_ARMOUR, MONEAT_NOTHING, SIZE_SMALL
},
@@ -1231,8 +1231,8 @@ static monsterentry mondata[] = {
M_NO_SKELETON,
MR_VUL_POISON,
200, 10, MONS_FIREFLY, MONS_FIREFLY, MH_NATURAL, -7,
- { {AT_BITE, AF_PLAIN, 8}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 7, 2, 2, 0 },
+ { {AT_BITE, AF_PLAIN, 17}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
+ { 7, 3, 3, 0 },
1, 18, MST_NO_SPELLS, CE_CONTAMINATED, Z_SMALL, S_SILENT,
I_INSECT, HT_LAND, FL_WINGED, 16, DEFAULT_ENERGY,
MONUSE_NOTHING, MONEAT_NOTHING, SIZE_TINY
@@ -3120,7 +3120,7 @@ static monsterentry mondata[] = {
MR_RES_POISON | MR_RES_ELEC,
0, 15, MONS_ELEMENTAL, MONS_ELEMENTAL_WELLSPRING, MH_NONLIVING, MAG_IMMUNE,
{ AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
- { 15, 4, 4, 0 },
+ { 15, 3, 4, 0 },
8, 8, MST_ELEMENTAL_WELLSPRING, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT,
I_PLANT, HT_WATER, FL_NONE, 10, DEFAULT_ENERGY,
MONUSE_NOTHING, MONEAT_NOTHING, SIZE_BIG
@@ -3383,7 +3383,7 @@ static monsterentry mondata[] = {
{
MONS_TENGU_REAVER, 'H', LIGHTMAGENTA, "tengu reaver",
M_FIGHTER | M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD
- | M_SPEAKS | M_DEFLECT_MISSILES | M_HYBRID,
+ | M_SPEAKS | M_HYBRID,
MR_NO_FLAGS,
550, 13, MONS_TENGU, MONS_TENGU, MH_NATURAL, -3,
{ {AT_HIT, AF_PLAIN, 27}, {AT_PECK, AF_PLAIN, 11}, {AT_CLAW, AF_PLAIN, 11},
@@ -3886,10 +3886,10 @@ static monsterentry mondata[] = {
M_SENSE_INVIS | M_SPELLCASTER | M_FAKE_SPELLS,
MR_RES_POISON | MR_VUL_FIRE,
0, 14, MONS_PLANT, MONS_THORN_HUNTER, MH_PLANT, MAG_IMMUNE,
- { {AT_HIT, AF_PLAIN, 22}, {AT_HIT, AF_PLAIN, 16}, AT_NO_ATK,
+ { {AT_HIT, AF_PLAIN, 27}, {AT_HIT, AF_PLAIN, 23}, AT_NO_ATK,
AT_NO_ATK },
- { 14, 4, 5, 0 },
- 8, 8, MST_THORN_HUNTER, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT,
+ { 16, 4, 5, 0 },
+ 11, 9, MST_THORN_HUNTER, CE_NOCORPSE, Z_NOZOMBIE, S_SILENT,
I_ANIMAL, HT_LAND, FL_NONE, 12, DEFAULT_ENERGY,
MONUSE_NOTHING, MONEAT_NOTHING, SIZE_LARGE
},
diff --git a/crawl-ref/source/mon-gear.cc b/crawl-ref/source/mon-gear.cc
index d27e96c..0eedb8c 100644
--- a/crawl-ref/source/mon-gear.cc
+++ b/crawl-ref/source/mon-gear.cc
@@ -1390,7 +1390,7 @@ static item_make_species_type _give_weapon(monster* mon, int level,
WPN_MACE,
WPN_SHORT_SWORD,
-1);
- if (one_chance_in(5))
+ if (one_chance_in(4))
{
force_item = true;
set_item_ego_type(item, OBJ_WEAPONS, SPWPN_ANTIMAGIC);
diff --git a/crawl-ref/source/mon-pick-data.h b/crawl-ref/source/mon-pick-data.h
index 36bac58..bd0aad6 100644
--- a/crawl-ref/source/mon-pick-data.h
+++ b/crawl-ref/source/mon-pick-data.h
@@ -151,7 +151,7 @@ static const pop_entry pop_d[] =
{ 22, 30, 136, SEMI, MONS_FROST_GIANT },
{ 22, 30, 136, SEMI, MONS_DEEP_TROLL_EARTH_MAGE },
{ 22, 30, 136, SEMI, MONS_DEEP_TROLL_SHAMAN },
- { 22, 30, 215, SEMI, MONS_TENGU_REAVER },
+ { 24, 30, 215, SEMI, MONS_TENGU_REAVER },
{ 23, 29, 25, PEAK, MONS_HELL_KNIGHT },
{ 22, 30, 66, PEAK, MONS_LICH },
{ 23, 31, 89, PEAK, MONS_STORM_DRAGON },
@@ -831,20 +831,20 @@ static const pop_entry pop_zot[] =
static const pop_entry pop_forest[] =
{ // Forest
- { 1, 5, 140, DOWN, MONS_WOLF },
- { 1, 6, 85, DOWN, MONS_GRIZZLY_BEAR },
- { 1, 5, 45, DOWN, MONS_BLACK_BEAR },
- { 1, 5, 60, FLAT, MONS_YAK },
- { 1, 7, 100, SEMI, MONS_DIRE_ELEPHANT },
+ { 1, 5, 120, DOWN, MONS_WOLF },
+ { 1, 6, 75, DOWN, MONS_GRIZZLY_BEAR },
+ { 1, 5, 35, DOWN, MONS_BLACK_BEAR },
+ { 1, 5, 50, FLAT, MONS_YAK },
+ { 1, 7, 115, SEMI, MONS_DIRE_ELEPHANT },
{ 1, 5, 15, DOWN, MONS_YELLOW_WASP },
- { 1, 5, 25, FLAT, MONS_RED_WASP },
+ { 1, 5, 30, FLAT, MONS_RED_WASP },
{ 1, 9, 100, SEMI, MONS_FIREFLY },
{ 1, 6, 75, DOWN, MONS_REDBACK },
{ 2, 7, 35, SEMI, MONS_WOLF_SPIDER },
{ 1, 9, 75, SEMI, MONS_OKLOB_PLANT },
{ 1, 5, 170, FLAT, MONS_DRYAD },
{ 1, 5, 120, FLAT, MONS_WIND_DRAKE },
- { -1, 5, 70, SEMI, MONS_FAUN },
+ { -1, 5, 75, SEMI, MONS_FAUN },
{ 0, 9, 105, SEMI, MONS_SATYR },
{ 2, 8, 55, SEMI, MONS_SPRIGGAN_DRUID },
{ 1, 6, 155, SEMI, MONS_SPRIGGAN_RIDER },
@@ -853,14 +853,14 @@ static const pop_entry pop_forest[] =
{ 1, 9, 235, SEMI, MONS_SPRIGGAN_BERSERKER },
{ 1, 8, 155, SEMI, MONS_SPRIGGAN_AIR_MAGE },
{ 3, 5, 115, UP, MONS_SPRIGGAN_DEFENDER },
- { 1, 7, 65, PEAK, MONS_APIS },
+ { 1, 7, 75, PEAK, MONS_APIS },
{ 2, 8, 180, SEMI, MONS_ANCIENT_BEAR },
{ 2, 7, 165, SEMI, MONS_TREANT },
- { 1, 5, 120, FLAT, MONS_SPIRIT_WOLF },
- { 1, 6, 60, SEMI, MONS_IRON_TROLL },
+ { 2, 5, 110, FLAT, MONS_SPIRIT_WOLF },
+ { 1, 6, 70, SEMI, MONS_IRON_TROLL },
{ 1, 6, 80, SEMI, MONS_MINOTAUR },
{ 1, 6, 60, SEMI, MONS_ANACONDA },
- { 1, 9, 85, PEAK, MONS_THORN_HUNTER },
+ { 1, 9, 100, PEAK, MONS_THORN_HUNTER },
{ 1, 5, 145, FLAT, MONS_BUTTERFLY },
{ 0,0,0,FLAT,MONS_0 }
};
diff --git a/crawl-ref/source/mon-place.cc b/crawl-ref/source/mon-place.cc
index 7fda5d1..d21293e 100644
--- a/crawl-ref/source/mon-place.cc
+++ b/crawl-ref/source/mon-place.cc
@@ -2600,7 +2600,7 @@ static band_type _choose_band(monster_type mon_type, int &band_size,
break;
case MONS_TREANT:
- if (one_chance_in(4))
+ if (one_chance_in(3))
{
band = BAND_SPRIGGAN_DRUID;
band_size = 1;
diff --git a/crawl-ref/source/mon-spll.h b/crawl-ref/source/mon-spll.h
index 0869f4a..61e0fc7 100644
--- a/crawl-ref/source/mon-spll.h
+++ b/crawl-ref/source/mon-spll.h
@@ -2147,9 +2147,9 @@
{
SPELL_PRIMAL_WAVE,
SPELL_PRIMAL_WAVE,
- SPELL_NO_SPELL,
SPELL_WATER_ELEMENTALS,
- SPELL_NO_SPELL,
+ SPELL_PRIMAL_WAVE,
+ SPELL_PRIMAL_WAVE,
SPELL_NO_SPELL
}
},
diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc
index b501842..d2b6742 100644
--- a/crawl-ref/source/mutation.cc
+++ b/crawl-ref/source/mutation.cc
@@ -607,7 +607,8 @@ string describe_mutations(bool center_title)
result += "You can fly continuously.\n";
ostringstream num;
- num << 4 + you.experience_level * 3 / 5;
+ num << 2 + you.experience_level * 2 / 5
+ + max(0, you.experience_level - 7) * 2 / 5;
const string acstr = "Your stone body is very resilient (AC +"
+ num.str() + ").";
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index fa0983a..fff749b 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -2650,7 +2650,8 @@ static string _status_mut_abilities(int sw)
break;
case SP_GARGOYLE:
- AC_change += 4 + you.experience_level * 3 / 5;
+ AC_change += 2 + you.experience_level * 2 / 5
+ + max(0, you.experience_level - 7) * 2 / 5;
break;
default:
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index c0a372a..a25e7f2 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -6430,9 +6430,10 @@ int player::armour_class() const
break;
case SP_GARGOYLE:
- AC += 400 + 100 * experience_level * 3 / 5; // max 20
+ AC += 200 + 100 * experience_level * 2 / 5 // max 20
+ + 100 * (max(0, experience_level - 7) * 2 / 5);
if (form == TRAN_STATUE)
- AC += 500 + skill(SK_EARTH_MAGIC, 50);
+ AC += 1300 + skill(SK_EARTH_MAGIC, 50);
break;
default:
@@ -6536,7 +6537,8 @@ int player::gdr_perc() const
case TRAN_DRAGON:
return 34; // base AC 8
case TRAN_STATUE:
- return 39; // like plate (AC 10)
+ return species == SP_GARGOYLE ? 62
+ : 39; // like plate (AC 10)
case TRAN_TREE:
return 48;
default:
@@ -6549,7 +6551,12 @@ int player::gdr_perc() const
return 0;
const int body_base_AC = property(*body_armour, PARM_AC);
- return 14 * sqrt(max(body_base_AC - 2, 0));
+ int gdr = 14 * sqrt(max(body_base_AC - 2, 0));
+
+ if (species == SP_GARGOYLE)
+ gdr += 24 - (gdr/6);
+
+ return gdr;
}
int player::melee_evasion(const actor *act, ev_ignore_type evit) const
--
Dungeon Crawl Stone Soup
|