[2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
Moderator: ickputzdirwech
[2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
Which is inconsistent with the steam boiler and steam engine, both of which operate at exactly 150 + ambient_temperature = 150 + 15 = 165, yielding the expected ratio of 2-to-1.
Based on the current intended balance, heat exchangers and steam turbines should operate at 500 + 15 = 515 degrees, and have a theoretical ratio of 10-to-6, but due to this oversight the ratio becomes 10-to-5.82 (or 10.3-to-6 depending on rounding, see below), where heat exchangers output 100/0.97 (non-decimal floating point -> 103.0928...) instead of 100 steam/s, and steam tubines operate at 5.82 MW instead of the expected 6 MW.
Initially reported here
This is a 3-line fix in their respective entity and energy_source definition (500 -> 515) and has no further effect on game balance.
https://lua-api.factorio.com/latest/pro ... emperature
https://lua-api.factorio.com/latest/pro ... emperature
https://lua-api.factorio.com/latest/typ ... emperature
Based on the current intended balance, heat exchangers and steam turbines should operate at 500 + 15 = 515 degrees, and have a theoretical ratio of 10-to-6, but due to this oversight the ratio becomes 10-to-5.82 (or 10.3-to-6 depending on rounding, see below), where heat exchangers output 100/0.97 (non-decimal floating point -> 103.0928...) instead of 100 steam/s, and steam tubines operate at 5.82 MW instead of the expected 6 MW.
Initially reported here
This is a 3-line fix in their respective entity and energy_source definition (500 -> 515) and has no further effect on game balance.
https://lua-api.factorio.com/latest/pro ... emperature
https://lua-api.factorio.com/latest/pro ... emperature
https://lua-api.factorio.com/latest/typ ... emperature
Last edited by dupraz on Sat Jun 20, 2026 12:39 pm, edited 6 times in total.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
I can expand on what I mean by "likely intended balance" (since this dates back to 0.15, go ask who implemented this).
Take the steam boiler and steam engine, there is a sort of error-prone system where burners are defined by their energy consumption (per second), and generators by their fluid consumption (per tick):
- Steam boilers consumption is fixed at 1.8 MW.
- Steam engines consumption is fixed at 30 steam/s (0.5 per tick).
The middle-man between them is steam, at a given temperature delta of 150 degrees (150 + 15 = 165 operating) and a fixed 200J-per-degree-per-unit heat capacity constant (the following is calculated at runtime):
- Boilers produce: 1.8 MW / 150 degrees / 200 J = 60 steam/s.
- Steam engines produce: 30 steam/s * 150 degrees * 200 J = 900 kW.
Making the ratio exactly 1-to-2 (as obviously intended).
Now take the heat exchanger and steam turbine, they are defined thusly:
- Heat exchangers consumption is fixed at 10 MW.
- Steam turbines consumption is fixed at 60/s (1.0 per tick).
At a 500 degrees (very likely intended) delta, this checks out, because:
- Heat exchangers produce: 10 MW / 500 degrees / 200 J = 100 steam/s.
- Steam turbines produce: 60 steam/s * 500 degrees * 200 J = 6 MW.
Making the ratio 10-to-6.
However, as the delta in practice does not account for the 15 degrees ambient temperature, it becomes 500 - 15 = 485 degrees, and thus:
- Heat exchangers produce: 10 MW / 485 degrees / 200 J = 10_000 / 97 = 103.0928... steam/s (non-decimal).
- Steam turbines produce: 60 steam/s * 485 degress * 200 J = 5.82 MW.
If the heat exchange steam production is floored in practice (because it's an integer internally), then the ratio become:
- 10.3-to-6 (and around 0.1% of the energy is lost during rounding)
If it's treated as a floating-point, then in theory:
- 10-to-5.82
Neither seem correct nor meaningful.
Conclusion: the way entities are defined does not make the mistake clearly apparent until runtime, and why it's gone unnoticed until now.
Take the steam boiler and steam engine, there is a sort of error-prone system where burners are defined by their energy consumption (per second), and generators by their fluid consumption (per tick):
- Steam boilers consumption is fixed at 1.8 MW.
- Steam engines consumption is fixed at 30 steam/s (0.5 per tick).
The middle-man between them is steam, at a given temperature delta of 150 degrees (150 + 15 = 165 operating) and a fixed 200J-per-degree-per-unit heat capacity constant (the following is calculated at runtime):
- Boilers produce: 1.8 MW / 150 degrees / 200 J = 60 steam/s.
- Steam engines produce: 30 steam/s * 150 degrees * 200 J = 900 kW.
Making the ratio exactly 1-to-2 (as obviously intended).
Now take the heat exchanger and steam turbine, they are defined thusly:
- Heat exchangers consumption is fixed at 10 MW.
- Steam turbines consumption is fixed at 60/s (1.0 per tick).
At a 500 degrees (very likely intended) delta, this checks out, because:
- Heat exchangers produce: 10 MW / 500 degrees / 200 J = 100 steam/s.
- Steam turbines produce: 60 steam/s * 500 degrees * 200 J = 6 MW.
Making the ratio 10-to-6.
However, as the delta in practice does not account for the 15 degrees ambient temperature, it becomes 500 - 15 = 485 degrees, and thus:
- Heat exchangers produce: 10 MW / 485 degrees / 200 J = 10_000 / 97 = 103.0928... steam/s (non-decimal).
- Steam turbines produce: 60 steam/s * 485 degress * 200 J = 5.82 MW.
If the heat exchange steam production is floored in practice (because it's an integer internally), then the ratio become:
- 10.3-to-6 (and around 0.1% of the energy is lost during rounding)
If it's treated as a floating-point, then in theory:
- 10-to-5.82
Neither seem correct nor meaningful.
Conclusion: the way entities are defined does not make the mistake clearly apparent until runtime, and why it's gone unnoticed until now.
Last edited by dupraz on Sat Jun 20, 2026 12:46 pm, edited 3 times in total.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for ambient temperature delta
Moderators: Why was this moved from the bug tracker into the feature request forum? This is clearly an unintended bug, not some feature on my wish-list.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for ambient temperature delta
I too am annoyed when threads get moved without explanation, but it's pretty obvious why. While the 500 vs 515 degrees might have been an oversight in 2017, it is still a fundamentally arbitrary number that they chose to keep for 9 whole years. So much gameplay experience has built up around the existing number that changing it would be a big deal. Keeping it the way it is has not been unintended for a long time.
Has anyone ever made a mod to pay with the proposed ratio?
Has anyone ever made a mod to pay with the proposed ratio?
My mods: Multiple Unit Train Control, RGB Pipes, Shipping Containers, Rocket Log, Smart Artillery Wagons.
Maintainer of Auto Deconstruct, Cargo Ships, Vehicle Wagon, Honk, Shortwave.
Maintainer of Auto Deconstruct, Cargo Ships, Vehicle Wagon, Honk, Shortwave.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for ambient temperature delta
The ratio change is barely significant, except the game would stop disappearing 0.1% of your steam energy due to rounding down meaningless floating points.robot256 wrote: Sat Jun 20, 2026 12:43 pm So much gameplay experience has built up around the existing number that changing it would be a big deal.
I've been playing this way ever since I found out about this issue, never thought about bringing it up until 2.1, but this seemed like a good stopping gap to finally fix the mistakes of the past.robot256 wrote: Sat Jun 20, 2026 12:43 pm Has anyone ever made a mod to pay with the proposed ratio?
Last edited by dupraz on Sat Jun 20, 2026 12:53 pm, edited 1 time in total.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for ambient temperature delta
Note that this isn't a modded "proposed" ratio, but the actual "intended" ratio, so this isn't a "balance tweak" to "make things easier" like this mod is clearly proposing, but fixing a bug in how it's calculated.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for ambient temperature delta
Also, care to tell me what you think the actual ratio as currently implemented by the game actually is? As in what your "experience" has interpreted as a fundamental part of the game?robot256 wrote: Sat Jun 20, 2026 12:43 pm it is still a fundamentally arbitrary number that they chose to keep for 9 whole years.
Is it 103-to-60, as the steam tooltip implies, or is it 1000-to-582, as the power tooltip implies? No wrong answers here please. Maybe your brain simply ignored the blatant discrepancy between them until now.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
The last time I played a real game, my nuclear setups were hodgepodge messes that intentionally didn't follow any ratios. I just fit as many heat exchangers as I could, and then added turbines and steam storage as much as I could. It wouldn't matter to me if the number changed, but it also doesn't break anything with it staying as is.
My mods: Multiple Unit Train Control, RGB Pipes, Shipping Containers, Rocket Log, Smart Artillery Wagons.
Maintainer of Auto Deconstruct, Cargo Ships, Vehicle Wagon, Honk, Shortwave.
Maintainer of Auto Deconstruct, Cargo Ships, Vehicle Wagon, Honk, Shortwave.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
Fun math problem for anyone interested, what is the correct ratio between these two units?
Note: even the power tooltip for the turbine here is innacurate, it says "5.82 MW" in the inventory.
Note: even the power tooltip for the turbine here is innacurate, it says "5.82 MW" in the inventory.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
Nothing here is a bug, its just some numbers not being round enough for people with OCD. I will ask other devs if we want to apply this balance change, but for now i am closing this topic because it appears to be too heated with rage about this subject not being treated seriously.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
Decision was made: we want to keep current numbers and there are no bugs here.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
So temperature aside, is it really not a bug that heat exchangers generate less energy than they consume due to rounding (around 1 MJ of steam for every GJ of heat), or is this just a tooltip inaccuracy? It's about the same floating-point floored into integer issue I mentioned yesterday.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
Yes, in-game tooltips display rounded numbers to an arbitrary position; not the internal game-engine values. When benchmarked over 6000 ticks this setup produces 10309.2781 units of Steam / 100 Seconds = 103.092781 per second.
Whereas The Wiki (and a TI-83 calculator) gives an estimated production rate of 103.0927835/s per second according to the values defined in entities.lua. You would need to dig into FluidEnergySource.cpp and friends to determine where the floating-point erorr has crept in; but it does not seem significant to gameplay.
Re: [2.0.77] Heat exchanger and steam turbine operating temperature does not account for delta to ambient temperature
What irks me is the fact that for a game design to be cohesive, you need the person in charge of game design to remain consistent, when you look at the numbers today, you can readily tell that the thought process that went into one did no follow into the next, probably because these decisions were made by different people, at different times, without much regard for prior art.
Someone, at some point, decided to make the steam engine to steam boiler ratio exactly 2-to-1 by purposely accounting for the 15 degree offset, that simply never happened for heat exchangers and steam turbines.
So now you have one tier of steam that can currently store 30 kJ per unit (would have been 27 kJ before offset), and one tier that can currently store 97 MJ (would be 100 MJ after offset).
Someone, at some point, decided to make the steam engine to steam boiler ratio exactly 2-to-1 by purposely accounting for the 15 degree offset, that simply never happened for heat exchangers and steam turbines.
So now you have one tier of steam that can currently store 30 kJ per unit (would have been 27 kJ before offset), and one tier that can currently store 97 MJ (would be 100 MJ after offset).


