Signed-off-by: Brendan Hickey <brendan@bhickey.net> Acked-by: Steven Noonan <steven@uplinklabs.net>
2XSNHF7JXHEKABVMXDAU25QKFHJHH256GR4WLYAHKSPF4XLBJW4QC
ITABN4IMVIHX4HOYPUBJEOPQJZEXWNZUKPJIE2R5I3QPHSTFUFQAC
6ZDCG4JTGE6VQO755P4COB2BW2STIBVL2LX7EPBGP4JE54AIJKYQC
MGEDH5B5JF4BK7SAHSFHMS32JYSXPWGZP7BLQ6LEUCTAOWGYWA5QC
SAC2X5LNKLQZBDA6WO5CTHTCHEE6SZQ7OLKJP5DREHL7WA5OFTMQC
THECEUKJWIPEPUHPV3A5H73H6O4QZ65IE4XUXB7VPYM5LRMA6X2AC
IUUWUFBMQ4K736ORYMQUWL2WJ46OUFNJP5C5VZYN5QJ2LDMTTITAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
FDMKFGCTWKKSBP3B5VE4BSVFHUVNX5BSDFRVD6E735DHPVYEQFGQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
4LNX57GAARCBHAHC6JY73VFHAHV6B5DYUBPSF7RM6USDEAAMUR3QC
MONYKYOVBBZBJQNDH4QNDCC4TKFPTGTDVTYWVSC24K7DGOMJ7MEQC
5WVUTEZLEZEML54CKPR6GACQBYY3EMVNXMLJOREN6SSEUZGC47AQC
SA36K3OJ75PNVR2F4QAPNU2LUGFTVHNIAZVSXCBXBT2NLW2RTUPAC
EJGNWOH3RJYL4OYAFNVTRZE4WQ5SZLBFRAU2ICOFAMCK2SNZX4MQC
CQD3RU44235F3CYFDZBC3JRT2H3AE7PXJNVBBMCRF65Q5LPA3EHQC
DKISJVKAJJK2SVZSXGJ37K5SOVTDARVX6RPK3MAKVNGC36Z4YAZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
FL5OQVX5UXHYHPKC2YZ3PSD4QQ6OHRYXBIVSSKR4RIPUJNC3TORAC
IIUK3DT26O7F4IBKB6QFTPLO4EVKBH55SAEXLNQEQRLDGJ37NDGAC
ADIVVYTV2MJ3XVRYDNBLPTAEACCNF27XZDCRVZFQEHRHPMZGNITQC
ISUJEAPPWKP2UIYPT6BJUUNSVH52NEXWGXNUATL7I3IO7TPO32HAC
SUIDQIK6BZDJSYSFG6AK5A6K76EKGPKBKGGRCIU2AN6XOTCUHOBAC
VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC
FLDIOEND63BONSOAIZ7WYAVNQLJ35O3VFY3PTVRWWYOJL4JXREHAC
VEVPRVWGRHRKBBUTO64ELK3NPZANUQI3ZZ7F23YXJQLKIORUW3HQC
2G7MZ653N3JUHJ4DA5Q7VRO3S5T27DLPKDCJEKB6DGYSTXULUVWAC
FZ3VCF24YWNHTLVHBZYWX37X4FI2SNCXGZGTV2UFGFGAWMOKFIUAC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
WCK6TM2ZD56WSOK6SMMKBYAYGG4OUCTILLMVVLMB4QO5I5S2IVNAC
WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC
JV7RFSC2MQ3X2ZZB24SLNIWRWGYVLEMPG3G3ZVZHON7S3HXC7OZQC
TBLVONZGCKVUXW7NEG4NSDMFIIO6UZOG4FHTJGT6MKSSO3B5J46AC
KQNMFSLV62B4ANDKTUZ7LQH2MD2NDGNCP55MKM5YAATQ4T52H2PQC
HIRKGUMNJPWKSVTR6TVBPD3MWNA63CEHCLCIPWEMGDFHVB3NPLDQC
TDXC5VWE2B5VVGNXEF7V5E6UCKCSAIZVLJXFIOQ4G4A2PK5L7BBQC
VXWDDKBETFFMU7LMGN4UGB74NNKXW456KFJMWWEVOTWH35NZZZHAC
W2KRIXSCRJPS6WDIYTHVF5IRMF3V5DWECRAWUPVTB7VZ6A2BLD4QC
UADYVV3UD5ERJTZZJGY4EUQ4NJ2JSBG7YYUJ75ZRBIXRQXQKOJPAC
TPJYUAKSEZMCCCJANJ5EQ7F67QVTPFEOWBD7WYK33NLRN657Y5VQC
PHTCOVKTGDX2ZN4QTG2X2Y2M6HAW2EZJQ5WXWQ3NDFAFF2DR6WDQC
DCZMEKDHQWSQCQYQD6ZXB3XOMWLVLPSPVSBVVMPXMSZF7GO3BVCAC
SN3VSV7G6NF6NLX5E47QJQQFDIPC2LQUUYGZMH6AWBF3FOUHXCBQC
FAVME2A2U4OUKN2BTISAG5PCI5Y4BN6YVFKCSQQHHZLEVVVF4LKAC
LY7DLLD7IKL6ZQPVROLDJ46XRM5CMAAEBRFDKJ4M53CPC5GFCGSQC
XI7X6SNTHG67D4NQWM75HWB6TVRXVFDPGNSQLTXN6JAZBZIVZXIQC
KU5FY6KSLTGH44KEZT4SFANRKCTWCQC7VABCMNYJRZNJSYSOXAKQC
JW2KRJHES33W7UTWZ6NDO4TLMK4EFU4HKZXBWR2UJOMPCCOTR4CQC
WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC
}
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;
break;
}
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);
}
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);
}
"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"}
%%%%
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.
// 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());
#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 );
// 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 },
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;