public static bool Prefix(CompBreakdownable __instance) { if (!__instance.BrokenDown) { float durabilityLoss = (float)Controller.CheckInterval / (float)Controller.ComponentLifetime; if (!__instance.InUse()) { durabilityLoss *= Settings.NotUsedFactor; } durabilityLoss *= __instance.MaintenanceComplexityFactor(); __instance.DurabilityLoss(durabilityLoss); // durability below 50%, increasing chance of breakdown ( up to almost guaranteed at 1% (minimum) maintenance. if (__instance.Durability() < .5 && Rand.MTBEventOccurs(GenDate.TicksPerYear * __instance.Durability(), 1f, Controller.CheckInterval)) { __instance.DoBreakdownMaintenance(); } } // return false to stop vanilla CheckForBreakdown execution return(false); }