Worldbuilding

Ironworks loading screen showing the custom map editor

I build Washed Up's maps with Ironworks, the worldbuilding application I develop alongside the game. It loads a Rust map into a scene where I can work on the terrain, generate places, connect them and inspect the result. I write the processes that do that work, so I can change the tools while making the map.

The maps are generally 4,000–6,000 metres across. Procedural placement makes that scale manageable. I can spend time on the shape of a city, the distribution of dive sites or the route through a valley, then use the editor to correct individual results. A finished map combines those larger passes with manual decisions about particular places.

I usually start in one of two ways. I can enhance a procedural Rust map, keeping the geography and monuments that already work. Or I can make terrain in World Creator, prepare it in RustEdit and run the processes that place Rust's built-in monuments. Ironworks takes over from there.

This account follows the main stages. I sometimes repeat a pass, use an alternative generator or return to an earlier stage after inspecting what happened farther along. The images are actual editor and game views; each opens its original screenshot.

Ironworks: the workbench behind the island

Ironworks is a Unity application. I can examine ground height, inspect an object's identity and dimensions, work with roads and rivers, and run a process against the loaded world. Its plugin system lets me add or change a process while the application is running and test it on the map in front of me.

Several layers describe the same ground. Height gives it shape. Surface weights mix the visible soil, stone, sand and snow. Biome weights describe climate regions. Topology supplies overlapping classifications such as shore, forest and built area. I need those layers to agree: a patch that looks like a shoreline also needs the classifications that later tools and the game use to recognize it.

Weights let me favor particular choices while retaining variety. Masks identify the ground where a process may operate. Seeds let supported generators try another arrangement or revisit a useful one. The individual processes use geometry, graph searches, noise and physics according to what they are placing.

I also need each pass to leave information the next one can use. Biome work informs ground treatment and vegetation. Streets constrain the buildings in a city. A finished city supplies a destination for trails and inhabitants. A reef needs both a physical composition and an identity the server can recognize when somebody dives there.

Giving places a meaning

I use virtual objects to describe much of that authored information. These are editor-visible markers with a type, position, identity and optional settings. A city center, graveyard, trail endpoint or NPC location can each carry the information appropriate to it. A marker can also own a group of map objects, which lets me inspect, move and adjust the site together.

Static Object Tagger gives an existing prop a particular role. When I save the map, Ironworks exports companion data alongside it. The server uses that data to connect the exact object or place to the gameplay that belongs there. I can identify a landing pad, a recovery location or a useful interaction without asking the server to guess from appearances.

CopyPaste structure placement with its authored footprint shown in Ironworks

CopyPaste Structure Creator handles buildings made with Rust's building pieces. It reads the saved structure, calculates its footprint and gives me a centered placement I can move and turn. Ground support and the built-area classification follow that footprint. The saved placement includes the structure data the server needs to construct the building at the chosen location.

I use this for working sites such as transport stations. The building, its supporting ground and its authored identity stay together when I change the placement. The automatic station generator uses the same groundwork later, while I can still place a particular stop by hand.

Working the landscape

Biome Blender: making regions meet

I use Biome Blender to develop the transitions between existing regions. It reads the climate context and coordinates the visible ground materials with it. Where enabled, the process also adjusts biome weights and relevant classifications. Existing terrain and authored regions remain inputs to those decisions.

Perlin noise gives neighboring samples related values. Domain warping bends the coordinates used to sample that variation. Combining broad and fine patterns helps me make a boundary gradual and irregular at several scales. I can soften a sharp division while keeping the surrounding regions recognizable.

Later population passes read the changed layers. Their choices about plants, rocks and resources need to suit the ground a player sees. I inspect the transitions with that later work in mind, including the views and routes through them.

Splat Enhancer: reading the shape of the ground

Splat Enhancer refines the incoming surface painting. It reads terrain shape, biome information, water, paths and nearby objects, keeping the existing painting as a starting point. That lets me improve the detail without discarding every earlier material decision.

Finite differences estimate slope and curvature from nearby heights. Downhill flow accumulation suggests where drainage gathers. Those calculations help distinguish ridges, exposed slopes, sheltered hollows and wetter ground. I use the estimates to guide material mixtures and inspect the resulting surface against the landscape.

Noise at several scales adds variation within those treatments. Broad patterns can give an area its character; smaller changes keep the close view from becoming uniform. This surface work then provides context for vegetation, rocks and the other objects placed afterward.

Building an ocean worth entering

From an asset catalog to an artificial reef

An artificial reef assembled from wreckage and other objects in Ironworks

I begin a reef with a catalog of usable objects. Artificial Reef Catalog Builder examines their geometry, collision shapes, surfaces and other useful characteristics. A generator needs to know how an object can rest against another, how much room it occupies and which surfaces are suitable for further placement.

Artificial Reef Generator uses that catalog to assemble an individual composition. Objects settle against actual collision geometry in an isolated authoring simulation. I inspect the preview and accept a reef that fits the location. Its finished objects are saved into the map under a grouped virtual object.

The grouping lets me keep track of the whole composition while its pieces remain ordinary map objects. I can check the routes between wreckage, the places a diver might search and the view from different directions. Growth and biological detail help the assembled objects fit their surroundings.

Selected wreckage and props can match the salvage catalog and offer interactions. Reef-aware loot can also recognize the authored group. That connects the time spent building a site to the equipment, materials and discoveries a player may bring back from it.

Island Reef Generation: an exploration network

Island Reef Generation distributes those compositions around the island. Coastline shape, depth, available space and existing sites affect where they fit. I can develop a mixture of coastal landmarks, accessible submerged reefs and deeper destinations while retaining hand-placed work.

I inspect the distribution as well as the individual reefs. Several good sites concentrated in one corner can leave much of the ocean without a reason to visit. A set that demands the same equipment every time gives little room for a first dive or an improvement in preparation. Settings for scale, depth and coverage help me vary the trips available around the coast.

Underwater Features: detail, life and useful uncertainty

An underwater dive site being inspected in the Ironworks scene

Underwater Features adds dive sites, trap patches, aquatic life, wreck growth, lighting and rewards. It checks depth, slope, support, spacing and existing objects. Different depth bands can receive different treatment, allowing a shallow search and a longer dive to have their own character.

I work on the cues around a site too. Seabirds, visible structure, growth or light can suggest somewhere worth investigating. The player still has to approach it, judge the water and look around. Contextual salvage gives some ordinary-looking objects a use consistent with the freight, kitchen or workshop they came from.

Underwater Features preset panel with controls for the underwater placement pass

The preset panel gives me a manageable way to direct the pass. I can change the treatment and inspect the result on the actual seabed. I check that the small details leave usable space around a larger composition and that the surroundings help a diver understand the site.

The ocean work builds up in stages: the catalog describes usable objects, physics helps assemble them, the island pass distributes them and the detail pass works around them. The exported identities let the server apply the appropriate encounters and rewards to those accepted places.

Generative cities

Streets and rooms

A finished city with connected streets, buildings and rooftop spaces

This is the result I am working toward when I generate a city: connected streets, buildings that fit beside them and spaces worth examining on foot. I need entrances to be reachable, structures to sit properly and the surrounding ground to make sense. The editor's placement plan has to survive that closer inspection.

The city tools handle different parts of the construction. I start with a center and streets, use RoadTool to arrange compound objects against that network, then import the plan and finish it in Ironworks. Keeping those stages distinct lets me inspect and adjust the decisions as the city develops.

The city as a whole

An overhead view of a finished city fitted into a wooded valley

From above I can check the connected layout, the edges of the city and its relationship to the surrounding land. That catches different problems from walking the streets. A block may fit individually while leaving an awkward approach or a poor connection to the next one.

The city retains an authored identity and boundary after placement. Those give the server useful context for its inhabitants, services and traffic. The same construction tools can produce different settlements as I change the street layout, building choices and finishing passes.

A centre and a street language

Generated city buildings and streets in the Ironworks editor

A city-center virtual object supplies the origin and identity for the processes that follow. Roads, buildings, boundaries and detail develop around that shared context. I can then treat the settlement as a related instance while retaining access to its individual objects.

Apocalyptic Road Network grows arterial, collector and local streets. Junction snapping, segment splitting and loops help connect the graph, while terrain and occupied ground constrain what can be accepted. I use it when I want a hierarchy of streets with uneven blocks and development.

Ring Road Network gives me another starting form. Rings and connections grow around a center, with perturbed radii and irregular links varying the underlying polar geometry. I can tune either approach for the settlement I want. The resulting roads are applied to the map with their surface painting and classifications.

RoadTool: fitting a city to its streets

RoadTool diagnostic diagram showing a street network and planned city placements

RoadTool is a Java tool in my Multitool project. It takes an exported street network and a tagged library of compound objects, then produces a placement plan and diagnostic output. Ironworks supplies the map context; RoadTool works through how the available content fits the streets.

A road gives each placement a direction along the street and another across it. Rotated footprints, polygon buffers and intersection checks establish what fits while keeping required space clear. Boundary hulls and inset regions describe usable city space. Spatial grids restrict nearby geometry checks so a candidate does not have to inspect the entire city.

District choices, weighted selection and repetition suppression vary the plan across a larger area. Smoothly interpolated value noise gives neighboring decisions a relationship. I can inspect those patterns in the diagram before importing the result. An example output log accompanies that stage.

Import City: giving the plan physical substance

City structures and streets imported into the Ironworks terrain

Import City reads the plan and its referenced compound-object files. It places the constituent Rust map assets beneath grouped virtual roots, prepares ground support, applies classifications and clears intersecting obstacles. I can inspect a building assembly as a coherent object while its visible pieces remain part of the map.

The terrain adds questions the two-dimensional plan could not settle. I check the seating, entrances, clearances and surrounding ground on the actual hillside. Grouping lets me correct a troublesome placement without reconstructing the assembly by hand.

City Doodads: finishing the inhabited scale

City Doodads reads the selected city's roads and limits to place smaller details. Street furniture, signs, booths, warming barrels, recyclers, weeds, rubble and road grime help distinguish the areas a player walks through. Roadside and building-perimeter context guide different placements. Noise at several scales varies the weathering and growth.

Weighted choices and spacing checks help keep the detail from repeating too uniformly or obstructing the larger arrangement.

Some of those details have a practical role. Selected props support salvage. Recyclers provide infrastructure. Warming barrels can attract nighttime company, and a city center can give a town crier a recognizable location. The authored boundary also helps keep automated traffic out of unsuitable streets.

Connecting the island

Trail Creator: routes with destinations

Trail Creator building routes across the loaded Ironworks landscape

Trail Creator reads walkable terrain, monuments, roads, obstacles and authored endpoints. A* pathfinding searches for viable routes. A Prim-style connected backbone establishes coverage, and additional links provide alternatives. I inspect those connections before their final surface treatment.

Catmull–Rom splines smooth the paths, while controlled meander and material variation help them follow the surrounding landscape. The process can paint worn ground, apply roadside classifications, clear blocking rocks and add selected lights, loot props and debris.

A winter trail after terrain and vegetation processing

I check the same route in the environment it crosses. Slope, vegetation, visibility and the approach to its destination all matter. An endpoint gives a walk a purpose; occasional supplies and signs of use can make the route itself interesting. Later population uses the completed paths and the space around them.

Raid sites: making room for an encounter

AutoRaid Site Author prepares an individual reservation for the raid system. It checks land and infrastructure, prepares suitable ground and records a site the server understands. Island AutoRaid2 Site Generator applies that groundwork to a distributed set of candidates, seeking geographic and biome variety.

I need room for the actual structures, defenses and approaches. Footprints and protected space help keep a promising clearing from becoming an unusable raid location. I can inspect the generated network and retain a feasible set when the terrain cannot support every requested site.

The exported site identity lets the server construct an estate in that prepared location. I work through the ground and placement compatibility before players encounter the building. The Raid Estates guide covers what happens during the resulting operation.

Balloon stations: useful coverage and local character

HAB Station Generator settings for planning island balloon stations

HAB Station Generator plans an irregular network around the main island. It reads the coastline and evaluates terrain, road access, supported footprints, existing reservations and cleanup costs. Biome-specific structures give the stops their local character. The process uses the CopyPaste groundwork to retain each accepted building with its prepared ground.

The station choices also have to work together. Locally suitable sites can conflict or leave a large gap in the route. Bounded beam search keeps several combinations under consideration. Gumbel perturbation adds controlled variation to candidate rankings, allowing suitable alternatives to appear in the result. Presets let me change the direction while retaining placement constraints.

On the server, authored fixtures identify pads and services. Balloons, pilots, signs, departure cues, convenience vending, cameras and public-address ambience make the sites operate as a transport network. I choose the stops and inspect the spaces where passengers arrive, wait and leave.

Graveyards: designing the journey back

A generated graveyard grouped as an authored site in Ironworks

Graveyard Generator builds an individual grouped site. Island Graveyards Generator selects a network across substantial islands. I consider where players are likely to need recovery and how difficult the walk back will be.

Travel-cost distance fields account for connected, walkable land. Multi-source shortest-path searches help compare routes, while coverage and travel-cost percentiles expose awkward cases an average can hide. A graveyard close across an impassable feature can be less useful than one farther away along accessible ground.

Those positions connect to the graveyard and ghost recovery system. The site can also support contextual finds and barrel-side inhabitants. I inspect the arrival, its recognizable features and the available ways back into the world.

Rivers and the final living layer

Process Rivers: following the water

River corridor processing and ecological detail in Ironworks

Process Rivers reads the existing paths and adds bankside foliage, aquatic detail and authored effect markers. The more detailed pass examines local reaches to vary the treatment along the corridor. Slope, depth, biome, obstacles and the water's character affect what belongs there.

Different placement families cluster, follow ribbons or use minimum-distance checks for a more even distribution. I can give parts of the same river different treatment while retaining a continuous corridor. The choices respond to the surrounding landscape established by the earlier passes.

River processing with cyan editor volumes visible above the terrain

The cyan shapes in this view are editor-visible volumes. Some exported information identifies places for live effects, such as whitewater and splashes. I can describe where an effect belongs and let the server supply it when needed.

River paths also provide geography for temporary salmon runs, with local fishing activity and possible bear encounters on suitable banks. Biome context helps select the appropriate bear. Other wildlife systems use geography such as altitude, climate and water proximity when choosing encounters. I need the river and its surroundings to provide useful context for that activity.

Process Island: giving the ground its occupants

Process Island adding vegetation and natural detail to the terrain

Process Island distributes vegetation, trees, harvestable cacti, rocks, beach detail, swamp growth, crystals and other natural objects. Weighted collections give each environment its range of content. Water, slope, climate, classifications, roads and existing objects constrain placement.

Bell-curve size variation keeps many trees and cacti close to ordinary sizes while allowing bounded differences. Broad Perlin variation gives neighboring areas related character. Where appropriate these remain functional resource objects: a plant can be harvested and a tree chopped. Their density and size also change sightlines and the experience of moving through the area.

Island ecology and companion information for gameplay being prepared in Ironworks

Further island processing can develop resources, wildlife support, local microzones and companion information for live effects or area behavior. I combine those capabilities according to the map. Existing sites and routes constrain what the broader population pass can add around them.

A different island each wipe

A different terrain foundation changes the geography all the later stages use. Biome treatments change the meeting of regions. City forms change the settlement layout. Ecology settings affect how open, dense or overgrown the land becomes. I can vary those choices together or develop a direction I want to use again.

Presets make the settings manageable. Supported seeds help compare alternatives within individual tools. Because I can change processes while Ironworks is running, I can improve a tool or add a capability during map authoring, then inspect the result immediately.

I make these decisions ahead of the wipe. Useful tools and settings carry forward, along with what I learned from the previous island. Each accepted map still needs its own inspection and adjustments.

The last pass is mine

I check support, entrances, route clearance, overlaps and density. I inspect places on foot as well as from above, and check that the exported information still describes the map I am saving.

Biome Painter corrects local climate assignments. Splat Painter adjusts visible materials. Topology Painter edits the classifications below them. Shovel and Terrain Smoother change the ground. Adjust Entity handles placement, rotation, scale and grouped sites. Density reduction and object-removal tools help thin or clear results that need attention.

These smaller tools let me repair a local problem without regenerating the surrounding work. I use the larger processes to develop the island, then inspect the individual places players will occupy.

The remains of ordinary work

I use machinery, kitchens, offices, freight and underwater wreckage to give a place some history. Selected contents and interactions follow the work that used to happen there. Recognizing a former workshop or loading area can help a player decide what is worth examining.

Books extend that continuity. They carry practical instructions, personal arguments and the concerns of their fictional writers. I want their knowledge to have a place in the surrounding world, alongside the objects and activities it makes useful.

People worth recognizing

I give settlements counters, routes and spaces where inhabitants can belong. City centers, road networks, working sites and other authored locations provide context for merchants, guards and crews. Runtime placement and behavior then supply the encounters in those places.

The Inhabitants and Wanderers entries describe recognizable equipment and habits. The map provides places to meet those people, including the infrastructure that lets the mail, band and transport network operate.

Find the rest in the field

For the places and activities in the finished game, start with The World, Scavenging, Books or Home & Workshop.