To Craft a Sim – Part 4

In this series of posts, I’m talking about putting together a simulation I’ve built called CHsim. It’s designed to simulate the way Chain Heal will behave in Warlords of Draenor – including interactions with player positioning, talents, incoming damage, Riptide, and Mastery bonuses.

My first post in this series discussed why I’m developing CHsim, and I left off by pointing out some good reasons why I’m not using SimCraft to achieve my goals. The second post talked about raid positioning and how I’ve modelled a “realistic” raid. The third post discusses the way I’m making Chain Heal bounce from person to person, and was supposed to talk about what that means for High Tide modelling. However, I didn’t get as far as that before; this post is extending on the Chain Heal mechanism I talked about earlier.

CH_Bouncing1

Bouncy, Bouncy!

Previously I showed you what Chain Heal bounces look like in my simulations, as above, but the question is really how do we go from that to this;

Chain Heal is a beautiful thing.

Chain Heal is a beautiful thing.

… and once we have, what does it mean for the simulation? Can we demonstrate the same principles that Dayani talked about in her recent post on Chain Heal and High Tide? Let’s start with a quick rundown on how High Tide works;

  • Removes the drop-off mechanic from Chain Heal’s bounces.
  • Ensures all players with Riptide receive a Chain Heal bounce (regardless of range as far as we know so far).

The most interesting point about High Tide which we’ve seen so far is the fact that High Tide targeting happens after the first set of Chain Heal targets has been chosen. This means that the raid is conceptually split up into the “Normal” Pool of players (anyone Chain Heal would normally be able to bounce to) and the “Tide” Pool of players (the players with Riptide active). The total average heal given from High Tide then depends on how much the Tide Pool and Normal Pool intersect. More on that here, and in a forthcoming post.

What we want to make in the simulation is an accurate representation of this idea; players cannot be healed once by the normal Chain Heal bounces and then again by the High Tide bounces. In effect, that means that we have to modify the algorithm which I used in the last post in the series. We start from;

  1. Start with your target.
  2. Find all players who are within Chain Heal’s jump range (12.5yds) of the target.
  3. Eliminate from the list all those who have already been healed by Chain Heal.
  4. Pick at random another target to heal.
  5. Jump to the new target, and start from step (1) unless this is the 3rd time you’ve been here.

Now we need to make an extension. I’ll add it as several more simple steps;

  1. Start with your target.
  2. Find all players who are within Chain Heal’s jump range (12.5yds) of the target.
  3. Eliminate from the list all those who have already been healed by Chain Heal.
  4. Pick at random another target to heal.
  5. Jump to the new target, and start from step (1) unless this is the 3rd time you’ve been here.
  6. Make a list of all players with Riptide active.
  7. Eliminate from this list all players who have already had a Chain Heal bounce.
  8. Add the resultant list to the list produced by steps [1-5].

That’s not such a trivial thing to do unless you have a coding language with some sneaky features. Luckily, coding in Matlab gives me just the right features to make that work seamlessly.

Will it blend work?

OK, so let’s have a look at some outputs from this algorithm. If we start to use Dayani’s “pool” notation again, the essential result we have to observe is that choosing the targets from the Normal Pool affects the number of Tide Pool jumps. In other words; the more Chain Heal jumps are made to Riptide players, the fewer extra jumps we’ll receive. I tested this by running the algorithm on a small bunch of players with four Riptides active on the raid. I picked out some examples to show you that when we have n Tide Pool targets healed by the Normal Chain Heal, we get 4-n High Tide jumps.

HT_Bouncing_4_2 HT_Bouncing_4_3 HT_Bouncing_4_4

You can quite clearly see that for every player in the Tide Pool who is healed by Normal Chain Heal gets no bounce from High Tide, and so we get 4-n bounces as we expected. This generalizes to any number of Riptides applied to the raid.

I think that’s quite cool, you know; by trying to work out what algorithm to apply to mimic Chain Heal and High Tide, I’ve managed to create a simulation which produces believable Chain Heal behaviour. Pairing this with believable raid positioning has already given us an interesting and believable Chain Healing simulator. The final part is to… well, it’s to make it a full healing simulation by including health and Mastery concerns into the simulation.

That’s where things start to get tricky, and I’ll talk about how I’ve implemented that…. next time!

Have you ever made a simulation? Do you have some cool ideas for features I could implement? Let me know in the comments and I’ll credit you if your idea is implemented!

About stoove

A physicist, researcher, and gamesman. Likes to think about the mathematics and mechanics behind all sorts of different things, and writing up the thoughts for you to read. A competent programmer, enjoys public speaking and mechanical keyboards. Has opinions which might even change from time to time.
This entry was posted in Alpha/Beta News, Maths, World of Warcraft and tagged , , , , , , , , , , , . Bookmark the permalink.

4 Responses to To Craft a Sim – Part 4

  1. Akoras says:

    First of all I want to thank you for your amazing work!
    Your blog as well as your wonderfull work on the Icy-Veins forum really are unique and -as a restoration shaman player (though not in hc progress)- your seemingly unending desire of understanding game mechanics and the process you enthusiastically share your knowlege with the rest of us quickly bacame one of the reasons I so enjoy playing wow.

    I have a question concerning the jump mechanics with High Tide:

    “Ensures all players with Riptide receive a Chain Heal bounce (regardless of range as far as we know so far).”

    Its the ‘regardless of range’ part that bugs me. I know, maybe there will be the same range limitation for the CH as there is without the talent, but if there isn’t wouldn’t it lead to queer riptide choices?

    Because as you and Dayani both calculated, the output from a CH cast highly depends if during the first “non High Tide” bounces players with an active riptide are hit, thus lowering the output by taking one additional jump out of the “High Tide pool”.
    Now concerning output (and i know of course that raw output is not everything) it may be benificial to keep your riptided targets out of range from your initial CH cast.
    This may not be possible always but consider the following (not so rare) scenario:

    There are two camps, one melee camp including the tank and one ranged camp including most healers.
    Now if the distance between those two camps is higher than 12,5m (or yds) you could focus riptide on the melee group and therefore guarantee that if you cast your CH in the other group, that you get the maximum amount of jumps?
    Now you could even have one riptide in the ranged group as your initial target to empower your CH, wouldn’t change the situation I think..

    Maybe my approach is far to situational or we won’t see the “no range mechanic” for HT on the live version at all.
    Anyway I am eager to her your point of view on such an “abuse” of the mechanic to get maximum CH jumps.

    Keep on your awesome work =)

    • stoove says:

      Thanks very much for the compliment, I appreciate it.

      With regards to your question – I think that this kind of thing isn’t _abuse_ – I think it’s an exciting gameplay consequence that the designers mean for us to use. It’s one of the reasons I think that it’s important to actually simulate these types of things (I’ve no mechanism yet for making the “target a player in group X” decision though).

      I’ve also been working on a good way of extending Dayani’s probabilities work, which could also answer this question.

  2. Pingback: To Craft a Sim – Part 5 | UNconstant

  3. Pingback: To cast, perchance to Chain (Heal) | UNconstant

Leave a comment