summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/abl-show.cc2
-rw-r--r--crawl-ref/source/dat/descript/gods.txt4
-rw-r--r--crawl-ref/source/godwrath.cc56
-rw-r--r--crawl-ref/source/religion.cc6
-rw-r--r--crawl-ref/source/spells3.cc35
-rw-r--r--crawl-ref/source/spl-cast.cc13
6 files changed, 74 insertions, 42 deletions
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc
index 9f28da6ad2..ffd06ae434 100644
--- a/crawl-ref/source/abl-show.cc
+++ b/crawl-ref/source/abl-show.cc
@@ -234,7 +234,7 @@ static const ability_def Ability_List[] =
8, 0, 150, 4, ABFLAG_NONE },
// Kikubaaqudgha
- { ABIL_KIKU_RECEIVE_CORPSES, "Receive Corpses", 5, 0, 1000, 2, ABFLAG_NONE },
+ { ABIL_KIKU_RECEIVE_CORPSES, "Receive Corpses", 3, 0, 50, 2, ABFLAG_NONE },
// Yredelemnul
{ ABIL_YRED_INJURY_MIRROR, "Injury Mirror", 0, 0, 0, 0, ABFLAG_PIETY },
diff --git a/crawl-ref/source/dat/descript/gods.txt b/crawl-ref/source/dat/descript/gods.txt
index 93c80756e1..835ca99e3a 100644
--- a/crawl-ref/source/dat/descript/gods.txt
+++ b/crawl-ref/source/dat/descript/gods.txt
@@ -24,7 +24,7 @@ The Shining One is a powerful deity on a crusade against all evil. Followers and
%%%%
Kikubaaqudgha
-Kikubaaqudgha is a terrible Demon-God, served by those who seek knowledge of the powers of death. Followers gain special powers over the undead, and especially favoured servants can call on mighty demons to slay their foes. Kikubaaqudgha is evil, and requires the deaths of living creatures as often as possible, but is not interested in the offering of corpses.
+Kikubaaqudgha is a terrible Demon-God, served by those who wish to indulge in the powers of death. Kikubaaqudgha is evil, and requires the deaths of living creatures and demons as often as possible.
%%%%
Yredelemnul
@@ -92,7 +92,7 @@ Followers of the Shining One are surrounded by a halo that reveals their enemies
%%%%
Kikubaaqudgha powers
-Kikubaaqudgha offers the power to recall your undead followers to your near surroundings, will protect you against side effects of necromantic magic, and allow you to permanently enslave undead creatures. Eventually, you can summon an emissary of death to fight with you.
+Kikubaaqudgha will send corpses to followers, enhance servants' necromantic prowess with gifts of spellbooks, and imbue their weapons with pain. Especially fervent followers can protect themselves from torment, or even invoke it themselves by offering a cadaver to Kikubaaqudgha.
%%%%
Yredelemnul powers
diff --git a/crawl-ref/source/godwrath.cc b/crawl-ref/source/godwrath.cc
index c8b3e6bcae..ab8c93fab1 100644
--- a/crawl-ref/source/godwrath.cc
+++ b/crawl-ref/source/godwrath.cc
@@ -439,36 +439,48 @@ static bool _kikubaaqudgha_retribution()
// death/necromancy theme
const god_type god = GOD_KIKUBAAQUDGHA;
- if (random2(you.experience_level) > 7 && !one_chance_in(5))
+ god_speaks(god,
+ coinflip() ? "You hear Kikubaaqudgha cackling."
+ : "Kikubaaqudgha's malice focuses upon you.");
+
+ if (random2(you.experience_level) > 4)
{
- bool success = false;
- int how_many = 1 + (you.experience_level / 5) + random2(3);
+ // Either zombies, or corpse rot + skeletons
+ receive_corpses(you.experience_level * 4, you.pos());
- for (; how_many > 0; --how_many)
+ if (coinflip())
+ corpse_rot();
+ }
+
+ if (coinflip())
+ {
+ // necromancy miscast, 20% chance of additional miscast
+ do
{
- if (create_monster(
- mgen_data::hostile_at(MONS_REAPER,
- "the malice of Kikubaaqudgha",
- true, 0, 0, you.pos(), 0, god)) != -1)
+ MiscastEffect(&you, -god, SPTYP_NECROMANCY,
+ 5 + you.experience_level,
+ random2avg(88, 3), "the malice of Kikubaaqudgha");
+ } while (one_chance_in(5));
+
+ } else if (one_chance_in(10)) {
+ // torment, or 3 necromancy miscasts
+ if (!player_res_torment(false))
+ torment(TORMENT_KIKUBAAQUDGHA, you.pos());
+ else
+ {
+ for (int i = 0; i < 3; i++)
{
- success = true;
+ MiscastEffect(&you, -god, SPTYP_NECROMANCY,
+ 5 + you.experience_level,
+ random2avg(88, 3), "the malice of Kikubaaqudgha");
}
}
-
- if (success)
- simple_god_message(" unleashes Death upon you!", god);
- else
- god_speaks(god, "Death has been delayed... for now.");
- }
- else
- {
- god_speaks(god,
- coinflip() ? "You hear Kikubaaqudgha cackling."
- : "Kikubaaqudgha's malice focuses upon you.");
- MiscastEffect(&you, -god, SPTYP_NECROMANCY, 5 + you.experience_level,
- random2avg(88, 3), "the malice of Kikubaaqudgha");
}
+ // Every act of retribution causes corpses in view to rise against you.
+ animate_dead(&you, 1 + random2(3), BEH_HOSTILE, MHITYOU, 0,
+ "the malice of Kikubaaqudgha");
+
return (true);
}
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index 8ff2dbcc04..7d74b1ac43 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -680,6 +680,11 @@ std::string get_god_likes(god_type which_god, bool verbose)
likes.push_back("you or your god-given allies kill demons");
break;
+ case GOD_KIKUBAAQUDGHA:
+ likes.push_back("you kill demons");
+ likes.push_back("your undead slaves kill demons");
+ break;
+
case GOD_BEOGH:
likes.push_back("you or your allied orcs kill demons");
break;
@@ -2963,6 +2968,7 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
case GOD_OKAWARU:
case GOD_MAKHLEB:
case GOD_TROG:
+ case GOD_KIKUBAAQUDGHA:
case GOD_BEOGH:
if (god_hates_attacking_friend(you.religion, victim))
break;
diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc
index 92c97eee8d..253efe2494 100644
--- a/crawl-ref/source/spells3.cc
+++ b/crawl-ref/source/spells3.cc
@@ -653,13 +653,13 @@ bool receive_corpses(int pow, coord_def where)
#endif
// Kiku gives branch-appropriate corpses (like shadow creatures).
- int expected_extra_corpses = pow / 36; // 1 at 0 Inv, 7 at 7 Inv.
- int corpse_delivery_radius = 3;
+ int expected_extra_corpses = 3 + pow / 18; // 3 at 0 Inv, 9 at 27 Inv.
+ int corpse_delivery_radius = 1;
- // We should get the same number of corpses in a hallway as in an
- // open room.
+ // We should get the same number of corpses
+ // in a hallway as in an open room.
int spaces_for_corpses = 0;
- for (radius_iterator ri(where, corpse_delivery_radius, C_SQUARE,
+ for (radius_iterator ri(where, corpse_delivery_radius, C_ROUND,
&you.get_los(), true);
ri; ++ri)
{
@@ -668,17 +668,14 @@ bool receive_corpses(int pow, coord_def where)
}
int percent_chance_a_square_receives_extra_corpse = // can be > 100
- (int)(((float)expected_extra_corpses) / ((float)spaces_for_corpses)
- * 100.0);
+ int(float(expected_extra_corpses) / float(spaces_for_corpses) * 100.0);
int corpses_generated = 0;
- // XXX: Is it intentional that this loop is different from the one above?
for (radius_iterator ri(where, corpse_delivery_radius, C_ROUND,
&you.get_los());
ri; ++ri)
{
-
bool square_is_walkable = mons_class_can_pass(MONS_HUMAN, grd(*ri));
bool square_is_player_square = (*ri == where);
bool square_gets_corpse =
@@ -690,7 +687,7 @@ bool receive_corpses(int pow, coord_def where)
corpses_generated++;
- // Find an appropriate monster corpse.
+ // Find an appropriate monster corpse for level and power.
monster_type mon_type = MONS_PROGRAM_BUG;
int adjusted_power = 0;
for (int i = 0; i < 200 && !mons_class_can_be_zombified(mon_type); ++i)
@@ -720,13 +717,11 @@ bool receive_corpses(int pow, coord_def where)
ASSERT(valid_corpse >= 0);
- // Higher power means fresher corpses. One out of ten corpses
- // will always be rotten. (Perhaps this should be different for
- // ghouls.)
+ // Higher piety means fresher corpses. One out of ten corpses
+ // will always be rotten.
int rottedness = 200 -
- (!one_chance_in(10) ? random2(175 - pow)
+ (!one_chance_in(10) ? random2(200 - you.piety)
: random2(100 + random2(75)));
-
mitm[index_of_corpse_created].special = rottedness;
// Place the corpse.
@@ -735,14 +730,20 @@ bool receive_corpses(int pow, coord_def where)
if (corpses_generated)
{
- simple_god_message(corpses_generated > 1 ? " delivers you corpses!"
+ if (you.religion == GOD_KIKUBAAQUDGHA)
+ {
+ simple_god_message(corpses_generated > 1 ? " delivers you corpses!"
: " delivers you a corpse!");
+ }
maybe_update_stashes();
return (true);
}
else
{
- simple_god_message(" can find no living being to slaughter for you!");
+ if (you.religion == GOD_KIKUBAAQUDGHA)
+ {
+ simple_god_message(" can find no cadavers for you!");
+ }
return (false);
}
}
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index 8a06bc341e..5d441a8956 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -1258,6 +1258,19 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail)
// is a player controllable act. - bwr
if (one_chance_in(12))
dec_penance(GOD_SIF_MUNA, 1);
+
+ } else if (spell_typematch(spell, SPTYP_NECROMANCY) &&
+ you.religion != GOD_KIKUBAAQUDGHA &&
+ you.penance[GOD_KIKUBAAQUDGHA] && one_chance_in(20))
+ {
+ // And you thought you'd Necromutate your way out of penance...
+ god_speaks(GOD_KIKUBAAQUDGHA,
+ "Kikubaaqudgha does not allow the disloyal to dabble in death!");
+
+ // The spell still goes through, but you get a miscast anyway.
+ MiscastEffect(&you, -god, SPTYP_NECROMANCY,
+ (you.experience_level / 2) + (spell_mana(spell) * 2),
+ random2avg(88, 3), "the malice of Kikubaaqudgha");
}
const int spfail_chance = spell_fail(spell);