Frozen Dawn takes the sun away. This chapter is what that does to the world around you, stage by stage, and how little of it you get to see coming.
The sun shrinks, the sky goes black and the temperature falls to minus two hundred and seventy three, across seven stages.
Drag the slider and watch a world die in ten seconds, then find the warm spike at every boundary that tells you it is over.
Nothing is running while you are away. A world you have not loaded in a month is already exactly as dead as it should be.
Frozen Dawn does one thing to your world: it takes the sun away, slowly, and never gives it back.
Not as a cutscene. Not as a scripted event on day forty. Everything you can see is on the same slide. The size of the sun. The colour of the sky. How cold it is where you are standing. How long the day lasts. Whether water can still stay liquid.
All of it is read off one number: the fraction of the world's lifespan that has already burned, between 0 and 1. Every visible symptom is a function of that.
Load a world you have not touched in a month and the sky is already black. Nothing had to be running while you were gone.
That decision is the whole mod. No state to desync, no timer to drift, nothing to save except the day counter. Black is simply what the function returns at 0.61.
It also means the whole thing fits on a slider.
Drag the handle, click a marker, or use the arrow keys. This is the real thing, not a drawing of it.
The numbers are the real arrays out of PhaseManager.java, run through a line-for-line port of the mod's own interpolate().
The world does not fall apart at a steady rate.
Six arrays and a list of boundaries. That is the whole collapse.
Every value the slider showed you is one row of this table, read at one position. There is no simulation state behind it, no accumulator, no drift. Given the same day, it returns the same world.
The stages are deliberately uneven. The early ones are short, because they are meant to feel like bad weather. The last one runs for forty percent of the world's life, because it is meant to feel like it will never end.
The sun does most of its shrinking in the first five percent, which is before most people have a bed. By the time anyone notices it is smaller, the fastest part is already behind them.
SUN_DISTANCE goes 1.0 down to 0.35 between the first two stops. That is the steepest change in the entire mod.
Fourteen lines, called by everything. The sky renderer calls it. The freezer calls it. The heads-up display calls it. Nothing owns the collapse, which is why nothing can get out of step with it.
This is the one place I broke my own rule and added something that is not strictly derived from the curve, because the curve alone read as a machine.
There is one thing in the collapse that is a lie. At the edge of every stage the temperature stops falling and ticks back up, by about three degrees. It changes nothing. What it buys is a moment where you think the worst is over, and then the next stage starts, steeper than the last. Drag the slider across a marker and watch the temperature cell turn amber.
Phases 1 through 5 shipped in the first commit. The bones of the whole thing were there on day one.
Stars, suffocation, geothermal ambience, vacuum silence. The ending arrived two days after the beginning.
The famous shrinking sun is a single @ModifyConstant on vanilla's 30.0F sun quad. Twelve lines. It is the most recognisable thing in the mod and the cheapest thing in it.
Three days from empty repository to a world that can end. Everything after that was not building the collapse. It was making the rest of Minecraft agree with it.
A number going down is not a feature. The feature is what the world does about it.
Each stage turns over more of the world around you. Stage 2 makes one pass at it. Stage 4 makes five. The world does not just get colder, it gets colder faster.
Each phase unlocks a specific set of block transformations and escalates the number of checks per player per tick.
Vanilla Minecraft. No effects at all. The opening stretch exists so that the first change has something to be a change from.
The sun visibly shrinks. Rain becomes frequent, temperature dips slightly. Last chance to see the sun clearly.
The cold becomes real at minus ten. Water freezes, farmland and grass die back, snow starts to settle. This is the first phase the block freezer runs at all.
The first true survival wall at minus twenty-five. Permanent storms, fog rolls in, and lava begins to cool. Sand and ice both start converting. Checks double.
Surface survival becomes lethal at minus forty-five. Obsidian freezes. Coal ore crystallizes. Magma blocks go out. Dense fog, near darkness. Checks go to five times base.
Endgame cold, minus seventy and falling. Permanent midnight, blizzard whiteout, clouds and celestial bodies stop rendering entirely. Only deep underground is survivable, and even there your heaters shrink: an exposed thermal heater keeps sixty percent of its radius.
The last forty percent. Minus one twenty down to absolute zero. It has its own three stages, and it is the only phase where the world gets clearer as it gets worse.
Stage 5 also quietly shortens your reach. From then on, a heater with nothing over it warms only sixty percent as far.
Every lit thermal heater checks one line before deciding how far it warms. From phase 5 onward an unroofed one keeps sixty percent of its radius, rounded down.
Radius in blocks, bare / with capacitor. Warmth in degrees, flat anywhere inside the radius.
A diamond heater standing in the open still reaches further than a plain one under a roof, eight blocks against seven. So the best heater never becomes a downgrade, and a roof never becomes compulsory. Shelter just makes what you already built go further.
That comment is the whole balance decision in one line.
Campfires, furnaces and lava never take the cut at all. They keep every block of their reach and simply stop mattering instead: a soul campfire is worth twenty eight degrees against an outside temperature of minus seventy.
They sit on a different code path, one that is handed no phase at all, which is why the cut never finds them.
One phase later, a roof stops being enough by itself. What a room has to hold in is no longer heat, and the question changes from how warm you are to whether you can breathe at all. That is the next section.
The one honest escape is downward. How deep you have dug is its own ladder, from minus ten at the top of the world to plus eighty at bedrock. Dig far enough and what the surface says stops mattering, which is exactly why stage 6 eventually reaches down and takes that away too.
Every other phase takes something away by adding something: fog, snow, dark. The last one takes things away by removing the air they were in.
Stage 6 covers the last forty percent of the world's life, and it is the only stage that has stages of its own.
They are constants, not a separate system, so the same single number still drives everything.
Extreme blizzard. Louder and worse than phase 5, and it is the last thing that behaves like weather. The whiteout is still on, wind is still screaming, and most players assume this is the ending.
The atmosphere thins. Wind dies. Fog lifts. Visibility comes back, and for the first time since phase 3 you can see to the horizon, which is the point: you can finally see how far the dead goes. Stars fade in on a black sky, their alpha driven directly by how far through this stage you are.
No sound on the surface. Ice sublimates rather than melts. Breathing fails outside a sealed room or a habitable oxygen zone. The mod ships a damage type called atmospheric_suffocation that exists only for this stretch.
Below minus one fifty, anywhere open to the sky, the air itself starts settling out as a block. It is the only thing in the mod that genuinely undoes itself, and it undoes itself for a reason: build a heat source and the deposits around it boil off. The world you get back is exactly as big as the warmth you can hold.
Requires phase 6, sky access, and a local temperature under minus 150.
Runs on the same tick. Warm the air and the deposit goes.
Warm zones and volcanic fields are skipped outright, so the sanctuaries stay breathable by construction rather than by luck.
By the very end there is nothing left to freeze. It keeps going anyway, because a world that stops changing when it is finished feels finished, and this one is supposed to feel like it is still going somewhere without you.
The block freezer keeps escalating inside phase 6 after the surface is done. Past 0.65 it starts a second sublimation pass, and past 0.75 it adds another ten percent on top of every remaining conversion chance.
You walk two thousand blocks east on day seventy and the grass is green.
This is the bug that gave the chapter its name, and it is not really a bug. Minecraft only builds the land when somebody goes there. Everything that makes the world colder only runs close to a player. So land nobody has walked on has never been cold. The apocalypse had been happening, precisely and beautifully, only in the places someone had already stood.
Every ambient system in the mod, the freezer, the snow and the vegetation decay, runs inside a 64 block radius of a player and gets a few hundred block checks per tick.
So it needed a way to give a brand new chunk a past.
You cannot replay two months of missed time, and there would be no point. Nobody was there to see it. The land only has to look like somewhere the last seventy days happened to.
That second sentence is the entire design. The other half of it is that producing the result must not stall the server.
The steady state. A player wandering into fresh terrain at walking pace.
Triggered by 64 fresh chunks queued, or 48 pending within 12 chunks of a player. Elytra, boats, portals.
Once, on server start, before anyone is looking. The most generous budget goes where nobody can feel it.
The tick loop exits on whichever of the three limits it reaches first, and then leaves the queue exactly where it was.
The order is not arbitrary. Trees have to come out before the snow is sorted out, or the snow lands on branches that are about to be deleted, and then hangs there in mid air.
A chunk is not transformed in one go. It is walked through seven passes, each with its own cursor, and the work can stop between any two of them and resume on a later tick.
Every chunk stores the version of the transform it received and the day it was brought up to. Change the rules, bump the number, and every chunk in every existing save quietly re-qualifies for catch-up the next time it loads. It has been bumped four times. That single integer is the reason I could keep changing what phase 4 means without breaking anybody's world.
One deliberate exception: land inside a protected ORSA structure is skipped entirely. The sanctuaries are supposed to be the places the apocalypse did not reach, and the surest way to guarantee that is to have the catching up agree.
899 lines of manager and a 199 line saved-data class, in one commit. It worked.
Five days later I rewrote roughly two thirds of it. This is where the three budget modes and the resumable cursors came from, because the first version would happily blow a 200 millisecond tick when you flew somewhere.
The longest gap in the entire project sits immediately after this file, and it is the only stretch of the repository with nothing in it at all.
The first commit back, after six weeks away, is this file again. Floating snow where a tree used to be.
The last pass in the list turned out to need a bound of its own. Eight commits total, spread across three months.
Three days to build the collapse. Six months to make the rest of the game agree with it.
The gap between those two numbers is the honest story of this chapter, and it is not the story I expected to be telling. I thought the hard part would be the physics. The hard part was that a single shared value has to be read correctly by forty different things, every one of which was written on a different day by someone who had slightly forgotten the rules.
The number 0.72 had been typed out by hand in the sky renderer, the wind ambience, the flag physics, the frost overlay, the oxygen HUD, the music controller, the suit ambience and seventeen other places. Changing what "mid phase 6" meant required finding all of them. This commit made it one constant and touched twenty-four files to do it.
Same afternoon. This is the one that introduced Phase6Stage, so the question stopped being "is progress above 0.72" and started being "which stage are we in". Twenty-four lines added to PhaseManager, and they paid for themselves within a week.
Two commits, one day, no new behaviour at all. If you played the mod before and after, nothing changed. It is still the most useful thing I did to this system after the first week, and it is the kind of work that leaves no trace in a changelog.
Forty-one days with no commits, starting five days after the chunk loader's rewrite. I would like to say it was a planned break. It was not. I had just spent a week rewriting two thirds of the hardest file in the project because the first version stalled the server, it was finally correct, and I could not make myself open the editor again.
The thing that eventually brought me back was a bug report about snow floating where a tree used to be. Not a grand plan, not a new feature. A one file fix, 136 lines, in the same class I had walked away from.
The mod is about a world that keeps getting colder whether or not anyone is there to watch. I did not notice until I read my own commit history back that I had built the system that handles exactly that, and then tested it on myself.