@/lua/vehicle/powertrain/combustionEngineThermals.lua
M.engineBlockOverheatDamage = min(M.engineBlockOverheatDamage + parentEngine.engineWorkPerUpdate, damageThreshold.headGasket)
if M.engineBlockOverheatDamage >= damageThreshold.headGasket and not damageTracker.getDamage("engine", "headGasketDamaged") then
headGasketBlown()
M.oilOverheatDamage = min(M.oilOverheatDamage + parentEngine.engineWorkPerUpdate, damageThreshold.connectingRod)
if M.oilOverheatDamage >= damageThreshold.connectingRod and not damageTracker.getDamage("engine", "rodBearingsDamaged") then
connectingRodBearingsDamaged()
damageTracker.setDamage("engine", "oilOverheating", true, true)
elseif damageTracker.getDamage("engine", "oilOverheating", true) then
damageTracker.setDamage("engine", "oilOverheating", false)
--if our cylinder wall gets too hot, the piston rings will be damaged eventually
if M.cylinderWallOverheatDamage >= damageThreshold.pistonRing and not damageTracker.getDamage("engine", "pistonRingsDamaged") then
pistonRingsDamaged()
if adjustedRadiatorDamage > 0 and not damageTracker.getDamage("engine", "radiatorLeak") then
damageTracker.setDamage("engine", "radiatorLeak", true, true)
damageTracker.setDamage("engine", "coolantOverheating", true, true)
elseif damageTracker.getDamage("engine", "coolantOverheating") then
--if the coolant cools down again, we don't leak anymore because of overpressure
M.engineBlockOverheatDamage = min(M.engineBlockOverheatDamage + parentEngine.engineWorkPerUpdate, damageThreshold.headGasket)
if M.engineBlockOverheatDamage >= damageThreshold.headGasket and not damageTracker.getDamage("engine", "headGasketDamaged") then
headGasketBlown()
M.oilOverheatDamage = min(M.oilOverheatDamage + parentEngine.engineWorkPerUpdate, damageThreshold.connectingRod)
if M.oilOverheatDamage >= damageThreshold.connectingRod and not damageTracker.getDamage("engine", "rodBearingsDamaged") then
connectingRodBearingsDamaged()
damageTracker.setDamage("engine", "oilOverheating", true, true)
elseif damageTracker.getDamage("engine", "oilOverheating", true) then
damageTracker.setDamage("engine", "oilOverheating", false)
--if our cylinder wall gets too hot, the piston rings will be damaged eventually
if M.cylinderWallOverheatDamage >= damageThreshold.pistonRing and not damageTracker.getDamage("engine", "pistonRingsDamaged") then
pistonRingsDamaged()
end
if not damageTracker.getDamage("engine", "oilLevelCritical") then
damageTracker.setDamage("engine", "oilLevelCritical", true, true)
end
elseif damageTracker.getDamage("engine", "oilLevelCritical") then
damageTracker.setDamage("engine", "oilLevelCritical", false)
if oilStarvingTimer >= oilStarvingTimerThreshold then
if not damageTracker.getDamage("engine", "starvedOfOil") then
damageTracker.setDamage("engine", "starvedOfOil", true, true)
end
elseif damageTracker.getDamage("engine", "starvedOfOil") then
damageTracker.setDamage("engine", "starvedOfOil", false, false)
oilLubricationCoef = min(oilLubricationCoef, linearScale(fluidReservoirs.oil.currentMass, fluidReservoirs.oil.maximumSafeMass, fluidReservoirs.oil.maximumSafeMass * 1.1, 1, 0.8))
if not damageTracker.getDamage("engine", "oilLevelTooHigh") then
damageTracker.setDamage("engine", "oilLevelTooHigh", true, true)
end
elseif damageTracker.getDamage("engine", "oilLevelTooHigh") then
damageTracker.setDamage("engine", "oilLevelTooHigh", false)
if not damageTracker.getDamage("engine", "exhaustBroken") then
damageTracker.setDamage("engine", "exhaustBroken", true)