Chapter Four · 25 February 2026

Holding Back the Cold

Chapter one was the world taking your heat away. This one is everything you can build to get some of it back, and every rule I wrote to stop that being easy.

Left is the game. Right adds the code, the reasoning and the ten weeks it took.
What changed

Four tiers of heater, one block that doubles any of them, and a swarm that quietly turns them off.

What you do with it

Find the edge of the warm zone by walking until the number drops, then build the whole base inside it.

Why it is odd

A fully infested heater reads exactly zero while still lit, still burning fuel, and still looking like it works.

4heater tiers, and you will need all of them
what one capacitor does to a heater's reach
61changes to the code, all about staying warm
50the most a swarm can take off a heater, enough to switch it off
12,000blocks it checks before it gives up on your room
80degrees the rock gives back if you dig deep enough
Play with it

Warmth in Frozen Dawn is four numbers added together, and you only control two of them.

How far the collapse has gone sets the floor. How deep you have dug decides how much warmth the planet will still lend you. A roof over your head is worth five degrees flat. Everything past that you have to build, fuel, and then defend. Move anything below and watch which one is actually keeping you alive.

In range Out of range Heater You
Heater
Thermal capacitor
Roof overhead
PhasePhase 3
DepthY 64
Frostmites on it0 mites
Phase0
Depth0
Shelter0
Heat source0
Total0
VerdictHolding

Two things to notice before you read on. The warm patch has a hard edge, so you are either in it or you are not, with nothing in between. And once phase five arrives, leaving a heater open to the sky hurts you more than dropping it a whole tier.

Four heaters. All that separates them is how far they reach and how hard they push, and one block sitting next to any of them doubles both.

Walk towards a heater and nothing happens, nothing happens, and then you are warm. There is no fading in. One block closer and you get the whole amount, one block back and you get none of it.

That was a single line on the first day and I never touched it again.

Heater
Reach
Heat
With capacitor
Capacitor heat
Thermal
7
+35.0
14
+52.5
Iron
9
+50.0
18
+75.0
Gold
11
+65.0
22
+97.5
Diamond
14
+80.0
28
+120.0

The Thermal Capacitor is the best block in the game and it does not look like much. Put one beside a heater and it reaches twice as far and gives half again as much. The cheapest heater with a capacitor beats the most expensive one without.

That is on purpose. Find a capacitor early and you get to skip most of the ladder, which is a shortcut I wanted to exist for anyone who explores before they mine.

The whole decision, TemperatureManager.javaJava
// one tier, unrolled. the other three are the same shape. if (state.is(ModBlocks.THERMAL_HEATER.get()) && state.getValue(ThermalHeaterBlock.LIT)) { int baseRadius = hasCapacitor ? 14 : 7; if (phase >= 5 && !sheltered) baseRadius = Math.max(2, (int) (baseRadius * 0.6f)); baseRadius = Math.max(2, baseRadius - radiusPenalty); int maxDistSq = baseRadius * baseRadius; float heat = hasCapacitor ? 52.5f : 35.0f; return distSq <= maxDistSq ? Math.max(0.0f, heat - heatPenalty) : 0.0f; }

Most people work out exactly how far a heater reaches within an hour, and then build the whole base inside it.

I have gone back and forth on that hard edge more than once. Warmth that fades with distance is more realistic, and it is also impossible to read while you are playing, because you would never know whether moving two blocks helped. The hard edge teaches itself, which is what I was after.

Everything else that is warm

Before you can build a heater you are stuck with whatever the world happens to have lying around that is hot. It is a short list and all of it is worse.

Source
Reach
Heat
What it is good for
Thermal vent lava
6
+42.0
The best thing in the world you did not build
Lava
4
+30.0
Warm, and it will kill you
Soul campfire
6
+28.0
Better reach than a normal one
Campfire
5
+25.0
The first night, and only the first night
Fire
3
+20.0
Desperation
Furnace, blast furnace, smoker
3
+15.0
Free, if you were smelting anyway
Magma block
2
+10.0
A floor you can stand on
Acheronite block
3
+10.0
Quiet and permanent

Put several in one room and they stack. A campfire, a furnace and a magma block together is fifty degrees, enough to carry you through phase two and most of phase three without building anything at all. That is the intended early game, and it stops working the moment phase four arrives.

6blocks is as far as the game looks for something warm
8vanilla and modded blocks that count as heat
2of them you can carry in a pocket

Shelter is not a feeling. It is the game looking straight up from wherever you are standing.

The test is the dumbest one that works. Look straight up. If any of the four blocks above your head is solid, you are sheltered, and that is worth five degrees.

You should be able to work that out without going off to read a wiki, which is why it is four lines and never got cleverer.

The roof testClick a block above your head. Empty, stone, glass, insulated glass.
You
Shelter0°C

The takeaway. Only the bottom four count, and glass is not solid. Put your one block at five up and you are standing outside.
getShelterModifier, TemperatureManager.javaJava
public static float getShelterModifier(Level level, BlockPos pos) { for (int dy = 1; dy <= 4; dy++) { BlockPos above = pos.above(dy); BlockState aboveState = level.getBlockState(above); if (aboveState.isSolidRender(level, above) || aboveState.is(ModBlocks.INSULATED_GLASS.get())) { return 5.0f; } } return 0.0f; }

Ordinary glass is not solid, so a glass roof fails and your greenhouse is a cold box with a nice view. Insulated glass is the one see-through block that counts, and that is the whole reason it exists.

Four blocks up, not one. You should be able to put a lamp in your ceiling without losing your shelter.
A roof, and then walls

Five degrees is the cheap prize. The expensive one is being properly enclosed: a roof within four blocks above you and a wall within ten in every direction. A lot of the later systems ask for that instead.

Ten blocks is generous on purpose. Any sensible room passes and an open shelter with a roof on posts does not, and nobody is forced to live in a cupboard.

Sheltered
looks
up only
range
4
worth
+5°C

Cheap, checked constantly, and the only one that feeds the temperature sum directly.

Enclosed
looks
up and out
range
4 up, 10 out
worth
gates systems

Ambience, snow suppression, and the heater exposure rule all read this instead.

Insulated glass
solid
no
counts
yes
used by
both

Written into the condition by name. Every other transparent block fails.

The phase five rule

All of that is background for one rule that changed how the whole mod plays. From phase five onward, a heater with open sky above it reaches only sixty percent as far. Not sixty percent as warm, sixty percent as far, which leaves about a third of the floor space it used to cover.

The tuning note I left myself, TemperatureManager.javaJava
// In phase 5+, exposed heaters (no roof) have 60% radius (distSq * 0.36). // This ensures Diamond exposed (r~8.4) > Base enclosed (r=7).

Picking sixty was the whole argument. It had to hurt enough that putting a roof over your heater is never optional, and not so much that spending the diamonds stopped being worth it. Sixty is the exact point where the best heater left out in the open only just beats the worst one under a roof. Any lower and none of the upgrades mattered by the end of the game.

What that means in play is that phase five is when everybody's base changes shape. Heaters out in the open that worked fine for thirty days stop working in a single night, and nothing warns you. You find out because the number on your screen drops.

5degrees for anything over your head
10blocks it will reach sideways looking for a wall
36percent of the warm floor left if you leave it open to the sky

In phase six, stepping outside kills you. So the game has to keep deciding whether the room you are standing in counts as inside.

It works like water. It starts in the air where you are standing and spreads out through every air block it can reach, up, down and sideways, asking each one the same thing: can you see the sky from here? If a single block can, the room is not sealed and you are breathing vacuum.

This is the check I rewrote the most, because it is the only one where getting it wrong kills someone who did nothing wrong.

hasBreathableAir, TemperatureManager.javaJava
public static boolean hasBreathableAir(Level level, BlockPos pos) { if (level.dimension() != Level.OVERWORLD) return false; if (hasOxygenSupport(level, pos)) return true; return isInsideSealedRoom(level, pos); } public static boolean hasOxygenSupport(Level level, BlockPos pos) { return BlastPitWarmZoneRegistry.isInsideWarmZone(level, pos) || isInsideGeothermalO2Range(level, pos); }

A blast pit warm zone or a geothermal core skips all of that. Those make their own air, so if you are standing in one the room around you does not have to be sealed at all.

Note the order in the code. Oxygen support is checked first and it short circuits, because running a twelve thousand block search to confirm something the registry already knows would be a waste of a tick.

The four ways it says no
SKYIt can see the skySomewhere in the room, the sky is visible. This is the honest one, and it is the one you caused yourself.
BOUNDSThe room is too bigThe air kept going more than 48 blocks sideways or 24 up and down from where you stand. A tunnel network is not a room.
BUDGETIt ran out of patienceTwelve thousand blocks checked and no end in sight. At that size it stops looking and assumes the worst.
UNLOADEDIt could not tellIt reached part of the world that is not loaded in. When it cannot tell, it assumes open, because guessing the other way suffocates you.

None of those guess in your favour. Guess kindly and you get someone who sealed their base, walked in, took the helmet off and died. Guess meanly and you get someone wearing a helmet in a room that would have been fine. Only one of those is something you can walk away from.

If it cannot prove you are safe, it says you are not.

The size limit does a second job that is easy to miss. Dig a long mineshaft and all that air is joined up, so without a limit every check anywhere in it would have to search the whole thing. Stopping at 48 blocks keeps the question about the room you are in rather than about the entire mine.

The fill collections are reused between calls rather than reallocated. This runs often enough that the garbage would show up.

12,000blocks visited before it gives up
48block horizontal leash on the search
6directions, including straight up

Frostmites do not attack you. They attach to the thing keeping you alive and then they wait.

Everything above is a wall between you and the cold, and a wall is only interesting if something is pushing on it. Frostmites are the push. They never hurt you directly. They break the thing keeping you alive and let the cold finish the job.

What one costs you

One mite on your heater does three things to you, and you only ever see the first.

Reach
two mites
1 block
stops at
4 blocks

Two mites cost one block of reach. Eight cost four, and that is as far as it goes.

Heat
each mite
1.5 a step
stops at
50.0
comes back
2.0

It only climbs while they are attached and the heater is lit. Clear them and it walks back down.

Fuel
each mite
1 extra
stops at
10

The same swarm that is cooling the heater is also burning through what fuels it.

The heat loss is the one that matters. It only ever climbs while they are still on it, so a swarm you ignore always ends up at the worst it can be.

Watch one switch offDrag the mites up, then drag the time along and watch the small heaters die.
The takeaway. Nothing on them yet. Every heater is giving you everything it has.
Heater
Heat
At the 50 cap
With capacitor
Capped
Thermal
+35.0
0.0
+52.5
+2.5
Iron
+50.0
0.0
+75.0
+25.0
Gold
+65.0
+15.0
+97.5
+47.5
Diamond
+80.0
+30.0
+120.0
+70.0

A swarmed Thermal or Iron heater reads exactly zero. Not weakened. Off. It is still lit, still burning fuel faster than before, still looking exactly like a working heater, and it is doing nothing at all for the number that decides whether you live. I did not plan that, I noticed it afterwards, and I kept it, because finding that out yourself sticks far better than being told.

The penalty walk, ThermalHeaterBlockEntity.javaJava
int attached = FrostmiteEntity.countLatchedToHeater(level, worldPosition); if (isLit() && attached > 0) { frostmiteHeatPenalty = Math.min(MAX_FROSTMITE_HEAT_PENALTY, frostmiteHeatPenalty + attached * FROSTMITE_HEAT_PENALTY_PER_MITE_PER_STEP); } else { frostmiteHeatPenalty = Math.max(0.0f, frostmiteHeatPenalty - FROSTMITE_HEAT_RECOVERY_PER_STEP); }
How they find you

A frostmite will come for anything within fourteen blocks, and it will come eighteen for a lit heater. Your heater is louder than you are, and they would rather have it. Six can get onto you at once and ten onto a heater, and once they are on they stay on for a while before they will even think about letting go.

TARGET_RANGE 1414 blocksHow far it will look for anything at all.
HEATER_BAIT_RANGE 1818 blocksHow far it will come for a lit heater specifically. Your base is louder than you are.
MAX_HEATER_LATCH 1010 at onceTen at once, which is exactly enough to hit every cap simultaneously.
IS_FREEZINGImmune to coldFreezing damage is rejected outright. You cannot kill a frostmite with the cold.

So you cannot freeze them off. The answer is the MiteAway burner, a block that eats fuel and floor space and does nothing else. Defending your heat should cost you some of it.

That last one closed a loophole I was glad to lose. Frost Ward Torches and anything else that freezes were the obvious answer to a swarm, and they made it far too easy, so a frostmite now shrugs off cold damage entirely and only lets go when you hit it with something else. That is the trade I wanted.

10mites on one heater is the cap
18blocks a lit heater pulls them from
0damage a frostmite ever deals you directly

Ten weeks of work and sixty one goes at it, all of them chewing on one question: how hard should staying warm be?

None of this arrived as one finished thing. It came in layers, and nearly every layer was me reacting to somebody staying alive in a way I had not meant to allow.

afea99cAdd tiered heaters, geothermal core upgrades, heat stacking, and hyperthermia system24 Feb · +1,100 / −41 · 50 files

The ladder arrives fully formed. Four tiers, stacking heat, and overheating as the other side of the same number, because once you could add fifty degrees you could also add too many.

4dc5860Add phase-based fuel scaling and shelter-gated heater radius24 Feb · +61 / −13 · 5 files

Sixty one lines, the same day, and it is the commit that decided what phase five feels like. Small commits do most of the balancing.

edd1ed2Add Hollow mob, Cryo Fuel, Frost Ward Torch, Thermal Capacitor, spawn eggs1 Mar · +1,214 / −16 · 48 files

The capacitor ships buried in a grab bag with four unrelated things. It went on to be the most important block in the survival tree.

6feb2f6add frostmite swarm pressure13 Mar · +1,044 / −86 · 28 files

The turn. Up to here the cold was the only enemy and a good base was permanent. This is where holding your heat became something you do continuously.

564fa5efeat(miteaway): add frostmite repellent burner10 Apr · +807 / −0 · 24 files

Four weeks later, the answer. Eight hundred lines added and nothing removed, which is what it looks like when a system needed a counter rather than a nerf.

23adc23feat(miteaway): polish guidebook manual presentation10 Apr

Same day. Half of shipping a mechanic is explaining it, and the guidebook entry took as much care as the block did.

What I would do differently

There should have been three heaters, not four. Iron and Gold do the same job at different prices and neither changes how you play, so the middle of the climb is waiting rather than choosing.

If I started again the jump would be Thermal, then Gold, then Diamond, and the capacitor would stay exactly where it is.

The seal check I would leave exactly as it is. It is the slowest thing in the mod and I have tried three times to make it cleverer. Every version that ran faster was also wrong about some room shape I had not thought of. Being careful and occasionally rude about a room is the right answer.