summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Noonan <steven@uplinklabs.net>2009-10-20 16:16:59 -0700
committerSteven Noonan <steven@uplinklabs.net>2009-10-20 16:46:47 -0700
commit4862ac7ba83dc160fdc3f5f4639e79d24eb88630 (patch)
tree76b2c4954424aed30bf99b9957ce8026d4fecfbc
parentd6ea58e6f13e85f4121ab488c09721f6d388a977 (diff)
downloadcrawl-ref-4862ac7ba83dc160fdc3f5f4639e79d24eb88630.tar.gz
crawl-ref-4862ac7ba83dc160fdc3f5f4639e79d24eb88630.zip
gods: added "Chronos", the slow god
Signed-off-by: Brendan Hickey <brendan@bhickey.net> Acked-by: Steven Noonan <steven@uplinklabs.net>
-rw-r--r--crawl-ref/source/abl-show.cc53
-rw-r--r--crawl-ref/source/acr.cc3
-rw-r--r--crawl-ref/source/artefact.cc7
-rw-r--r--crawl-ref/source/artefact.h5
-rw-r--r--crawl-ref/source/beam.cc20
-rw-r--r--crawl-ref/source/dat/descript/gods.txt8
-rw-r--r--crawl-ref/source/describe.cc6
-rw-r--r--crawl-ref/source/effects.cc7
-rw-r--r--crawl-ref/source/enum.h16
-rw-r--r--crawl-ref/source/message.cc4
-rw-r--r--crawl-ref/source/mon-util.cc7
-rw-r--r--crawl-ref/source/mon-util.h8
-rw-r--r--crawl-ref/source/monstuff.cc6
-rw-r--r--crawl-ref/source/player.cc26
-rw-r--r--crawl-ref/source/religion.cc127
-rw-r--r--crawl-ref/source/religion.h3
-rw-r--r--crawl-ref/source/spells4.cc26
-rw-r--r--crawl-ref/source/spells4.h3
18 files changed, 300 insertions, 35 deletions
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc
index 7490f9b65d..822b9dcc46 100644
--- a/crawl-ref/source/abl-show.cc
+++ b/crawl-ref/source/abl-show.cc
@@ -147,6 +147,8 @@ ability_type god_abilities[MAX_NUM_GODS][MAX_GOD_ABILITIES] =
// Feawn
{ABIL_FEAWN_SUNLIGHT, ABIL_FEAWN_PLANT_RING, ABIL_FEAWN_RAIN,
ABIL_FEAWN_SPAWN_SPORES, ABIL_FEAWN_EVOLUTION },
+ // Chronos
+ { ABIL_CHRONOS_PONDEROUSIFY, ABIL_CHRONOS_TIME_STEP, ABIL_CHRONOS_TIME_BEND, ABIL_CHRONOS_SLOUCH },
};
// The description screen was way out of date with the actual costs.
@@ -334,6 +336,11 @@ static const ability_def Ability_List[] =
{ ABIL_FEAWN_SPAWN_SPORES, "Reproduction", 4, 0, 50, 2, ABFLAG_NONE},
{ ABIL_FEAWN_EVOLUTION, "Evolution", 4, 0, 0, 2, ABFLAG_FRUIT},
+ // Chronos
+ { ABIL_CHRONOS_PONDEROUSIFY, "Make Ponderous", 1, 0, 0, 0, ABFLAG_NONE },
+ { ABIL_CHRONOS_TIME_STEP, "Step From Time", 1, 0, 0, 0, ABFLAG_NONE },
+ { ABIL_CHRONOS_TIME_BEND, "Bend Time", 1, 0, 0, 0, ABFLAG_NONE },
+ { ABIL_CHRONOS_SLOUCH, "Ruinous Time", 1, 0, 0, 0, ABFLAG_NONE },
{ ABIL_HARM_PROTECTION, "Protection From Harm", 0, 0, 0, 0, ABFLAG_NONE },
{ ABIL_HARM_PROTECTION_II, "Reliable Protection From Harm",
@@ -809,6 +816,15 @@ static talent _get_talent(ability_type ability, bool check_confused)
failure = 50 - (you.piety / 20) - (5 * you.skills[SK_EVOCATIONS]);
break;
+ case ABIL_CHRONOS_PONDEROUSIFY:
+ case ABIL_CHRONOS_TIME_STEP:
+ case ABIL_CHRONOS_TIME_BEND:
+ case ABIL_CHRONOS_SLOUCH:
+ invoc = true;
+ perfect = true;
+ failure = 0;
+ break;
+
case ABIL_RENOUNCE_RELIGION:
invoc = true;
perfect = true;
@@ -2073,6 +2089,43 @@ static bool _do_ability(const ability_def& abil)
// Activated via prayer elsewhere.
break;
+ case ABIL_CHRONOS_PONDEROUSIFY:
+ mprf(MSGCH_DIAGNOSTICS, "Making something ponderous.");
+ ponderousify_armour();
+ break;
+
+ case ABIL_CHRONOS_TIME_STEP:
+ mpr("You step out of the flow of time.");
+ break;
+
+ case ABIL_CHRONOS_TIME_BEND:
+ {
+ mpr("The flow of time bends around you.");
+
+ // TODO perhaps make power dependent on invocation?
+ // if so, this spell must train invocations too
+ // currently, has one-size-fits-all power level and duration,
+ // as if a wand of slow monster was zapped at each target
+ for ( adjacent_iterator ai; ai; ++ai )
+ {
+ // Tile occupied by monster
+ monsters* mon = monster_at(*ai);
+ if(mon != NULL) {
+ mprf(MSGCH_GOD, "%s rebukes %s.",
+ god_name(you.religion).c_str(),
+ mon->name(DESC_NOCAP_THE).c_str());
+ do_slow_monster(mon, KC_YOU);
+ }
+ }
+ break;
+ }
+ case ABIL_CHRONOS_SLOUCH:
+ mpr("You can feel time thicken.");
+ mprf(MSGCH_GOD, "your speed is %d", player_movement_speed());
+ chronos_slouch(0); //TODO make pow not a dummy value.
+ break;
+
+
case ABIL_RENOUNCE_RELIGION:
if (yesno("Really renounce your faith, foregoing its fabulous benefits?",
false, 'n')
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc
index 443da14ec2..16124258df 100644
--- a/crawl-ref/source/acr.cc
+++ b/crawl-ref/source/acr.cc
@@ -391,6 +391,9 @@ static void _god_greeting_message(bool game_start)
case GOD_FEAWN:
simple_god_message(" says: Spread life and death.");
break;
+ case GOD_CHRONOS:
+ simple_god_message(" says: Take it easy.");
+ break;
case GOD_NO_GOD:
case NUM_GODS:
diff --git a/crawl-ref/source/artefact.cc b/crawl-ref/source/artefact.cc
index 96b03437da..12fb20f74c 100644
--- a/crawl-ref/source/artefact.cc
+++ b/crawl-ref/source/artefact.cc
@@ -28,13 +28,6 @@
#include "stuff.h"
#include "view.h" // Elemental colours for unrandarts
-#define KNOWN_PROPS_KEY "artefact_known_props"
-#define ARTEFACT_PROPS_KEY "artefact_props"
-#define ARTEFACT_NAME_KEY "artefact_name"
-#define ARTEFACT_APPEAR_KEY "artefact_appearance"
-
-static int _artefact_num_props( const artefact_properties_t &proprt );
-
// The initial generation of a randart is very simple - it occurs in
// dungeon.cc and consists of giving it a few random things - plus &
// plus2 mainly.
diff --git a/crawl-ref/source/artefact.h b/crawl-ref/source/artefact.h
index cd1b89980b..a336fc60d9 100644
--- a/crawl-ref/source/artefact.h
+++ b/crawl-ref/source/artefact.h
@@ -20,6 +20,11 @@ class bolt;
// Reserving the upper bits for later expansion/versioning.
#define RANDART_SEED_MASK 0x00ffffff
+#define KNOWN_PROPS_KEY "artefact_known_props"
+#define ARTEFACT_PROPS_KEY "artefact_props"
+#define ARTEFACT_NAME_KEY "artefact_name"
+#define ARTEFACT_APPEAR_KEY "artefact_appearance"
+
enum unrand_special_type
{
UNRANDSPEC_EITHER,
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 28f181a08b..ed597780e5 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -5096,25 +5096,7 @@ mon_resist_type bolt::apply_enchantment_to_monster(monsters* mon)
return (MON_UNAFFECTED);
case BEAM_SLOW:
- // Try to remove haste, if monster is hasted.
- if (mon->del_ench(ENCH_HASTE, true))
- {
- if (simple_monster_message(mon, " is no longer moving quickly."))
- obvious_effect = true;
- return (MON_AFFECTED);
- }
-
- // Not hasted, slow it.
- if (!mon->has_ench(ENCH_SLOW)
- && !mons_is_stationary(mon)
- && mon->add_ench(mon_enchant(ENCH_SLOW, 0, whose_kill())))
- {
- if (!mons_is_paralysed(mon) && !mons_is_petrified(mon)
- && simple_monster_message(mon, " seems to slow down."))
- {
- obvious_effect = true;
- }
- }
+ obvious_effect = do_slow_monster(mon, whose_kill());
return (MON_AFFECTED);
case BEAM_HASTE:
diff --git a/crawl-ref/source/dat/descript/gods.txt b/crawl-ref/source/dat/descript/gods.txt
index e0d7018b00..420f185387 100644
--- a/crawl-ref/source/dat/descript/gods.txt
+++ b/crawl-ref/source/dat/descript/gods.txt
@@ -78,6 +78,10 @@ Feawn
Feawn is the god of plant and fungal life.
%%%%
+Chronos
+
+Chronos is a god who meditates on the mystery of time. Those who choose to follow his path will learn to step outside the flow of time, punish those who are too hasty, force creatures to move more slowly, and bless their weapons in his name.
+%%%%
Zin powers
Zin grants followers the ability to preach to the unenlightened masses. With sufficient piety, a starving follower can pray for nutrition. Later, followers will gain powers to purify and strengthen their bodies, and can eventually find temporary safety in a divine refuge. As piety grows, followers will be protected from mutations. Apart from that, Zin may occasionally directly intervene to save a follower's life.
@@ -136,3 +140,7 @@ Feawn powers
Feawn encourages followers to promote the growth of plant life.
%%%%
+Chronos powers
+
+Followers are rewarded for spending time resting in the dungeon, moving slowly, and killing creatures which are faster than they are. Moving too quickly or traveling instantaneously are frowned upon. He rewards his faithful with a slowed metabolism and the power to slow other creatures and harm those who move more quickly than you do.
+%%%%
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index 73e490690d..2d666d6152 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -3294,7 +3294,11 @@ const char *divine_title[NUM_GODS][8] =
// progression is generally from nature lover to walking disaster.
// -cao
{"Walking Fertiliser", "Green %s", "Photosynthesist", "Planter",
- "Nimbus", "Sporadic Warrior", "Green Death", "Force of Nature"}
+ "Nimbus", "Sporadic Warrior", "Green Death", "Force of Nature"},
+
+ // Chronos -- slow theme
+ {"Chrononaut", "Slackmaster", "Time Lord", "Watchdog",
+ "Ticktocktomancer", "Just Fill in the Array", "The End All And Be All", "Alpha Omega"}
};
static int _piety_level()
diff --git a/crawl-ref/source/effects.cc b/crawl-ref/source/effects.cc
index 7542387230..fd5c9b0fc9 100644
--- a/crawl-ref/source/effects.cc
+++ b/crawl-ref/source/effects.cc
@@ -3620,7 +3620,12 @@ void handle_time(long time_delta)
}
else
{
- if (one_chance_in(30))
+ // If Chronos has slowed your biology, disease might
+ // not actually do anything.
+ if (one_chance_in(30)
+ && !(you.religion == GOD_CHRONOS
+ && piety_rank(you.piety) >= 1
+ && coinflip()))
{
mpr("Your disease is taking its toll.", MSGCH_WARN);
lose_stat(STAT_RANDOM, 1, false, "disease");
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 22e0b6e10d..8a0314955e 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -110,11 +110,15 @@ enum ability_type
ABIL_FEAWN_PLANT_RING,
ABIL_FEAWN_SPAWN_SPORES,
ABIL_FEAWN_EVOLUTION,
+ ABIL_CHRONOS_PONDEROUSIFY, // 250
+ ABIL_CHRONOS_TIME_STEP,
+ ABIL_CHRONOS_TIME_BEND,
+ ABIL_CHRONOS_SLOUCH,
- ABIL_TRAN_BAT = 250,
+ ABIL_TRAN_BAT = 260,
ABIL_HARM_PROTECTION,
- ABIL_HARM_PROTECTION_II, // 252
- ABIL_RENOUNCE_RELIGION = 260 // 260
+ ABIL_HARM_PROTECTION_II, // 262
+ ABIL_RENOUNCE_RELIGION = 270 // 270
};
enum activity_interrupt_type
@@ -750,6 +754,7 @@ enum conduct_type
DID_KILL_WIZARD,
DID_KILL_PRIEST,
DID_KILL_HOLY,
+ DID_KILL_FAST, // Chronos
DID_LIVING_KILLED_BY_UNDEAD_SLAVE,
DID_LIVING_KILLED_BY_SERVANT,
DID_UNDEAD_KILLED_BY_UNDEAD_SLAVE,
@@ -1149,7 +1154,8 @@ enum dungeon_feature_type
DNGN_ALTAR_BEOGH,
DNGN_ALTAR_JIYVA,
DNGN_ALTAR_FEAWN,
- DNGN_ALTAR_LAST_GOD = DNGN_ALTAR_FEAWN,
+ DNGN_ALTAR_CHRONOS,
+ DNGN_ALTAR_LAST_GOD = DNGN_ALTAR_CHRONOS,
DNGN_FOUNTAIN_BLUE = 200, // 200
DNGN_FOUNTAIN_SPARKLING, // aka 'Magic Fountain' {dlb}
@@ -1307,6 +1313,7 @@ enum enchant_type
ENCH_EAT_ITEMS,
ENCH_AQUATIC_LAND, // Water monsters lose hp while on land.
ENCH_SPORE_PRODUCTION, // 35
+ ENCH_SLOUCH,
// Update enchantment names in mon-util.cc when adding or removing
// enchantments.
@@ -1400,6 +1407,7 @@ enum god_type
GOD_BEOGH,
GOD_JIYVA, // 15
GOD_FEAWN,
+ GOD_CHRONOS,
NUM_GODS, // always after last god
GOD_RANDOM = 100,
diff --git a/crawl-ref/source/message.cc b/crawl-ref/source/message.cc
index f32f91903b..1bb4050dad 100644
--- a/crawl-ref/source/message.cc
+++ b/crawl-ref/source/message.cc
@@ -238,6 +238,10 @@ static char god_message_altar_colour( god_type god )
case GOD_LUGONU:
return (LIGHTRED);
+ /* FIXME: This isn't the final decision for this one. */
+ case GOD_CHRONOS:
+ return (DARKGREY);
+
case GOD_JIYVA:
return (coinflip() ? GREEN : LIGHTGREEN);
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 8be001c9fd..ae6af725e5 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -510,6 +510,10 @@ bool mons_is_stationary(const monsters *mon)
return (mons_class_is_stationary(mon->type));
}
+bool mons_is_fast(const monsters *mon){
+ return (mon->speed > 10);
+}
+
bool mons_is_insubstantial(int mc)
{
return (mons_class_flag(mc, M_INSUBSTANTIAL));
@@ -8558,7 +8562,8 @@ static const char *enchant_names[] =
"gloshifter", "shifter", "tp", "wary", "submerged",
"short-lived", "paralysis", "sick", "sleep", "fatigue", "held",
"blood-lust", "neutral", "petrifying", "petrified", "magic-vulnerable",
- "soul-ripe", "decay", "hungry", "flopping", "spore-producing", "bug"
+ "soul-ripe", "decay", "hungry", "flopping", "spore-producing",
+ "downtrodden", "bug"
};
static const char *_mons_enchantment_name(enchant_type ench)
diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h
index 9f8d86147e..b10f48312c 100644
--- a/crawl-ref/source/mon-util.h
+++ b/crawl-ref/source/mon-util.h
@@ -831,6 +831,14 @@ bool mons_class_is_confusable(int mc);
bool mons_class_is_slowable(int mc);
bool mons_class_is_stationary(int mc);
bool mons_is_stationary(const monsters *mon);
+
+// last updated 15jul2009 (bh)
+/* ***********************************************************************
+ * called from: monstuff
+ * *********************************************************************** */
+
+bool mons_is_fast( const monsters *mon );
+
bool mons_is_insubstantial(int mc);
bool mons_has_blood(int mc);
bool mons_is_submerged(const monsters *m);
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index c7f9bc0350..bfb56528c0 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -1540,6 +1540,12 @@ int monster_die(monsters *monster, killer_type killer,
did_god_conduct(DID_KILL_SLIME, monster->hit_dice,
true, monster);
}
+
+ // Chronos hates fast monsters
+ if( monster->speed > player_movement_speed()){
+ did_god_conduct(DID_KILL_FAST, monster->hit_dice,
+ true, monster);
+ }
}
// Divine health and mana restoration doesn't happen when
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index d4eb9ea2f5..fdd088790e 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -1196,6 +1196,13 @@ int player_hunger_rate(void)
if (you.duration[DUR_REGENERATION])
hunger += 4;
+ // If Chronos has slowed your life processes, there's a
+ // chance you'll hunger a bit less.
+ if (GOD_CHRONOS == you.religion
+ && piety_rank(you.piety) >= 1
+ && coinflip())
+ hunger--;
+
// Moved here from acr.cc... maintaining the >= 40 behaviour.
if (you.hunger >= 40)
{
@@ -5437,7 +5444,7 @@ bool curare_hits_player(int death_source, int amount)
if (player_res_asphyx())
{
- hurted = roll_dice(2, 6);
+ hurted = roll_dice(2, 6);
// Note that the hurtage is halved by poison resistance.
if (res_poison)
@@ -5482,6 +5489,14 @@ bool poison_player(int amount, bool force)
void dec_poison_player()
{
+ // If Chronos has slowed your life processes, there's a
+ // chance that your poison level is simply unaffected and
+ // you aren't hurt by poison.
+ if (GOD_CHRONOS == you.religion
+ && piety_rank(you.piety) >= 1
+ && coinflip())
+ return;
+
if (you.duration[DUR_POISONING] > 0)
{
if (x_chance_in_y(you.duration[DUR_POISONING], 5))
@@ -5745,6 +5760,15 @@ void dec_disease_player()
{
if (you.disease > 0)
{
+ // If Chronos has slowed your life processes, there's a
+ // chance that your disease level is unaffected.
+ if (GOD_CHRONOS == you.religion
+ && piety_rank(you.piety) >= 1
+ && coinflip())
+ {
+ return;
+ }
+
you.disease--;
// kobolds and regenerators recuperate quickly
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index baec478e9c..491461832f 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -32,6 +32,7 @@
#include "delay.h"
#include "describe.h"
#include "effects.h"
+#include "enum.h"
#include "fight.h"
#include "files.h"
#include "food.h"
@@ -297,6 +298,13 @@ const char* god_gain_power_messages[NUM_GODS][MAX_GOD_ABILITIES] =
"control the weather",
"spawn explosive spores",
"induce evolution"
+ },
+ // Chronos
+ { "make your items ponderous",
+ "Chronos slows your biology",
+ "",
+ "",
+ ""
}
};
@@ -397,6 +405,13 @@ const char* god_lose_power_messages[NUM_GODS][MAX_GOD_ABILITIES] =
"control the weather",
"spawn explosive spores",
"induce evolution"
+ },
+ // Chronos
+ { "make your items ponderous",
+ "Chronos slows your biology",
+ "",
+ "",
+ ""
}
};
@@ -554,7 +569,13 @@ std::string get_god_likes(god_type which_god, bool verbose)
case GOD_JIYVA:
snprintf(info, INFO_SIZE, "you sacrifice items%s",
verbose ? " by allowing slimes to consume them" : "");
+ likes.push_back(info);
+ break;
+ case GOD_CHRONOS:
+ snprintf(info, INFO_SIZE, "you kill fast things%s",
+ verbose ? ", relative to your current speed"
+ : "");
likes.push_back(info);
break;
@@ -2574,6 +2595,7 @@ std::string god_name(god_type which_god, bool long_name)
: god_name_jiyva(false));
}
case GOD_FEAWN: return (long_name ? "Feawn the Arboreal" : "Feawn");
+ case GOD_CHRONOS: return (long_name ? "Chronos the Contemplative" : "Chronos");
case GOD_XOM:
if (!long_name)
return "Xom";
@@ -3095,6 +3117,17 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
}
break;
+ case DID_KILL_FAST:
+ if (you.religion == GOD_CHRONOS
+ && !god_hates_attacking_friend(you.religion, victim))
+ {
+ simple_god_message(" appreciates the change of pace.");
+ retval = true;
+ if (random2(level+18) > 3)
+ piety_change = 1;
+ }
+ break;
+
// Note that holy deaths are special, they are always noticed...
// If you or any friendly kills one, you'll get the credit or
// the blame.
@@ -4867,6 +4900,36 @@ static bool _elyvilon_retribution()
return (true);
}
+static bool _chronos_retribution()
+{
+ // time god/slowness theme
+ const god_type god = GOD_CHRONOS;
+ simple_god_message(" bends time around you.", god);
+ switch (random2(5))
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ mpr("You lose track of time.");
+ you.put_to_sleep();
+ break;
+ case 4:
+ if (you.duration[DUR_SLOW] < 90)
+ {
+ dec_penance(god, 1);
+ mpr( "You feel the world leave you behind!", MSGCH_WARN );
+ you.duration[DUR_EXHAUSTED] = 100;
+ slow_player(100);
+ }
+ break;
+
+
+ }
+
+ return (true);
+}
+
static bool _makhleb_retribution()
{
// demonic servant theme
@@ -5627,6 +5690,7 @@ bool divine_retribution(god_type god)
case GOD_ELYVILON: do_more = _elyvilon_retribution(); break;
case GOD_JIYVA: do_more = _jiyva_retribution(); break;
case GOD_FEAWN: do_more = _feawn_retribution(); break;
+ case GOD_CHRONOS: do_more = _chronos_retribution(); break;
default:
#if DEBUG_DIAGNOSTICS || DEBUG_RELIGION
@@ -6930,6 +6994,66 @@ void excommunication(god_type new_god)
coord_def((int)new_god, old_piety));
}
+bool ponderousify_armour(){
+ int item_slot = -1;
+ do
+ {
+ if (item_slot == -1)
+ {
+ item_slot = prompt_invent_item("Make which item ponderous?", MT_INVLIST,
+ OSEL_ENCH_ARM, true, true, false);
+ }
+ if (prompt_failed(item_slot))
+ return (false);
+
+ item_def& arm(you.inv[item_slot]);
+
+ if (!is_enchantable_armour(arm, true, true) ||
+ get_armour_ego_type(arm) != SPARM_NORMAL)
+ {
+ mpr("Choose some type of armour to enchant, or Esc to abort.");
+ if (Options.auto_list)
+ more();
+
+ item_slot = -1;
+ mpr("You can't enchant that."); //does not appear
+ continue;
+ }
+
+ //make item desc runed if desc was vanilla?
+
+ set_item_ego_type(arm, OBJ_ARMOUR, SPARM_PONDEROUSNESS);
+
+ you.redraw_armour_class = true;
+ you.redraw_evasion = true;
+
+ simple_god_message(" says: Dude, use this wisely!");
+
+ return true;
+ }
+ while(true);
+
+ return true;
+}
+
+int _slouch_monsters(coord_def where, int pow, int, actor* agent)
+{
+ monsters* mon = monster_at(where);
+ if (NULL == mon){
+ return (0);
+ }
+
+ int dmg = (mon->speed - player_movement_speed());
+ dmg = (dmg > 0 ? dmg * dmg : 0);
+
+ mon->hurt(agent, dmg, BEAM_MMISSILE, true);
+ return 1;
+}
+
+int chronos_slouch(int pow){
+ return apply_area_visible(_slouch_monsters, pow);
+}
+
static bool _bless_weapon(god_type god, brand_type brand, int colour)
{
item_def& wpn = *you.weapon();
@@ -7066,7 +7190,7 @@ static void _print_sacrifice_message(god_type god, const item_def &item,
const char *tag_start, *tag_end;
switch (piety_gain)
{
- case PIETY_NONE:
+ case PIETY_NONE:
tag_start = "<lightgrey>";
tag_end = "</lightgrey>";
break;
@@ -8024,6 +8148,7 @@ void handle_god_time()
gain_piety(1);
return;
+ case GOD_CHRONOS:
case GOD_SHINING_ONE:
if (_need_free_piety() && one_chance_in(15))
gain_piety(1);
diff --git a/crawl-ref/source/religion.h b/crawl-ref/source/religion.h
index 4583ac2095..971be5d3cd 100644
--- a/crawl-ref/source/religion.h
+++ b/crawl-ref/source/religion.h
@@ -74,6 +74,9 @@ void enable_attack_conducts(god_conduct_trigger conduct[3]);
void disable_attack_conducts(god_conduct_trigger conduct[3]);
void excommunication(god_type new_god = GOD_NO_GOD);
+bool ponderousify_armour();
+int chronos_slouch(int);
+
void gain_piety(int pgn);
void god_speaks(god_type god, const char *mesg);
void lose_piety(int pgn);
diff --git a/crawl-ref/source/spells4.cc b/crawl-ref/source/spells4.cc
index ad6cdb8a78..5ac7df2a32 100644
--- a/crawl-ref/source/spells4.cc
+++ b/crawl-ref/source/spells4.cc
@@ -2041,3 +2041,29 @@ void cast_stoneskin(int pow)
if (you.duration[DUR_STONESKIN] > 50)
you.duration[DUR_STONESKIN] = 50;
}
+
+bool do_slow_monster(monsters* mon, kill_category whose_kill)
+{
+ // Try to remove haste, if monster is hasted.
+ if (mon->del_ench(ENCH_HASTE, true))
+ {
+ if (simple_monster_message(mon, " is no longer moving quickly."))
+ {
+ return true;
+ }
+ }
+
+ // Not hasted, slow it.
+ if (!mon->has_ench(ENCH_SLOW)
+ && !mons_is_stationary(mon)
+ && mon->add_ench(mon_enchant(ENCH_SLOW, 0, whose_kill)))
+ {
+ if (!mons_is_paralysed(mon) && !mons_is_petrified(mon)
+ && simple_monster_message(mon, " seems to slow down."))
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
diff --git a/crawl-ref/source/spells4.h b/crawl-ref/source/spells4.h
index 8e5a52fbc5..f587f661ca 100644
--- a/crawl-ref/source/spells4.h
+++ b/crawl-ref/source/spells4.h
@@ -47,4 +47,7 @@ void cast_stoneskin(int pow);
int cast_semi_controlled_blink(int pow);
bool cast_portal_projectile(int pow);
+//returns true if it slowed the monster
+bool do_slow_monster(monsters* mon, kill_category whose_kill);
+
#endif