Tools · C++ · Firaxis Games
Region variants from a single map
Artists dress one map, once. The tool bakes it into every regional variant automatically. Map production effort for regional maps dropped by 62%, and every environment artist on the team adopted it.
Built for an unannounced strategy title, so there are no screenshots. The diagrams are abstract.
Same map, over and over
Strategy maps often need the same layout in several regional looks: identical gameplay, completely different art.
The usual way to get there is to dress the blockout by hand once per region, as separate maps. With four regions, that's four full passes for every level.
4 full passes → 4×
1 pass + rule markup → 1.5×
Rules on the content, not copies of the map
Artists work in one default map. Any actor in it can carry a region rule that says, for each region, what should happen to it:
A mock of the editor preview: one map, flipped between regions. Abstract shapes, not real content.
| Actor | Region A | Region B | Region C | Region D |
|---|---|---|---|---|
| Building | keep | swap → Building B | swap → Building C | keep |
| Market stall | keep | keep | remove | swap → Cart |
| Rock cluster | keep | keep | keep | keep |
Swap to a different actor, keep it, or remove it, per region. Illustrative content.
- Defaults and overrides. Rules can live on an actor's defaults, so a whole kind of content behaves the same everywhere, or be set on a single instance in the level when one spot needs to differ.
- Preview in place. Artists stay in the one map and flip between regions in the editor, watching content swap live, without baking anything.
- Bake. The tool writes out one map per region, each tagged with its region.
- Change detection. When the default map or its rules change, the tool detects it and rebakes the variants, so they stay in sync with the source.
- Load. At runtime, gameplay data picks the map tagged for the current region.
- Authorone map + rules
- Previewflip regions in the editor
- Detectwhat changed
- Bakeone map per region
- Loadby region tag
Why bake instead of swapping at runtime
The tempting version swaps content when the level loads. I chose to bake instead:
- Deterministic. A baked map is the same every time it loads, so a bug in one region reproduces the same way every time.
- Testable. QA can test each variant as its own map, and performance can be profiled per variant.
- Simple at runtime. The game just loads a map. All of the variant logic lives in the editor and the bake.
The cost is that baked maps can go stale, which is why change detection matters. The other hard part was the editor preview, which has to reproduce the bake's result live while an artist works.
4× down to 1.5×
The numbers are the hours artists spend per level. Dressing the one map is the 1×. The extra half is marking up content with its region rules, which is mostly a one-time cost per piece of content. Overall that's 62% less map production effort.
Every environment artist on the team adopted it. The rules are simple enough to understand at a glance: keep, swap, or remove.