Stellaris: 3x Bigger Worlds
Last verified: 2026-05-24
![]()
What the mod does
- 3x planet & moon size. Habitable planets spawn at sizes 36–75 (vanilla 12–25); habitable moons at 30–45 (vanilla 10–15). Because vanilla awards one district per planet size point (
NUM_DISTRICTS_FROM_PLANET_SIZE = 1, unchanged), every habitable world has ~3x district slots from generation. - 3x deposit max-district adds. Every planetary feature that grants
district_mining_max_add,district_farming_max_add,district_generator_max_add, etc. now grantsN * 3. Same for habitat deposits (district_hab_*_max_add) and theplanet_max_districts_addmodifier used by features like Crystalline Highlands. - 3x orbital deposit yields. Every numeric resource value inside a
produces = { … }block on uncolonizable bodies is multiplied by 3 (d_minerals_3produces 9 minerals/mo instead of 3, etc.). - 3x strategic resource district contribution.
@DISTRICTS_FROM_SR_DEPOSITS(3 → 9) and@DISTRICTS_FROM_SR_DEPOSITS_SMALL(1 → 3) for the zone-district lines that use the variable instead of a literal.
Why it stays at 3x and doesn't compound
Each axis is multiplied independently of the others:
| Axis | Vanilla | Mod | Ratio |
|---|---|---|---|
| Planet size (= district slots) | 25 | 75 | 3x |
d_mineral_fields planetary feature |
+1 max mining district | +3 max mining district | 3x |
d_minerals_3 orbital deposit |
produces 3 minerals/mo | produces 9 minerals/mo | 3x |
| Per-district per-pop output | (untouched) | (untouched) | 1x |
A planet has 3x slots × 1x per-slot output = ~3x total resource production, not 9x. The feature line that reads +3 max mining instead of +1 max mining keeps the proportion of feature-contributed slots constant; it doesn't add output on top of the size tripling.
Negative values (blocker penalties like district_farming_max_add = -1) are preserved at vanilla magnitude on purpose. On a planet that's 3x larger, blockers become proportionally less painful, which fits the "fewer, bigger, richer worlds" feel.
upkeep = { … } blocks are also left at vanilla magnitude — a deposit that vanilla defined as produces = { energy = 4 } upkeep = { energy = 1 } becomes produces = { energy = 12 } upkeep = { energy = 1 }, so net energy skews ~4× on that axis instead of 3×. Few vanilla deposits use upkeep, so the aggregate impact is small; symmetric upkeep scaling would be a separate behaviour change.
How it works
Two override surfaces — no events, no on_actions, no logic, just data:
mod/common/scripted_variables/zz_bworlds_planet_sizes.txt— redefines the six size / SR-deposit variables. Thezz_prefix sorts after vanilla's100_scripted_variables_zones.txt, so the redefined values win when Paradox last-write-wins the constants.mod/common/deposits/*.txt— same-named overrides for all 24 vanilla deposit files. Generated byscripts/build.pywith regex multiplication of positivedistrict_*_max_addand every numeric value insideproduces = { … }blocks.@VARreferences are left untouched (they get their tripling from the scripted_variables override above), and negatives are byte-preserved.
When Stellaris patches, re-run scripts/build.py and scripts/preflight.py. The regex transformations re-apply to the new vanilla files; preflight's exact-multiplier check catches any sequence drift.
Links
- Repo:
apps/mods/stellaris/3x-bigger-worlds/ - Steam Workshop: (not yet uploaded)
Build
python3 apps/mods/stellaris/3x-bigger-worlds/scripts/build.py
Reads from ~/Library/Application Support/Steam/steamapps/common/Stellaris/common/. The multiplier is a single constant at the top of build.py (MULTIPLIER = 3); change it for a 2x or 5x variant and re-run.
Pre-game verification
python3 apps/mods/stellaris/3x-bigger-worlds/scripts/preflight.py
Nine automated checks against the local vanilla install: brace balance, vanilla key coverage per deposit file, scripted-variables completeness at the expected multiplier, exact-multiplier verification of every generated district modifier and produces value, negative-value preservation, localisation BOM, descriptor sanity, deploy symlink integrity, and Workshop thumbnail validity (real PNG bytes, 512×512, no alpha, <1 MB — the same failure class that broke the first Multi-Megastructures Workshop upload). Full test plan in apps/mods/stellaris/3x-bigger-worlds/TESTING.md.
Deploy
apps/mods/stellaris/3x-bigger-worlds/scripts/deploy.sh
Creates a symlink ~/Documents/Paradox Interactive/Stellaris/mod/3x-bigger-worlds → repo's mod/ folder, plus the outer 3x-bigger-worlds.mod launcher descriptor with an absolute path= line. Idempotent. Because the deployed copy is a symlink, re-running build.py is picked up by the launcher with no re-deploy.
Test in-game
- Launch Stellaris → Paradox Launcher → Mods → enable 3x Bigger Worlds → Play.
- Planet size. Open the home planet — size should read 75 (vanilla starting capital is 25). Survey neighbour systems; habitable planets should be in the 36–75 range, moons 30–45.
- Planetary deposit district adds. Click a planetary feature ("Mineral Fields", "Bountiful Plains", "Geothermal Vent"…). The tooltip should show
+3 Max Mining Districts, not+1. Spot-check across at least two planets. - Orbital deposit yields. Find an uncolonizable body with a deposit shown in the system view. Vanilla
d_minerals_2yields 2/mo; under the mod the same deposit yields 6/mo. - Strategic resource districts. Build a zone on a planet with an SR deposit; the unlocked district adds 9 max instead of 3.
- Tail
~/Documents/Paradox Interactive/Stellaris/logs/error.logafter starting the game. Any new[ERROR]mentioning the override files is a regression — most likely a vanilla key the override accidentally drops (preflight C2 would catch it pre-game).
Known caveats
- Balance. 3x resources trivializes the early-mid game; pop growth, upkeep, and AI weights are untouched, so empires will outgrow their pop base. Intentional for the "fewer, bigger, richer worlds" feel. Drop
MULTIPLIERto 2 inbuild.pyfor a tighter variant. - AI. Vanilla AI weights assume vanilla sizes. AI empires build, but under-utilize the new slots.
- Save compatibility. Planet size changes only affect newly generated galaxies. Deposit yield changes apply immediately on load (modifiers re-evaluate).
- Mod conflicts. Any other mod that overrides
common/deposits/*.txtor redefines the same@habitable_planet_*_sizevariables will conflict — last-loaded wins. - Hard-coded
planet_sizechecks. A few scripted events haveplanet_size <= 25conditions; behaviour around those events on size-75 planets is not characterized. Sample a quick game before committing to a long run.
Steam Workshop upload (when ready)
- (Optional)
node scripts/generate-thumbnail.mjsto regeneratemod/thumbnail-src.pngvia Gemini, OR drop your own source image atmod/thumbnail-src.<ext>(PNG / JPEG / WebP / TIFF). The shipped thumbnail is the Gemini-generated one. scripts/process-thumbnail.sh— re-encodes the source to canonical 512×512 8-bit RGB PNG atmod/thumbnail.png(avoids the "JPEG bytes with.pngextension" trap that broke the first Multi-Megastructures upload) and syncs the blog companion image.scripts/preflight.py— C9 verifies the thumbnail is real PNG, 512×512, no alpha, under 1 MB.- Launcher → Mods → Mod Tools → Upload Mod.
- Select "3x Bigger Worlds", add description, upload.
- Change visibility from Private to Public on the Workshop page.