Lua mods · mapshot renders · one dead experiment

Everything I have built in Factorio.

Four mods that turn the game into something else, seven rendered factories you can pan and zoom at full resolution, and one experiment whose README is an apology. Every number about the maps was read out of the save's own metadata, not estimated.

4
Mods built
292h
In-game time
7
Renders
5
Distinct worlds
2.0.66
Engine
01

Mods and scenarios

Factorio ships a Lua API good enough to build a different game on top of it. Four attempts in two lineages — a tower defense and a Bed Wars — each built once, then rebuilt from scratch when the first version made it obvious what the design was actually about. The quotes and the tables below are lifted from each repo's own README, which is where the design arguments are written down.

Bulwark

Tower defense for people who like belts

July 2026
  • Factorio 2.1
  • 30 waves
  • 4 lanes
  • Lua

Thirty waves walk down four fixed lanes at a crashed ship. The towers are Factorio’s own turrets, which are cheap — so the difficulty curve is not what you can afford, it is whether you can keep four killboxes fed at once.

The idea

Ammunition is the health bar. Every wave announces its archetype, unit count and lanes before it lands, so you never lose to information you did not have.

Second pass at the tower-defense idea, after Gauntlet TD.

What is actually scarce in Factorio is throughput. Two hundred rounds a minute arriving at four separate walls, forever, is not a purchase. It’s a base.
From the README

Wave archetypes

Archetype
Character
SWARM
Volume. Cheap chaff, wide frontage.
HORDE
Everything at once, no specialty.
VENOM
Spitters. They outrange walls and shoot the turrets rather than chew them.
BLITZ
Shrikes — fast and thin — screening heavies behind them.
IRONHIDE
Carapaces. 55% physical resistance and zero explosive resistance.
TITAN
Every 5th wave. Boss units with 10× behemoth health.

The bug that made the whole game safe

Flat + percent17.3
Percent only117.6

dps against the core

Flat damage reduction is subtracted before the percentage, so a 6-point flat reduction meant a small biter’s 7-damage bite landed for 0.75. An entire wave could chew on the hull for five minutes and lose. It reads like a balance opinion; it is arithmetic. Measured with an identical ten-biter harness either side of the fix.

dested/opus5-factorio-tower-defenseSource

Bed Wars

Minecraft Bed Wars, with a void that actually kills you

July 2026
  • Factorio 2.1
  • Walkable void
  • 1v1
  • ~2,900 lines of Lua

Two islands float in a black starfield. Protect your bed, break theirs, and once a bed is gone that player stops respawning. Factorio’s water is impassable, so a normal water gap makes bridging a formality and falling impossible — which removes the two verbs the mode is built on.

The idea

The entire mod is one omission: take water’s collision mask and drop the `player` layer. Now you can walk into it, and knockback, bridging and falling all follow from the engine’s own rules.

Rebuild of the earlier Bed Wars scenario below.

Bed Wars is three verbs: farm, bridge, break the bed. Two of them only work because the void is lethal. So the whole port comes down to one question: can you make a hole in the floor?
From the README

The whole mod, in one omission

collision_mask = {  layers = {    water_tile = true,    resource   = true,    item       = true,    doodad     = true,    floor      = true,    -- `player` deliberately absent: this is the entire mod  },}

prototypes/tiles.lua

What the mask buys you, free, from the engine

Layer
Consequence
no player
Characters walk straight out over it — you can fall.
water_tile
Buildings still refuse to be placed there — no floating turrets.
no ground_tile
Wool is placeable on it, exactly the way landfill is placeable on water.
item
Dropped items cannot exist there, so loot never strands in the abyss.
dested/opus5-factorio-bedwarsSource

Gauntlet TD

Bloons-style co-op tower defense, inside Factorio

July 2026
  • Factorio 2.1
  • 40 waves + endless
  • 7 tower families
  • Shared bank co-op

Biters pour out of a purple portal and march a serpentine stone path toward your rocket silo. They never fight back — every one that gets through costs the team a life. Seven tower families across three tiers, no ammo and no power, bought from a shared coin bank.

The idea

Eight enemy types with hard counters, so no single tower line wins: armored Tanks shrug off bullets, shielded Shades ignore lasers, and the Broodmother bursts into eight Broodlings when she dies.

Built by Sal & son. True co-op: one shared bank, shared lives, anyone can buy, upgrade, sell or start waves.
From the README

Tower families — three tiers each, no ammo, no power, no upkeep

Family
What it is for
Gunner
Cheap fast bullets, the backbone.
Zapper
Continuous laser beam.
Frost Spire
Slows everything it hits, and stacks with kill zones.
Cannon
Explosive splash, ignores armor.
Sniper Nest
Map-crossing range, huge single shots.
Flame Lobber
Firebombs that leave burning ground.
Mint
Prints coins into the team bank every wave. Yes, it’s the banana farm.

Hard counters — so no single tower line wins

Enemy
What it invalidates
Tank
Armored. Shrugs off bullets.
Shade
Energy-shielded. Ignores lasers.
Regenerator
Heals as it marches, so chip damage never finishes it.
Broodmother
Bursts into eight Broodlings when she dies.
dested/factorio-tower-defenseSource

Bed Wars (first build)

The same mode, with a computer opponent that actually plays it

July 2026
  • Factorio 2.1
  • AI opponent
  • Human 1v1
  • Lua

A complete Bed Wars scenario: generators rain resources, shops sell everything, crafting is disabled, and gold and emerald islands sit between you and the other bed. Built for a dad and his son to play together.

The idea

Single-player is not a bot on rails. Rivet takes the empty island as a real character — it collects drops, shops at the prices you pay, bridges tile by tile, contests mid, retreats to resupply, and stops respawning when its bed falls.

Everything between islands is open water — every path to the enemy is a bridge somebody chose to build, and bridges work both ways.
From the README

The clock — so a stalemate still ends

Time
Event
12:00
Emerald generators step up to Tier II.
24:00
Emerald generators step up to Tier III.
30:00
Sudden-death warning.
32:00
All beds self-destruct. No more respawns.
40:00
Draw.

Rivet — three skill tiers, independent of match pace

Tier
How it plays
Rookie
Patient and readable. Slower reactions, imperfect bursts, modest gear.
Rival
Balanced tactics. Strafes, heals, retreats, fortifies, pressures mid.
Master
Fast, sharp, relentless. Tight aim and an emerald resupply loop.
dested/factorio-bed-warsSource
02

The maps

Rendered with the mapshot mod, which walks a save and writes out a Leaflet tile pyramid — up to seven zoom levels of 1024px JPEGs per factory. They have been served from the dested.com CDN for years and still are; these cards are only the front door. Each preview is the real map at its most zoomed-out level, uncropped, so a tall save looks tall.

Largest build

mew7

The long one. Thirteen train stations across a rendered area three kilometres wide — the only save here with a rail network rather than a couple of ore runs.

Played
109 h
Extent
3,104 × 2,464 tiles
Chunks
7,469
Stations
13
Zoom
0 – 6
Seed
471325796
Open viewer

full112

save: horse2

The same run as horse, ten in-game minutes later, captured across the whole explored area instead of just the built-up column. Seven times the ground, the same factory.

Played
75 h
Extent
2,624 × 2,976 tiles
Chunks
7,626
Stations
5
Zoom
0 – 6
Seed
1102551206
Shared worldOpen viewer

horse

The same world as full112, rendered ten in-game minutes earlier and cropped tight to the factory itself. A tall north-south spine rather than a sprawl.

Played
75 h
Extent
928 × 1,184 tiles
Chunks
1,073
Stations
5
Zoom
0 – 4
Seed
1102551206
Shared worldOpen viewer

uranium from trains 5

Fifth attempt at the same idea, and the name is the whole design brief: everything nuclear arrives by rail. Compact, dense, and the reason there were four earlier ones.

Played
56 h
Extent
1,184 × 896 tiles
Chunks
1,036
Stations
2
Zoom
0 – 6
Seed
62498890
Open viewer

mew15

Built a long way from spawn: the nearest corner of the render is still 1,248 tiles west of the origin. No train stations at all — everything here moves on belts.

Played
27 h
Extent
960 × 1,408 tiles
Chunks
1,320
Stations
none — belts
Zoom
0 – 6
Seed
1119055526
Open viewer

33

Wide and shallow — 1,792 tiles across and only 768 deep, so it grew sideways rather than outward from a core. Same seed as 100gold, twice as far in.

Played
25 h
Extent
1,792 × 768 tiles
Chunks
1,344
Stations
none — belts
Zoom
0 – 6
Seed
2158851347
Shared worldOpen viewer

100gold

The shortest run in the set at twelve hours, on the same seed as 33 — which makes it a fairly good before picture.

Played
12 h
Extent
1,632 × 768 tiles
Chunks
1,224
Stations
none — belts
Zoom
0 – 6
Seed
2158851347
Shared worldOpen viewer
03

The rig

Every save above was running the same nine mods on the same engine build. All of them are quality-of-life or tooling — none change a recipe, so the factories are vanilla in every way that counts.

Engine

2.0.66

  • mapshot
  • Bottleneck
  • AutoGhostBuilder
  • factoryplanner
  • factory_organizer
  • even-pickier-dollies
  • TimeTools
  • EditorExtensions
  • flib
04

Scrap heap

Not everything survives contact with the idea. This one gets a card because the README is the most honest thing in the whole inventory.

factorio-mcp-server

March 2025

An attempt at driving Factorio from an LLM over the Model Context Protocol. The README is two words long and completely accurate about how it went.

this doesnt work lol
Source →

Sal Aiello

Maps rendered with the mapshot mod and served from the dested.com CDN, where they have lived for years. Mods are Lua, and every one of them is on GitHub.