Barkeep
Posts: 3890
Joined: Wednesday, 14th August 2013, 23:25
Location: USA
Alternatives to energy randomization
If the behavior to be discouraged is stuff like running around in circles for a while to regain HP ("pillar dancing" and the like), then the solution of energy randomization seems both too broad and yet also inefficient. Too broad, because many normal repositioning tactics can be arbitrarily punished at random; inefficient, because you can still perform indefinitely long stalling movements against dudes. Energy randomization does not so much help "force a confrontation" by letting you escape or letting the enemy advance, but in many cases prolongs one's retreat even in cases where a player, through good play, kept a dangerous melee opponent at one or two tiles' distance—a bit of bad luck and the enemy is next to you, and now while backing up you have to worry about a random dice roll completely independent of how you played may put the enemy next to you.
The problem, I think, is one of "lengthy movement stalemates" between players and enemies at the same speed. I think Crawl devs can come up with better ways to end those stalemates, but here's a quick proposal of my own:
- Code:
One alternative to energy randomization
Enemies who have done nothing but move while following you for a long period of time will tend to disengage, giving up the chase. However, they will make a great deal of noise after doing so. "The yak bellows loudly in frustration, before turning back." "The orc gives up, shouting curses." And so on. These shouts would have higher "noise" ratings than usual shouts, basically simulating an off-screen temper tantrum after the enemy has given up the chase.
In these sort of scenarios, the player has managed not to die to an enemy and retreat successfully for a long time, but occasionally this results in a "movement stalemate"; as opposed to energy randomization, my proposed alternative would resolve such stalemates technically in player's favor, but at a certain cost: The enemy you've escaped from makes a lot of noise and draws attention of other enemies on the level. This can also be expanded to other measures that enemies might take against you, based on intelligence; for instance, an orc pack might regroup and form an ambush party at some strategically important point on the level (like near a stair case), perhaps redistributing their weapons so that the strongest member of the group gets the best weapon, and making preparations for you, etc.
Such "revenge" AI effects would not ever trigger during tactical repositioning, nor during *efficient* retreats when you use the layout to break LOS to lose your pursuer or move quickly back to a staircase and go to another level. The noisiness penalty would only be triggered in cases where the player runs in circles or does similar for a long period of time without definitively eluding the enemy. Note that this would also punish very lengthy "kiting" sessions of enemies that you could run from but choose not to, and could easily be adapted to punish "door dancing" enemies capable of opening doors. The point wouldn't be to punish running away (which is often a good idea in Crawl and is usually interesting), but it would punish *very poorly conducted* retreats as well as abusive "pillar dancing" tactics that constitute the sort of un-fun degenerate behavior that players sometimes indulge in because they don't want to use up one of the 12 charges on that wand of fire they have, or something.
The advantage here, over energy randomization, is that it allows better fine tuning so that you never have situations in which good play and reasonable tactics (including reasonably executed retreats) are randomly punished by having enemies move extra tiles. Since good positioning is *the* major component of what makes good play in Crawl dynamic, interesting, and fun, even a small chance of having that screwed up for reasons independent of how poorly/well someone was playing is very bad for DCSS design.