Speed Randomization

Update: 3/30

After some discussion on IRC, we've changed the mechanism to randomizing the cost of movement actions, rather than randomizing the energy gained per turn. This should preserve the important aspects of this, without allowing things like monsters being able to hit you twice in one turn. More testing (once CDO gets a new 0.7 build) and feedback are welcome. — doy 2010-03-30 19:38

Ogres still can (and do) dash attacks: move and hit for a lot of damage. There is a grindy way to avoid this 1) wait until the ogre is 2 squares away from you 2) start running away. If the distance increases to 3 squares, wait one turn and continue. If the distance decreases to 1 square, attack. This is the only way to assue the ogre won't get the first attack. — b0rsuk 2010-04-09 17:18
And that matters how? Unless you're past the point when mere ogres don't matter at all, you're not going to kill one in one hit that's not a stab. So, this may have a tiny chance of adding or subtracting one from the already random number of rounds you have to survive while fighting the ogre. — kilobyte 2010-04-09 23:49
That matters because I care and other players care as well. The fact that I care and other players care is matters because they can leave if there's enough to annoy them. The fact that players and contributors can leave matters, because if enough (quantity) or right (quality) people leave, Crawl will be either not played by many players, or not played by smart players, or both. If it ever happens that Crawl is unpopular among most players or smarter players, it's likely it will degenerate (slower development and/or poor design choices) . If Crawl degenerates, it will suck. If I want random, I choose Xom. Each turn is very valuable when figting an ogre, because a lot can happen in one turn. — b0rsuk 2010-04-10 08:52


Monster actions are handled using an energy system, where each monster has an energy value that is incremented every player turn by the amount of time spent by the player's action and the monster's speed (monster_speed * player_time_taken / 10, so a speed 12 monster with a speed 10 player gets 12 energy points per turn), and then actions (movement, attacking, etc) decrement that energy value by various fixed amounts. Up until now, the energy a monster gained every turn was fixed, but as of commit 78d78651f, has been slightly modified to give either -1, 0, or +1 energy each turn. The consequences of this are:

  • Occasionally a monster could gain or lose a turn when moving or attacking. Newborn monsters start with 70 energy, and are allowed to act when their energy >=80. For every action a monster takes, it spends the corresponding amount of energy (most monsters spend 10 energy, whatever their chosen activity). Under the old system, a freshly generated hobgoblin started with 70 energy, was awarded 10 energy each normal player turn, and would spend 10 energy for each move it made (and 10 energy for every melee attack, if it was fighting unarmed). In the new system (78d78651f), the hobgoblin still starts with 70 energy, but each standard player turn it gets 9/10/11 energy. Thus the player will observe the hobgoblin occasionally lose or gain an action, whereas its movements were wholly predictable under the old monster energy system.
  • Let's study the case of the Extra Turn with two examples:
    • Assume the player's being chased by a hobgoblin around a pillar. The hobgoblin starts with 70 energy, and gets +9 energy, leaving it at 79 energy. Thus the hobgoblin will apparently lose an action (it needs at least 80 energy to act). However, if it gets +11 energy on its next turn, that will leave it with 90 energy, allowing it to take two actions in the one player turn; at the end of the two actions, it will be back to energy 70, its initial state.
    • Notice that the hobgoblin “gained” a turn immediately after “losing” a turn one step before. You'll *very rarely* see a monster apparently gain multiple actions in a row, without losing any in-between.
    • Let's examine the same scenario with an ogre wielding a giant club (170% delay). If it starts with 70 energy and gains +9,+11 energy, it will lose its starting turn and then have 90 energy. If it then attacks, its attack with giant club will spend 13 energy, leaving it with 77 energy. It will thus not gain an extra turn immediately (if it *moves* instead of attacking, it *will* get two moves).
  • The goal here is to reduce the perfect safety factor of kiting, pillar dancing, and door manipulation, not to eliminate their use at all. The values given here can certainly be adjusted if they aren't ideal, this was just an experiment to see which direction we might need to go with it.


Please list any feedback you have about this idea, but please also keep the discussion civil - this is not an inherently bad idea, and the devs are not intentionally trying to destroy the game, so please try to stay productive. Don't speculate - play it, play it quite a bit, play a few normal trunk games and report how it affected your game, how you had to change your tactics and even strategies. This sort of feedback would be useful, and not to mention interesting.

  • I hope I'm doing this right because I don't use/edit wikis ever, but I made an FR regarding all of this (edit: it was closed):
    • In my opinion the change which makes monsters randomly move twice in a row has ruined the game. I don't even want to play anymore knowing this is implemented in the game.
    • 1. Monsters can potentially cast two spells in one turn or attack with ranged/melee attacks (with sufficiently quick weapons) twice in one turn. I experienced an orc priest which managed to smite me twice in one player movement, leaving me with next to no HP. If I were a low-hp character build I would have died instantly from full health, and even with this character I only lived due to luck. I can foresee the same situation happening later on as well, for example a stone giant throwing double rocks at you or a lich spamming double crystal spears or major demons. I also had a hydra move twice in a row, for a total of 16 hits. It's absurd that this is possible because you could easily die due to no fault of your own, just because a monster managed to get a lucky roll and spank you twice in a row.
    • 2. Monsters can move from two spaces away to hit you. As an actual example from Napkin, it's possible to be standing on stairs with a monster two spaces away, and have that monster close in and hit you before you make it down the stairs. I also died due to this because a hydra closed in from two spaces away while I was shooting at it. I understand that this change was mainly meant to eliminate pillar dancing, but it also completely wrecks the other parts of the game.
    • Counterargument: “It's very rare that this happens!” - Maybe the chance of any particular monster moving twice in a row is small, but over the course of a regular game you're going to run into several thousand monsters. Chances are you're going to encounter something like this. What should you do- always assume it's going to happen? Which brings me to my next point…
    • Counterargument: “You just need to change your tactics!” - What tactics? Should you always assume the hydra is going to hit you 20 times in a row? Or that you won't make it up the stairs even though the monster is two spaces away? Always wondering if monster X is going to get two turns in a row is not only now a necessity but completely sucks the enjoyment out of the game. Also, what kind of tactics would you recommend to defend against being randomly smitten twice in one turn for more than your max HP, or being attacked from two squares away while trying to descend stairs?
    • I am all for increasing real difficulty of the game: adding new and powerful unique monsters, nerfing obviously overpowered spells/abilities/equipment, creating new branches or branch ends, etc. I feel that this randomization to monster energy is, among everything mentioned above, artificially increasing the difficulty and adding randomization to something that really should not be randomized. I detest dying to means completely beyond player control or beyond what would reasonably be expected of a human: I would liken this change to something like adding insta-kill traps to the game, meaning the player would have to be constantly searching and worried that they might run into one of them. Yes, this change makes the game more difficult, but can you reasonably expect someone to always be thinking that any of the monsters on their screen may move twice, and should plan two steps ahead? This isn't chess and the Crawl monster AI is almost completely unpredictable.
    • You all know I've been a long-time player (Stone Soup, anyway) of the game - I rank it as my favourite game - and this is the first time there's even been a change to the game that's completely killed my want to play it. I have been resistant to some changes in the past but grew to accept them, but there is absolutely no way I will ever enjoy playing the game while this is part of it. I sincerely hope that you consider all of this and I hope it will be removed for 0.6.1.

stabwound 2010-03-28 20:55

I agree with stabwound on this. Crawl combat was already quite random, with misses that do nothing and even hitting attacks having huge damage variance. I think it was bad enough with monsters that have 11+ speed - it's hard to predict when are they going to get their double move, and keeping track of that is a pain in the butt. I don't like micromanagement so much I don't stash most items. Speed randomisation is randomness squared. I wouldn't like to go back to playing heavy armour characters, because it limits my options. But light armour got more annoying - fighting SLOWLY so that you don't miss losing huge chunk of HP became even more important.
Maybe consider trying other pillar dancing prevention mechanisms. Monsters chasing the player for 10+ turns could start to shout once in a while (in addition to move), attracting more monsters. Last thing a player wants while pillar dancing is another encounter. — b0rsuk 2010-03-29 12:46
I'd like to head off the IRC defense of “sure, sometimes monsters move twice, but sometimes they lose a turn instead” with 1. there's a heck of a lot of difference between a monster being killed randomly and a player being killed randomly, and 2. knowing that you survived a situation because the coin landed on “don't move” instead of “move twice” is astoundingly unfulfilling - this doesn't become any more appealing just because it's in the player's favor. And yes, roguelikes are certainly built on randomness, given the underlying dice rolls, but creatures gaining or losing entire actions (move or otherwise) is radically outside the scope of this. It's one thing to randomize the selection, success, and effect of actions, but it's well another to randomize those actions taking place at all. It's effectively impossible to plan for the latter, and adding that to a game that's ostensibly about strategic decisions is ridiculous. And I think it goes without saying that extending the randomization to all actions instead of only movement was unnecessary under any reasoning, so much so that from here I'll be solely considering movespeed.

If a fundamentally “unfair” mechanism is deemed necessary for overall gameplay, steps should be taken so that it's always in the players' favor. In other words, if some speed must be randomized, it should be only player movespeed - have players rarely get a free step, and only that. That way, pillar dancing and so on are effectively removed, but when players are in situations where they're forced to use it as an escape mechanism (which is almost solely in the already-brutal early levels), they won't have to hope that the game unforseeably decides to let them go instead of unforseeably deciding to kill them. (Kiting would obviously benefit from this change, but the current randomized speed does effectively nothing to affect kiting in itself, and any number of spells and abilities allow for effortless kiting regardless - if kiting is considered to be a problem, it's going to require another solution entirely.) A possibly better alternative to giving players an occasional extra step would be to have enemies generated on early levels rarely lose a step, which would largely address the same problems without giving established characters an unneeded, if minor, advantage (this change would apply to normally generated early-level OODs, but farming-generated OOD spawns perhaps should be exempt).

I'm personally not fond of the above in general, as I feel that it makes for a weaker game, but given that some form of nonstatic speed is apparently desired, reliably giving players a benefit is vastly preferable to randomly giving players a benefit or randomly ending their game. — og17 2010-03-29 15:44
I think speed randomisation causes too much collateral damage. It hurts player even in situations which used to be managable before. On many occasions I started running away from a monster while it was still 2 squares away. This means I anticipated it would be a tough or impossible fight and planned ahead. The goal was to reach a staircase. Yet the monster got double turn and caught up with me, forcing to use teleportation scroll or other resource. — b0rsuk 2010-03-29 17:34
There was a small discussion about this whole thing on IRC earlier and some people said that this speed randomization doesn't even do what it's intended to do. greensnark even admitted that it doesn't stop kiting (making a slower monster follow you and attacking it during your free turns), and why would it? If you're kiting something I doubt it's going to break you if it manages to hit you once. People also brought up the fact that it doesn't do much for pillar dancing, either– it makes it end quicker, but in general benefits the player in escaping rather than killing them. Considering this, I sincerely wish this change would completely be rolled back. Believe me, I get the idea behind this, but it doesn't do what's intended and severely screws up other aspects of the game. On another note, it's not as though pillar dancing is an entirely safe strategy even in 0.5: chances are that if you're pillar dancing you're in the early game and probably have very limited strategy/escape options as it is, and running around in a circle for 30 turns is a good way to get more kobolds/hobgoblins on your trail. —stabwound 2010-03-29 22:01
I'd like to point out that this would probably have more discussion and backlash if the change was more widely known… as far as I can see it's not even mentioned in the change log or anywhere else, which is a bit odd considering it's such a major change. —stabwound 2010-04-01 01:06

porkchop 2010-04-10 14:14 Some feedback based on 0.6.0 play, I do not like the current state of speed randomization. I feel it hurts the new and inexperienced players especially, experienced players will be able to deal but be very annoyed. The thing I do not like the most is when faced with a dangerous spellcaster or ranged opponent - say you creep into LOS and you find ancient lich, as you slowly back away lich may get extra move and put him within range of killing you. note: this is not saying lich gets two 'attack' turns because of move energy - he gets two or more turns to cast spells on you as you try and retreat because he has gotten closer to you. same problem with missile monsters who are even more dangerous with all the nice new branded ammo. Speed randomization was a very interesting idea, but I do not feel it has solved any of the problems with pillar dancing, kiting etc. More emphasis on monster AI would be better IMO(seems to get better with every release btw).

Heh, the very example you used is wrong. Ancient liches will never have the same speed as you, since 100/12=8.333… which is not an integer already. In fact, having monsters have identical speed as you lead to such pathological gameplay as before the speed randomization was implemented, getting rid of that is a good thing. — kilobyte 2010-04-10 16:06
Was above point off base Kilobyte? I really dont understand(you dont have to do more maths and explode my brain). Would example be right if I said frederick, or yaktaur? I was just saying that if they get that extra move to close distance, they get more turns to pew-pew you with ranged attacks(not talking about attack speed or anything, just the extra move). — porkchop 2010-04-10 16:25

How speed randomization has changed my tactics: This is killing the the thrill of the 'challenge' for my games. Say I meet my first orc warrior(or tough unique, whatever), In games past I may have decided 'maybe i will try and kill him!' (which may result in my death or victory). Now I am more apt to just run away and ditch him until I *know* I can kill him. This feels boring and tedious, has me bouncing around various dungeon levels like a schizo. It keeps me alive, but the game feels less fun.

  • There's a new mechanic whereby monsters get double turns randomly. This would be fine for move+move or move+attack to get rid of pilar dancing but it's overpowered for attack+attack. I just had an ogre unforseeably attack me twice for 43 damage in one turn while wearing full plate armor on dlvl 7. Here's the turn log. In order to play well I have to double the amount of damage I can conceivably expect to receive in one turn? This is just too much.

Message History

You block the ogre's attack. 43HP
You hit the ogre. The ogre looks even sicker. 43HP
The ogre is moderately wounded. 43HP
The ogre hits you but does no damage. 43HP
Your plate mail prevents you from hitting the ogre. 43HP
The ogre hits you with a great mace! x2 0HP
You die…

  • As mentioned in the FR, this is not because of speed randomization. An ogre with a great mace can never get two attacks from speed randomization, because it's too slow. (It can get move + attack, since it has a move speed of 10, but not attack + attack, because attack speed with a non-short blade weapon is slower than 10.) — doy 2010-03-29 01:09
  • I've died once to it, when I tried to escape using stairs from a hobgoblin who was one square away from me. I'd partially attribute that to not being used to the change however. Also, the monster occasionally using a turn works well with conjure flame – I don't think it makes it too strong, though. — rob 2010-01-28 22:28
  • Aspects I've seen thus far – Good: Being able to sometimes create a gap to allow you to flee upstairs against something you cannot defeat, say Iyjb or an Ogre. Possibly Bad: Some weaker characters heavily rely on pillar dancing early on, and this may make it unacceptably difficult for them in the early game (requires further testing, and could possibly be addressed in another way). Neutral: This may to some extent replace pillar dancing with running up the stairs to the previous level to heal, which certainly isn't “better” than pillar dancing. Bad: Now ANY monster that can use missiles can come on screen and fire the same turn; it was bad enough when mainly just centaurs did this. This is moderately rare, but not THAT rare - it has happened to me about once every 2 dungeon levels or so. Neutral: This makes Conjure Flame pretty amazing; the random movement was mostly annoying me in my first game with it until I learned Conjure Flame, and then it was a pretty big benefit. Overall I'm not a big fan of the change - having things predictable is often beneficial to strategic value rather than less, and having any power hitter (Hydra, etc.) or powerful spellcaster able to smack you twice in a row seems to be a pretty extreme level of variability. There are good aspects but currently I feel the bad outweighs the good, but I'll have to play with it some more yet. — twinge 2010-01-29 00:49
    • On “characters who rely on pillar dancing”: if some starting kit is so bad as to force players to pillar dance, we should address that directly. (Your argument is similar to denying any Okawaru changes, since “there are combos who need Okawaru”.) As far as I see it, pillar dancing is never interesting, so if we can make it less useful, that's always good. — dpeg 2010-01-29 09:55
  • I noted the change in my game (which is a caster, so there aren't problems). Apart from using it for Conjure Flame, I really liked the flavour: monsters no longer moving like robots. — dpeg 2010-01-29 09:55
  • The change doesn't seem to be making the game worse, but it doesn't seem to be performing its intended purpose either. Pillar dancing seems to be better now than it was before; I'm doing it a lot more. (The issue is, that once you've opened up a 1-square gap, you can pretty much dance in peace, and the extra gap gives you a turn of ranged attack with out any hits in the process.) So what happens is that you take an extra hit before the dance starts, then heal up HP and MP while dancing, then get a free attack afterwards. Kiting still works exactly like it did before; the speed randomisation doesn't affect a speed difference between a player and a slower monster. The biggest gameplay change is actually to do with running from fights; you have to run sooner, because you're risking taking an extra hit, which can be lethal; so you have to plan what you're doing more turns in advance. As a result, ranged combat becomes better in open levels (because melee characters that are faster than the monsters would have to move into melee, then have trouble running); but melee characters become better in cramped levels (because without the rather unlikely ability to be able to detect monsters in advance, a ranged character always has the risk of going round a corner and ending up in melee; a ranged character is more likely to want to run, and running from melee has been nerfed). ais523 2010-01-30 18:17
    • I was referring to melee kiting, not ranged kiting… it's true that this doesn't affect ranged kiting at all, but I don't think there's any good way to do that, that's just part of how ranged combat works. It does affect melee kiting, since it can affect when a slower monster actually gets to move/attack. As for “letting a monster hit you so you can get an extra tile between you before pillar dancing”, this has always been possible, it's one of the best ways to get away from ogres. If you're just pillar dancing normally and a gap opens up between you and the monster, more than likely that gap will close back up in the next couple of turns, because of the energy stuff as described above. Also, melee have always been better in cramped levels, and ranged have always been better in open levels, I'm not sure how you think this has changed. — doy 2010-01-30 20:53
    • (Replying to ais523: I think it's largely true that pillar dancing is not nearly crippled with the change. Which is why I proposed to randomly change energy by 0 or +1. Of course, in the heated discussion that ensued, this idea was completely over the top. I still like it. — dpeg 2010-01-31 14:36
    • A long time ago I suggested that all characters should start at clevel2 or 3. This would have no impact on long run, but would drastically cut down number of early casualties. Dpeg refused. If a single hit from a hobgoblin can take over half of your health, there are no known potions or scrolls, no staircases to run to, there's NO strategy for many character types. I just lost 12 out of 13 hp to a jackal pack. Were I supposed to quaff potions at random 1? On clevel3 I have 25 hp - nearly twice the number. Can you tell me, dpeg, what's so fun about repeatedly pressing arrow into hobgoblins until you succeed ? Running away on D:1 is already very dangerous because you often don't know enough level layout to form a loop, so you run into other monsters. By the way, as far as I remember low level characters are special-cased to have very low health regeneration. No wonder clevel 1-3 is *so fun*. Pillar dancing is an issue because low level characters are artificially made suck. This change preserves this, and is opposite of what I would do. A couple of days ago I entered D:1 as clevel4 ogre, because I was lucky to find a brain worm. And you know what ? Past D:1 it wasn't any easier than usual. On D:2 my level was about as high as it would if I wasn't chaos knight. Even harder, because my xp wasn't assigned to skills. b0rsuk
      • dpeg First, I am not the project's Imperator. A change like “starting at XL 2/3” is not something I could propose and then have it be coded. Second, the details of the change are not at all clear (to me at least). Currently, reaching XL 2/3 with your character is something completely different from simply being placed at the stairs with XL 2/3 HP and MP. And these two are why I said no, right away. The idea has some merits, but it needs a lot of discussion. If you propose it on Mantis, it will attract that feedback. Something good may easily come out of it; I am unable to see a clear solution right now.


  • Was it considered to limit the randomization to movement? That would seem to accomplish the goals with respect to pillar dancing, etc., but would ensure that player-speed creatures never attacked or cast twice in a row. (by Lemuel)
    • Not really; my first thoughts on this: It would be possible, by not giving the monster randomized energy, but instead randomizing the movement cost. It would seem to ensure they didn't attack twice in a row. They could still move and attack in one turn however (say the ranged fighter coming into view). — rob 2010-01-29 07:55
    • Another option would be that monsters who got an action from the +1 are only allowed to spend it on moving. — dpeg 2010-01-29 09:55
  • Do awareness checks vs. stealth make use of energy? -Kyrris
    • I don't think so. — rob 2010-01-29 10:15

Alternative ideas

  • Limit randomization to movement (analysis may be off – please correct):
    • Revert energy change, and randomize movement cost. No more double attacking, but move+attack stays possible.
    • Separate movement and action energy, just randomizing movement energy. That would mean no move+attack, restoring pillar dancing.
  • Small cost for noticing the player. This might avoid the monster comes into view and shoots twice effect (even for fast monsters, e.g. centaurs, if weighted appropriately).

Branch “movespeed” has some of these implemented, should someone want to test: Only movement speed is randomized, and there's a cost for noticing the players. — rob 2010-01-31 08:55

Logged in as: Anonymous (VIEWER)
graveyard/speed_randomization.txt · Last modified: 2010-10-01 21:56 by evktalo
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki