Summary: Dismount effect doesn't work by any means. Here is a detailed explanation from @bm01 that points out the source of the issue:
For the dismount to happen the inflicted damage needs to be higher than 25 and the spear has to hit the head, neck, chest or shoulders. Arms and legs won't do. "Shrugged off" blows can't dismount. The three perks works the same way (but two of them have a random chance on top of it).
Figured it out, the damage check is wrong. Here's the method for reference:
The issue is that "blow.InflictedDamage" hasn't be set yet, it's always equal to 0, so the amount of inflicted damage is always believed to be inferior to 25% of the target's max HP. "collisionData.InflictedDamage" should be used instead.Code:private static void DecideAgentDismountedByBlow(Agent attackerAgent, Agent victimAgent, AttackCollisionData collisionData, WeaponComponentData attackerWeapon, bool isInitialBlowShrugOff, ref Blow blow) { if (victimAgent.HasMount && !isInitialBlowShrugOff) { bool flag = (float)blow.InflictedDamage / victimAgent.HealthLimit > 0.25f; bool flag2 = MBMath.IsBetween((int)blow.VictimBodyPart, 0, 6); if (victimAgent.Health - (float)collisionData.InflictedDamage >= 1f && flag && flag2) { if (blow.StrikeType == StrikeType.Thrust && blow.WeaponRecord.WeaponFlags.HasAnyFlag(WeaponFlags.CanDismount)) { blow.BlowFlag |= BlowFlags.CanDismount; return; } float num = 0f; num += MissionGameModels.Current.AgentApplyDamageModel.CalculateDismountChanceBonus(attackerAgent, attackerWeapon); if ((MBMath.IsBetween(num, 0f, 1f) ? MBRandom.RandomFloat : 0.1f) <= num) { blow.BlowFlag |= BlowFlags.CanDismount; return; } } } }
Similarly, DecideAgentKnockedByBlow is checking blow.BaseMagnitude but it hasn't be set yet either and is always equal to 0 too.
Last edited: