hack.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@949 c06c8d41-db1a-0410-9941-cceddc491573
AOAJ6D3OKSELEYKAT55XCVU5LYJ7SMCZKC6DIEGLLB3TF2LEENWQC NFOXLH722RGWYY5D63VV6SF2XEJBEOQEFQME6FSA4HZRK3CPLSRQC QNKMXCJSGRBEPE6ZNPEXU5EQIOME6EI4DECVC56GLOBCMGWWE6MQC RYT42Z6CED4KV5CCJ45CHZ3DQGLFMDCVH6CSQZNXOILULDG4MXVQC MSQI3TH6T62JAXQGLL52QZCWAMC372TGB6ZNNRDGUGMJKBNNV2VAC SE6T5ILU7BD6ICIOP7BTIQIBNBDEJX3J5OBO7Z2DZA336ETTHYJAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC }// Give the monster its action energy (aka speed_increment).static void monster_add_energy(monsters *monster){int energy_gained = (monster->speed * you.time_taken) / 10;// Slow monsters might get 0 here. Maybe we should factor in// *how* slow it is...but a 10-to-1 move ratio seems more than// enough.if ( energy_gained == 0 && monster->speed != 0 )energy_gained = 1;monster->speed_increment += energy_gained;if (you.slow > 0)monster->speed_increment += energy_gained;}// Do natural regeneration for monster.static void monster_regenerate(monsters *monster){// regenerate:if (monster_descriptor(monster->type, MDSC_REGENERATES)|| (monster->type == MONS_FIRE_ELEMENTAL&& (grd[monster->x][monster->y] == DNGN_LAVA|| env.cgrid[monster->x][monster->y] == CLOUD_FIRE|| env.cgrid[monster->x][monster->y] == CLOUD_FIRE_MON))|| (monster->type == MONS_WATER_ELEMENTAL&& (grd[monster->x][monster->y] == DNGN_SHALLOW_WATER|| grd[monster->x][monster->y] == DNGN_DEEP_WATER))|| (monster->type == MONS_AIR_ELEMENTAL&& env.cgrid[monster->x][monster->y] == EMPTY_CLOUD&& one_chance_in(3))|| one_chance_in(25)){heal_monster(monster, 1, false);}
int energy_gained = (monster->speed * you.time_taken) / 10;// Slow monsters might get 0 here. Maybe we should factor in// *how* slow it is...but a 10-to-1 move ratio seems more than// enough.if ( energy_gained == 0 && monster->speed != 0 )energy_gained = 1;monster->speed_increment += energy_gained;
if (you.slow > 0){monster->speed_increment += energy_gained;}
monster_add_energy(monster);
// regenerate:if (monster_descriptor(monster->type, MDSC_REGENERATES)|| (monster->type == MONS_FIRE_ELEMENTAL&& (grd[monster->x][monster->y] == DNGN_LAVA|| env.cgrid[monster->x][monster->y] == CLOUD_FIRE|| env.cgrid[monster->x][monster->y] == CLOUD_FIRE_MON))
|| (monster->type == MONS_WATER_ELEMENTAL&& (grd[monster->x][monster->y] == DNGN_SHALLOW_WATER|| grd[monster->x][monster->y] == DNGN_DEEP_WATER))|| (monster->type == MONS_AIR_ELEMENTAL&& env.cgrid[monster->x][monster->y] == EMPTY_CLOUD&& one_chance_in(3))|| one_chance_in(25)){heal_monster(monster, 1, false);}
monster->speed_increment = 0;if (simple_monster_message(monster, " suddenly stops moving!"))pbolt.obvious_effect = true;if (grd[monster->x][monster->y] == DNGN_LAVA|| grid_is_water(grd[monster->x][monster->y])){if (mons_flies(monster) == 1){// don't worry about invisibility - you should be able to// see if something has fallen into the lavaif (is_near)mprf("%s falls into the %s!",ptr_monam(monster, DESC_CAP_THE),(grd[monster->x][monster->y] == DNGN_LAVA) ? "lava" :"water");switch (pbolt.thrower){case KILL_YOU:case KILL_YOU_MISSILE:monster_die(monster, KILL_YOU, pbolt.beam_source);break; /* " " */case KILL_MON:case KILL_MON_MISSILE:monster_die(monster, KILL_MON_MISSILE, pbolt.beam_source);break; /* dragon breath &c */}}}
beam_paralyses_monster(pbolt, monster);
strncpy( buff, ptr_monam( monster, DESC_CAP_THE ), sizeof(buff) );if (mons_add_ench(monster, ENCH_INVIS))
{const std::string monster_name = ptr_monam(monster, DESC_CAP_THE);if (!mons_has_ench(monster, ENCH_INVIS)&& mons_add_ench(monster, ENCH_INVIS))
}static void beam_paralyses_monster(bolt &pbolt, monsters *monster){if (!mons_has_ench(monster, ENCH_PARALYSIS)&& mons_add_ench(monster, ENCH_PARALYSIS)){if (simple_monster_message(monster, " suddenly stops moving!"))pbolt.obvious_effect = true;const int grid = grd(monster->pos());if (grid == DNGN_LAVA || grid_is_water(grid)){if (mons_flies(monster) == 1){// don't worry about invisibility - you should be able to// see if something has fallen into the lavaif (mons_near(monster))mprf("%s falls into the %s!",ptr_monam(monster, DESC_CAP_THE),(grid == DNGN_LAVA ? "lava" : "water"));monster_die(monster, pbolt);}}}
int bolt::killer() const{if (flavour == BEAM_BANISH)return (KILL_RESET);switch (thrower){case KILL_YOU:case KILL_YOU_MISSILE:return (flavour == BEAM_PARALYSIS? KILL_YOU : KILL_YOU_MISSILE);case KILL_MON:case KILL_MON_MISSILE:return (KILL_MON_MISSILE);default:return (KILL_MON_MISSILE);}}