View Single Post
Old June 28, 2017, 08:32   #19
PowerWyrm's Avatar
Join Date: Apr 2008
Posts: 2,796
PowerWyrm is on a distinguished road
Ethereal hounds don't swarm the player anymore. They simply stand in walls doing nothing, never using melee attacks, only occasionally breathing nether if they manage to get in LOS.

Found the reason why, as I got the same problem in PWMAngband. In get_moves():

	/* Monster groups try to surround the player */
	if (!done && rf_has(mon->race->flags, RF_GROUP_AI) &&
		square_isview(c, mon->fy, mon->fx)) {
		int i, yy = mon->ty, xx = mon->tx;
But in get_moves_advance():

	/* If the monster can pass through nearby walls, do that */
	if (monster_passes_walls(mon) && !near_permwall(mon, c)) {
		return false;
	/* Set the target */
	if (found_direction) {
		mon->ty = my + ddy_ddd[best_direction];
		mon->tx = mx + ddx_ddd[best_direction];
		return true;
So mon->ty and mon->tx, which are used to calculate where AI_GROUP monsters will surround the player, are not set for ethereal hounds, and the game picks up a bogus location.

The best (and easiest) way to fix this is probably to let ethereal hounds go straight at the player by disabling the "surround the player" code for them ("get the player out of corridors" code is already disabled).
PWMAngband variant maintainer - check (or to learn more about this new variant!

Last edited by PowerWyrm; June 28, 2017 at 09:07.
PowerWyrm is offline   Reply With Quote