private static void Prefix(MechJumpSequence __instance) { Mod.ActivationLog.Debug?.Write($"MJS:OC entered for actor: {CombatantUtils.Label(__instance.OwningMech)}"); // Check for visibility to any enemies if (!__instance.owningActor.Combat.TurnDirector.IsInterleaved) { Mod.ActivationLog.Info?.Write("MJS:OC is not interleaved and no enemies - autobracing "); __instance.owningActor.AutoBrace = true; } Mod.Log.Trace?.Write($"JUMP -- ABILITY_CONSUMES_FIRING: {__instance.AbilityConsumesFiring} / CONSUMES_FIRING: {__instance.ConsumesFiring}"); if (__instance.OwningMech == null) { return; // Nothing more to do } // Movement - check for damage after a jump, and if so force a piloting check if (__instance.OwningMech.ActuatorDamageMalus() != 0 || Mod.Config.Developer.ForceFallAfterJump) { Mod.Log.Info?.Write($"Actor: {CombatantUtils.Label(__instance.OwningMech)} has actuator damage, forcing piloting check."); float sourceSkillMulti = __instance.OwningMech.PilotCheckMod(Mod.Config.SkillChecks.ModPerPointOfPiloting); float damagePenalty = __instance.OwningMech.ActuatorDamageMalus() * Mod.Config.SkillChecks.ModPerPointOfPiloting; float checkMod = sourceSkillMulti + damagePenalty; Mod.Log.Debug?.Write($" moveSkillMulti:{sourceSkillMulti} - damagePenalty: {damagePenalty} = checkMod: {checkMod}"); bool sourcePassed = Mod.Config.Developer.ForceFallAfterJump ? false : CheckHelper.DidCheckPassThreshold(Mod.Config.Move.FallAfterJumpChance, __instance.OwningMech, checkMod, ModText.FT_Fall_After_Jump); if (!sourcePassed) { Mod.Log.Info?.Write($"Source actor: {CombatantUtils.Label(__instance.OwningMech)} failed pilot check after jumping with actuator damage, forcing fall."); MechHelper.AddFallingSequence(__instance.OwningMech, __instance, ModText.FT_Fall_After_Jump); } } }
private static void Prefix(ActorMovementSequence __instance) { Mod.Log.Trace("AMS:OC entered"); // Interleaved - check for visibility to any enemies if (!__instance.owningActor.Combat.TurnDirector.IsInterleaved) { if (__instance.owningActor.Combat.LocalPlayerTeam.GetDetectedEnemyUnits().Count > 0) { Mod.Log.Info("AMS:OC TD is not interleaved but enemies are detected - disabling autobrace. "); __instance.owningActor.AutoBrace = false; } else { Mod.Log.Info("AMS:OC TD is not interleaved and no enemies - autobracing "); __instance.owningActor.AutoBrace = true; } } // Movement - check for damage after a sprint, and if so force a piloting check if (__instance.OwningMech != null && __instance.isSprinting && __instance.OwningMech.ActuatorDamageMalus() != 0) { Mod.Log.Debug($"Actor: {CombatantUtils.Label(__instance.OwningMech)} has actuator damage, forcing piloting check."); float sourceSkillMulti = __instance.OwningMech.PilotCheckMod(Mod.Config.Move.SkillMulti); bool sourcePassed = CheckHelper.DidCheckPassThreshold(Mod.Config.Move.FallAfterRunChance, __instance.OwningMech, sourceSkillMulti, ModConfig.FT_Fall_After_Run); if (!sourcePassed) { Mod.Log.Info($"Source actor: {CombatantUtils.Label(__instance.OwningMech)} failed pilot check after sprinting with actuator damage, forcing fall."); MechHelper.AddFallingSequence(__instance.OwningMech, __instance, ModConfig.FT_Fall_After_Run); } } }
private static void Prefix(ActorMovementSequence __instance) { Mod.ActivationLog.Info?.Write($"AMS:OC:PRE entered for actor: {CombatantUtils.Label(__instance?.OwningActor)}"); // Interleaved - check for visibility to any enemies if (!__instance.owningActor.Combat.TurnDirector.IsInterleaved) { __instance.owningActor.AutoBrace = true; } // Movement - check for damage after a sprint, and if so force a piloting check if (__instance.OwningMech != null && __instance.isSprinting && __instance.OwningMech.ActuatorDamageMalus() != 0) { Mod.Log.Info?.Write($"Actor: {CombatantUtils.Label(__instance.OwningMech)} has actuator damage, forcing piloting check."); float sourceSkillMulti = __instance.OwningMech.PilotCheckMod(Mod.Config.SkillChecks.ModPerPointOfPiloting); float damagePenalty = __instance.OwningMech.ActuatorDamageMalus() * Mod.Config.SkillChecks.ModPerPointOfPiloting; float checkMod = sourceSkillMulti + damagePenalty; Mod.Log.Debug?.Write($" moveSkillMulti:{sourceSkillMulti} - damagePenalty: {damagePenalty} = checkMod: {checkMod}"); bool sourcePassed = CheckHelper.DidCheckPassThreshold(Mod.Config.Move.FallAfterRunChance, __instance.OwningMech, checkMod, ModText.FT_Fall_After_Run); if (!sourcePassed) { Mod.Log.Info?.Write($"Source actor: {CombatantUtils.Label(__instance.OwningMech)} failed pilot check after sprinting with actuator damage, forcing fall."); MechHelper.AddFallingSequence(__instance.OwningMech, __instance, ModText.FT_Fall_After_Run); } } }