Overhealing vs. strictly healing past damage: fixing inconsistencies based off of intent order



  • aoe - by this I mean rangedMassAttack

    My examale about alternating scatter fire and focused fire is an attempt to demonstrate an attack strategy which is partially neutralized by overhealing. If you are forced to wager that I could choose a different target for my attack each turn then you will not be able to carry forward the effectiveness of the previous ticks heal.

    With overhealing implemented my strategy would be more predictable because I would be incentivized to only attack creeps with maximum health in order to break up my target's strategy and expose its flaws. Alternatively I could start to burst down one creep more reliably.



  • *only attack creeps with full health. Can't edit on mobile.


  • YP

    I would favor case 1 from the original post. Healing should be executed first, but you can only heal what was already damaged in the last tick. There should be no random in it.

    This makes most sense for me.. if you want to fix something it has to be damaged.

     

    If from balancing perspective something else makes more sense that should be not part of this fix. If there should be some kind if shielding for the next tick... implement shields 🙂

    From a gamedev perspective: defenders should have an advantage... attacking should be harder then defending.



  • @Daboross, I think you're correct and the use of "overhealing" has pushed the conversation in the wrong direction. I like your second analogy. A medic performing a heal action is instructed to supervise another creep for that tick and heal any incoming damage.



  • @avatus Yeah... my apologies for picking that term to describe the differences between the two choices!

    In any case, I guess there has been a lot of input on both sides now, and it's now up to artem and the team which behavior is preferred. I'll modify the pull requests soon to correctly account for boosted tough parts, and to simplify the 'overheal / heal-all-tick-damage' one, but besides that, there have been many good points on both sides of the decision.



  • @Artem any word on this?

    It is quite significant for high level combat.



  • I've now updated the pull requests with the idea of just tallying how much damage/healing is done and just applying all of it at the end of the tick, as some here suggested. This should fix this disrupting TOUGH part behaviors.

     

    Would anyone with a private server be willing to test one or both of the pull requests? I'll be trying to test them, but it might be nice to have a slightly larger sample group of people trying it out.


  • Dev Team

    As this is a quite major change in game logic behavior, with a lot of possible consequences and pitfalls, it needs more testing and discussion.



  • @artem If neither of these solutions seems to be initially the "right" one, would it be possible to implement a stopgap solution, such as fully randomizing intent order?

     

    In the current situation, which case occurs is somewhat random, but also somewhat exploitable by players with a higher CPU allowance through, say, executing creep.attack at the very end of the tick on one tick, and then the very beginning of the next tick. I've made the two Pull Requests which would make the behavior certain one way or the other, but it would also probably be acceptable if the behavior was fully, non-exploitably, random.


  • CoPS

    In any case I'd like if there was an official API that allows correct prediction of resulting health on a creep for given healing/attack which correctly takes into account (over-)healing and armor boosts. This way I can be more confident that my defenses won't flounder when the patch rolls out one way or the other while I sleep.

    I'm currently mildly on the side of "strictly healing past damage".


  • Dev Team

    I went through the entire conversation again, and decided to settle with allowing the overhealing. PR #15 will be merged after it is tested enough.



  • That's awesome!

    How can we help to test it?



  • Had a read from the other thread. I'll ask the SUN warmaster to update our private server and get back to you soon with our findings.



  • In my opinion it should be heal first. That's much less speculative and very consistent with the descriptions from dissi and BlackLotus.

    To clarify the steps which are happening in the chosen pull/15:

    1. collect all damages and heals
    2. check for death
    3. apply damage
    4. drop carry if damaged
    5. apply heal
    6. cap max health

    So now it's damage first without death check. So effectively a creep can have -10k health after receiving damage and be healed back to max hp with 15k in the same tick, giving every healer the Defend skill of a power creep, making that skill obselete. That is called 'overhealing' in this post.
    That also means, that healers must guess which creep will receive damage to give the intent to heal such damage before it happens.
    Boosted tough-parts will only be effective when they're always healed before knowing the damage.
    Fights with boosted creeps will be a gamble.
    If it stays like that, I just see one inconsistency: After step 3, there is no death check, but there is a carry-check.
    I guess the check for `'./creeps/_drop-resources-without-space'` should be done after the healing. Because If death is delayed then the drop of resources should also be delayed.
    I'm also a little confused why the check for death is step 2.

    However, I see another way of a more consistent overhealing:

    1. collect all damages and heals
    2. apply heals (without cap --> 'overhealing')
    3. apply damage
    4. drop carry if damaged
    5. cap max health
    6. check for death

    This allows overhealing, but doesn't revive dead creeps. It gives boosted tough parts their strength back, because you'll know exactly how much you need to heal in order to use the boosted tough parts.

    Kind regards,
    Xenofix