KCJ4Z24PD7ZAWJ2F63IFXZOWHFT5OKSMKQ5Z3T3J6BQLVBLBAFMQC R6G4CLUA3PYWYUZVWIOTAVUGR43B65CPAPPSCT4NXB4XAJDUKQSQC QAD5QRQDRHBP2SKJXPYAHIJOUUBXQTJEAMJUU274I3UY2WW7FEXQC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC FXVDNB6MAAOSEP37HP7CIPPXNS7FDECN3GCRMT5UFFCKLHIL6IVAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC Y6YXZ7CF7TJ5WIYFGQA7OFF52P3V5YHKTMUOSBIPAFCRCMNPGSZQC AVSWNOP23Z2QCLQGXFDZV7TI4RC3XSXHIX2HDXFHXGKDEZSSIGJQC 2XSNHF7JXHEKABVMXDAU25QKFHJHH256GR4WLYAHKSPF4XLBJW4QC 26TGZ3ARBTOI4GTW4LO7R25QYQP3KDY75D4RFWUUFB3OBWVOIDMQC WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC LFIEDWOSNPS5D6EUWPUPOBBN5CEHVF2MLNOSPXEIVMRZ77A5BH4AC LUH6GAJODIQXNPBEHMSUTKH3KA3DYVRCKZ6GJJ4HHNHOIMMUEP6QC HB27XKFYVYIEQZGBCEZ6LKPUBMXLIPDAAS636GJ5TULIQ7KND5KQC KBNY5FWKTEAKABFCLPC3QFKFSVZKAGXINPCIFV6WDSWFO4VCKNTAC 7EI4HMXZ7TAWZKFZG2SXHDAX3FWFBCZLUAKOALPRFF72FS7NKVBQC SLDR32H45VDN74AVZ2JDPLNK7AZWXDS2YRTLMGK7E3FYW6OWOFJAC RWCCZ64BG3HSOTM54ANIGENC3F3AIR42LJFRYSAKMCPCIUSOZY5QC ////////////////////////////////////////////////////////////////////////////static int _lugonu_warp_monster(coord_def where, int pow, int, actor *){if (!in_bounds(where))return (0);monsters* mon = monster_at(where);if (mon == NULL)return (0);if (!mons_friendly(mon))behaviour_event(mon, ME_ANNOY, MHITYOU);if (check_mons_resist_magic(mon, pow * 2)){mprf("%s %s.",mon->name(DESC_CAP_THE).c_str(), mons_resist_string(mon));return (1);}const int damage = 1 + random2(pow / 6);if (mon->type == MONS_BLINK_FROG)mon->heal(damage, false);else if (!check_mons_resist_magic(mon, pow)){mon->hurt(&you, damage);if (!mon->alive())return (1);}mon->blink();return (1);}static void _lugonu_warp_area(int pow){apply_area_around_square( _lugonu_warp_monster, you.pos(), pow );}void lugonu_bends_space(){const int pow = 4 + skill_bump(SK_INVOCATIONS);const bool area_warp = random2(pow) > 9;mprf("Space bends %saround you!", area_warp? "sharply " : "");if (area_warp)_lugonu_warp_area(pow);random_blink(false, true);const int damage = roll_dice(1, 4);ouch(damage, NON_MONSTER, KILLED_BY_WILD_MAGIC, "a spatial distortion");}////////////////////////////////////////////////////////////////////////void chronos_time_step(int pow) // pow is the number of turns to skip{coord_def old_pos = you.pos();mpr("You step out of the flow of time.");you.flash_colour = LIGHTCYAN;viewwindow(true, true);you.moveto(coord_def(0, 0));you.duration[DUR_TIME_STEP] = pow;you.time_taken = 10;while(you.duration[DUR_TIME_STEP]-- > 0){run_environment_effects();handle_monsters();manage_clouds();}// Update corpses, etc. This does also shift monsters, but only by a tiny bit.update_level(pow*10);#ifndef USE_TILEdelay(1000);#endifyou.flash_colour = 0;you.moveto(old_pos);you.duration[DUR_TIME_STEP] = 0;viewwindow(true, false);mpr("You return into the normal time flow.");}
}////////////////////////////////////////////////////////////////////////////static int _lugonu_warp_monster(coord_def where, int pow, int, actor *){if (!in_bounds(where))return (0);monsters* mon = monster_at(where);if (mon == NULL)return (0);if (!mons_friendly(mon))behaviour_event(mon, ME_ANNOY, MHITYOU);if (check_mons_resist_magic(mon, pow * 2)){mprf("%s %s.",mon->name(DESC_CAP_THE).c_str(), mons_resist_string(mon));return (1);}const int damage = 1 + random2(pow / 6);if (mon->type == MONS_BLINK_FROG)mon->heal(damage, false);else if (!check_mons_resist_magic(mon, pow)){mon->hurt(&you, damage);if (!mon->alive())return (1);}mon->blink();return (1);}static void _lugonu_warp_area(int pow){apply_area_around_square( _lugonu_warp_monster, you.pos(), pow );}static void _lugonu_bends_space(){const int pow = 4 + skill_bump(SK_INVOCATIONS);const bool area_warp = random2(pow) > 9;mprf("Space bends %saround you!", area_warp? "sharply " : "");if (area_warp)_lugonu_warp_area(pow);random_blink(false, true);const int damage = roll_dice(1, 4);ouch(damage, NON_MONSTER, KILLED_BY_WILD_MAGIC, "a spatial distortion");
static void _chronos_time_step(int pow) // pow is the number of turns to skip{coord_def old_pos = you.pos();mpr("You step out of the flow of time.");you.flash_colour = LIGHTCYAN;viewwindow(true, true);you.moveto(coord_def(0, 0));you.duration[DUR_TIME_STEP] = pow;you.time_taken = 10;while(you.duration[DUR_TIME_STEP]-- > 0){run_environment_effects();handle_monsters();manage_clouds();}// Update corpses, etc. This does also shift monsters, but only by a tiny bit.update_level(pow*10);#ifndef USE_TILEdelay(1000);#endifyou.flash_colour = 0;you.moveto(old_pos);you.duration[DUR_TIME_STEP] = 0;viewwindow(true, false);mpr("You return into the normal time flow.");}