Page 1 of 1

Riposte: Check EV after a block

PostPosted: Wednesday, 11th April 2018, 18:04
by Stonar
There is a "hidden malus" for using long blades (or Fencer's Gloves) and a shield. Since blocking is checked before evasion, you could block an attack, and never get a chance to evade - if you can't evade, you can't riposte. While I don't understand the reasons why you can't riposte a blocked attack, I do understand that the clarity of "the better you are at dodging, the more often you riposte." So, I suggest that we make a slight tweak - rather than checking dodge first (which I suspect would make reflection worse,) we should simply check evasion when an attack is successfully blocked, so the riposte can trigger.

I'm not interested in how important this hidden malus is (my gut says "not very,") but it does feel weird that shields make the special ability unique to long blades worse, while they don't do the same for stabbing, cleaving, or reaching. The least destructive way to fix it seems to me to be to simply do a special evasion check when blocking to trigger riposte. It feels like a small balance change in the first place, and there might be some confusion as to why you can block an attack and still riposte, but it feels like that could be communicated better than the current system of "wearing a shield is bad for your special sword ability."

Re: Riposte: Check EV after a block

PostPosted: Wednesday, 11th April 2018, 18:36
by duvessa
Checking EV first would be a buff to shields, because SH rolls are penalized (quite harshly) depending on how many you've already made this turn whereas EV is not.

How about just making riposte independent of EV, SH, etc. altogether? If something attacks you in melee, whether it hits or not, you get a 33% (or 50% or whatever) chance of riposte. This would make riposte WAY easier to analyze.

Re: Riposte: Check EV after a block

PostPosted: Wednesday, 11th April 2018, 19:05
by le_nerd
Also please remove hidden shield penalty! The only reason for it to exist ist "realism".

Re: Riposte: Check EV after a block

PostPosted: Wednesday, 11th April 2018, 19:44
by duvessa
le_nerd wrote:Also please remove hidden shield penalty! The only reason for it to exist ist "realism".
I suppose the devil's advocate position is that it gives shields "anti-synergy" with cleaving, and axes being biased towards not using shields is cool somehow.

Re: Riposte: Check EV after a block

PostPosted: Wednesday, 11th April 2018, 21:02
by Fingolfin
Also checking EV before SH would mean the reflection ego (or amulet) would trigger less.

Re: Riposte: Check EV after a block

PostPosted: Thursday, 12th April 2018, 01:31
by Airwolf
Check EV & SH in randomized order!

Re: Riposte: Check EV after a block

PostPosted: Thursday, 12th April 2018, 02:55
by chequers
Proc riposte if you dodge OR block

Re: Riposte: Check EV after a block

PostPosted: Thursday, 12th April 2018, 04:15
by Realz
I have no sense of how much work this is... but can't we just roll both block and dodge?


If you roll success for block AND dodge, then you block and can riposte.

If you roll success for block but not dodge, then you block but cannot riposte.

If you roll success for dodge but not block, then you dodge and can riposte.

If both fail, you get nothing - good day, sir!


I'm also okay with an independent roll like duvessa mentioned, although the "EV is good with swords" message does get lost, not sure if I think that's good or bad.

Re: Riposte: Check EV after a block

PostPosted: Thursday, 12th April 2018, 10:38
by Pereza0
I personally think its ok. I mean, Shields have been bit of a no brainer with 1-handed weapons for quite a bit of time now and they still are very good with 1-handed swords. Having a small compensation to keeping your offhand free as you transition to 2H swords sounds fun to me. I also like how its related to EV.

Re: Riposte: Check EV after a block

PostPosted: Thursday, 12th April 2018, 18:15
by genericpseudonym
Shields are still a no-brainer as the increased defense is worth far more than the slight decrease in damage from lost ripostes.
Block preventing riposte is an awkward and ugly anti-synergy, and the game would be better off and more elegant without it, but it's not actually very meaningful in terms of balance.

Re: Riposte: Check EV after a block

PostPosted: Thursday, 12th April 2018, 18:35
by Siegurt
Just to give a sense of scale here I did 3 trials each with FSIM:
A human, with no shield, a +0 great sword with 27 in fighting and long blades, 10 in strength and dex against a stone giant
  Code:
with 30 Evasion (65-66% dodged attacks) an average of 14.3 damage and
with 1 Evasion (3-4% dodged attacks) an average of 14.0666 damage


A net bonus of 1.7% bonus damage for going from 1 to 30 evasion, if shields half that, that's a 0.85% difference in the total damage done.

I slightly wonder if FSIM somehow doesn't deal properly with riposte, or if the extra damage is just really really that low, it seems like it should be closer to 20% than 2%, it's odd because it appears that FSIM properly handles minotaur headbutt, and *some* damage does appear to be generated in FSIM from riposte.

Re: Riposte: Check EV after a block

PostPosted: Thursday, 12th April 2018, 20:40
by Hellmonk
I'm pretty sure that fsim is not accurate, but it's not too hard to calculate in this particular example.

If you simplify away all the things that make riposte damage complicated (monsters that do things other than melee, monster speed, monsters with multiple attacks, etc) then it's easy-ish to calculate the theoretical value of riposte damage. Stone giant is a pretty good test monster for this since it attacks once at normal speed and can't do other stuff from melee range. Treating riposte as equivalent to pressing tab once is pretty good for a naive analysis since it functions similarly in most "I am just meleeing one dude" circumstances (it can miss, applies weapon brand, and has the normal chances for aux attacks so there's no extra weirdness until you start adding stuff like spells into the mix). Recall that there's a 33% chance to riposte on dodge.

Against a stone giant or any other normal attack speed monster that attacks once and doesn't do other stuff:
If the chance to dodge is 2/3 (being a little generous on the 30 EV case), you get 2/3*1/3= 2/9, or ~22.2% of a tab on average per 10 aut. This does not correspond to a 22.2% damage increase from riposte unless you're attacking once per 10 aut; it's less if you are swinging faster and more if you're swinging slower or doing things other than meleeing.
If the chance to dodge is 3%, you get 0.03*1/3, a nice clean 1% of a tab per 10 aut. Again, this does not correspond to a 1% damage increase unless you are attacking exactly once per 10 aut.

If your great sword is at mindelay and you are tabbing the stone giant without taking other actions while it's in melee range, multiply both of those values by 0.7 to account for the fact that you're swinging a lot more often than the stone giant is. The damage difference between the two cases is just under 15%.

Naturally, it's more complicated to figure out riposte chance if the monster has multiple attacks or if the monster can do things that aren't melee. That's why I used stone giant as the example for my riposte shitpost thread. It's also important to note that adding a fixed amount of EV does not have the same effect on dodge chance for all values of starting EV, so going from 11 EV to 40 EV will have less of an effect, in addition to being harder to do. It's also also important to note that monster chance to hit is based on a couple of opaque things that aren't listed anywhere in-game, so unless you like querying Sequell a lot it's not trivial to figure out for every monster.

Re: Riposte: Check EV after a block

PostPosted: Thursday, 12th April 2018, 21:52
by Siegurt
Hellmonk wrote:I'm pretty sure that fsim is not accurate, but it's not too hard to calculate in this particular example.

If you simplify away all the things that make riposte damage complicated (monsters that do things other than melee, monster speed, monsters with multiple attacks, etc) then it's easy-ish to calculate the theoretical value of riposte damage. Stone giant is a pretty good test monster for this since it attacks once at normal speed and can't do other stuff from melee range. Treating riposte as equivalent to pressing tab once is pretty good for a naive analysis since it functions similarly in most "I am just meleeing one dude" circumstances (it can miss, applies weapon brand, and has the normal chances for aux attacks so there's no extra weirdness until you start adding stuff like spells into the mix). Recall that there's a 33% chance to riposte on dodge.

Against a stone giant or any other normal attack speed monster that attacks once and doesn't do other stuff:
If the chance to dodge is 2/3 (being a little generous on the 30 EV case), you get 2/3*1/3= 2/9, or ~22.2% of a tab on average per 10 aut. This does not correspond to a 22.2% damage increase from riposte unless you're attacking once per 10 aut; it's less if you are swinging faster and more if you're swinging slower or doing things other than meleeing.
If the chance to dodge is 3%, you get 0.03*1/3, a nice clean 1% of a tab per 10 aut. Again, this does not correspond to a 1% damage increase unless you are attacking exactly once per 10 aut.

If your great sword is at mindelay and you are tabbing the stone giant without taking other actions while it's in melee range, multiply both of those values by 0.7 to account for the fact that you're swinging a lot more often than the stone giant is. The damage difference between the two cases is just under 15%.

Naturally, it's more complicated to figure out riposte chance if the monster has multiple attacks or if the monster can do things that aren't melee. That's why I used stone giant as the example for my riposte shitpost thread. It's also important to note that adding a fixed amount of EV does not have the same effect on dodge chance for all values of starting EV, so going from 11 EV to 40 EV will have less of an effect, in addition to being harder to do. It's also also important to note that monster chance to hit is based on a couple of opaque things that aren't listed anywhere in-game, so unless you like querying Sequell a lot it's not trivial to figure out for every monster.


It's pretty clear to me that something about the FSIM I did was inaccurate, I just wasn't sure if it was a bug in FSIM or a bug in riposte. What's confusing is that I repeated the FSIM several times to make sure it was an actual difference, and not just statistical noise, and I *repeated* the same batch of trials with FSIM after posting, with substantially the same results. What confuses me about this is that there's *some* extra damage added by adding the EV (by way of wearing a +29 EV ring, FWIW), I'd expect either the published value (the ones you did the math to get, and I eyeballed in my head) or get no difference at all from FSIM (If riposte is simply ignored)

If FSIM is in fact totally ignoring riposte (Which if so, should probably be fixed), where does that extra damage come from when wearing an EV ring? I may have to pull up the code when I'm off work to see what the heck is going on here.

Re: Riposte: Check EV after a block

PostPosted: Friday, 13th April 2018, 06:57
by tsouns
Could reposte just be a function of Dexterity, let's say 50% chance at 50 dex, 0% chance at 0 dex, and independent of block and dodge?
Not a linear function, but for example shape of sqrt(), or something.

Re: Riposte: Check EV after a block

PostPosted: Saturday, 14th April 2018, 04:10
by bel
I have never understood riposte: doesn't riposte IRL denote a maneuver after you parry an attack, not when you evade an attack? Evasion in Crawl has nothing to do with the weapon you hold (unless it is some sort of artifact with +EV or +Dex), so what is putting riposte on long blades meant to signify?

In Sil, Riposte is a skill you learn, and can activate on every weapon. (Long blades often have evasion bonuses in Sil).

Re: Riposte: Check EV after a block

PostPosted: Saturday, 14th April 2018, 05:37
by duvessa
It signifies nobody being able to think of a good gimmick for long blades

Re: Riposte: Check EV after a block

PostPosted: Saturday, 14th April 2018, 11:04
by svendre
duvessa wrote:It signifies nobody being able to think of a good gimmick for long blades


"One of the advantages of using a blade is it doesn’t require a lot of strength or power to be effective. As long as it’s sharp, the blade will do most of the work. Let the blade do its job. Control the path of the blade and make your cuts and thrusts fluid and smooth. Smooth is fast. Anyone can use blade; what differentiates a master of the blade from a novice is the ability to flow from one cut to another with speed and precision."

Strength weighting distinguished long blades from maces..... *cough*, and if it didn't enough, then it should have been amplified rather than removed. If it was too mysterious, then list it in the weapon description.

Perhaps they should cause bleeding. Perhaps they should parry.

Re: Riposte: Check EV after a block

PostPosted: Saturday, 14th April 2018, 12:37
by Shtopit
They could have both parry and riposte.

Re: Riposte: Check EV after a block

PostPosted: Saturday, 14th April 2018, 14:33
by bhauth
duvessa wrote:a good gimmick for long blades

+SH on all long blades

Re: Riposte: Check EV after a block

PostPosted: Wednesday, 18th April 2018, 22:19
by advil
I'm pretty sure that fsim is not accurate


fsim didn't handle retaliation damage at all, there wasn't even any place where it would be visible (for "Attack", it showed the damage the player did to the monster when the player hit the monster, and for "Defense", the damage that the monster did to the player when the monster hit the player). I've refactored fsim to track both damage done and damage taken for attack and defense. Here's an example of what trunk now does on a quick fsim for a random char (skill level 0 IIRC) attacking a porcupine with a longsword:

  Code:
Created a porcupine.
         Source | AvHitDam | MaxDam |  Acc | AvDam | AvTime | AvSpd | AvEffDam
 Attack: Player |      6.9 |     25 |  44% |   3.1 |   140  |  0.71 |      2.2
 Attack:   Mons |      9.5 |     19 |  35% |   3.4 |   140  |  0.71 |      2.4
 Defend: Player |      6.3 |     23 |   6% |   0.4 |    83  |  1.20 |      0.5
 Defend:   Mons |      5.0 |     13 |  59% |   3.0 |    83  |  1.20 |      3.6