Winter Is Coming


Adds dynamic winter - summer cycles with a moving cold snow front that gradually freezes and thaws the map. Turns natural bodies of water into ice and back. And a Christmas tree as a bonus :)

Content
8 days ago
2.0
257
Environment
Owner:
valertron
Source:
N/A
Homepage:
https://mods.factorio.com/mod/winter-...
License:
MIT
Created:
5 months ago
Latest Version:
0.3.1 (8 days ago)
Factorio version:
2.0
Downloaded by:
257 users

Note: It is not recommended to use this mod with existing saves. Some mechanics may change and could break your save in irreversible ways.

How it works

Terrain is swapped to snow and ice tiles from Aquilo during winter and restored back during summer. It keeps an internal snapshot of the "warm" terrain tiles, then replaces the visible tiles with winter variants while freezing is active. When the world thaws, it restores the terrain from that warm snapshot.

Winter tile selection works like this:

  1. hardcoded mappings, for special cases like water -> ice and vanilla dirt/grass -> snow variants
  2. frozen-<tile-name>, if such a tile prototype exists
  3. fallback to snow-flat

So if another mod provides a tile called my-soil, and also provides frozen-my-soil, it should automatically use frozen-my-soil as the winter display tile. If no frozen variant exists, it falls back to snow-flat.

When winter begins, a visible snowstorm front moves across Nauvis. Terrain behind the front becomes frozen. Grass, sand, dirt and other tiles are replaced with winter variants, while water turns into ice. During winter, snowfall effects appear around players.

When summer begins, the front moves in the opposite direction and restores the original terrain state.

By default:

  • summer lasts 22 hours
  • winter lasts 7 hours
  • the first winter starts near the end of summer cycle (season offset = 21.99) - for demo
  • the snow front moves at 7.2 tiles per second

Admins can use /wic-next-season-in-minutes <minutes> to override the time until the next season.

Technical Details

  • Efficient chunk-based world state: terrain is tracked in 32x32 chunks instead of per-tile Lua tables
  • Compact tile storage: tiles are encoded through a shared palette and packed into byte strings for efficient storage ~1024 bytes/chunk
  • Incremental snow front simulation: freezing and thawing progress in small strips, so the mod avoids processing the whole map at once

Gameplay

  • Water bodies can freeze to ice during winter
  • Players and enemies can move and build on ice
  • Structures built on ice will be lost when it melts
  • Offshore pumps cannot be placed on ice
  • Fish cannot be caught under the ice

Compatibility

For compatibility, the important part is that terrain-changing mods raise tile-change events when they modify terrain:

surface.set_tiles(..., raise_event = true)

That raise_event = true allows it to detect the change and update its warm-tile snapshot. If the changed position is currently behind the snow front / in winter, the mod can then immediately redraw the visible tile using the winter version.

Feedback is very welcome: please share your observations, bug reports, balance thoughts, and gameplay ideas