Well, if you're convinced it's not a bug, perhaps someone can enlighten me on one thing. Not trying to stir the pot, but humor me here.
If you code this and specifically check for 0 to prevent incrementing chances when chances = 0,
if( chances != 0 && victim->morph )
chances += victim->morph->parry;
Why would you then code the call to chance( ) like this:
if( !chance( victim, chances + victim->level - ch->level ) )
learn_from_failure( victim, gsn_parry );
and do the exact opposite by potentially allowing 0 to be incremented?
Either you want it to stay 0 or you don't, but it doesn't make sense to have it both ways, does it? Why let level differences play a role at 0 skill but not morphs?
And, bonus points, can anyone explain why we have a call to 'learn_from_failure( ) for a skill that the player might not even have? Do you really think someone intended to needlessly do this for anyone who didn't possess the skill? That seems wasteful at best.
To each his own, but to me it seems like something
needs to be fixed here. Either fix the function to check for the skill, or allow morphs to have an impact and dispense with trying to learn from failure on a skill that you might not have in the first place. Can we agree on one or the other at least?