DrainSim Creator Guide
Build a small level, make its water work, then share it on the Steam Workshop. Start with the in-game editor. You only need Unreal Engine when you want to bring in your own assets or maps.
Your first level, in seven steps
- Open Level Editor from DrainSim's main menu.
- Learn camera movement and object selection.
- Use the example scene to build a small, single-layer flooded area.
- Check the water around roofs, bridges and other overhead objects.
- Configure each Measure Volume: calibrate Max Height and set the Target Height clearing tolerance.
- Test drainage and regional completion, then save the intended starting water state and capture the minimap.
- Save, reload and test the level before uploading it.
DrainSim's water uses a top-down projection. A roof can interfere with water below it, and two flooded floors directly above each other cannot be simulated independently. Water simulation and FluxHide explains how to design around this.
Creator guide
| Page | What you will learn |
|---|---|
| 1. Controls and editor layout | Move the camera, transform objects and find the tools and DrainSim actors. |
| 2. Build your first level | Turn the example scene into a small playable test level. |
| 3. Water simulation and FluxHide | Understand coverage, top-down capture, blockers, steep drops and stacked floors. |
| 4. Water controls and sources | Run, reset and save water; prepare sources, drains and the initial flood. |
| 5. Measure Volumes and completion | Read regional height, calibrate the UI and minimap, and set the clearing tolerance. |
| 6. Terrain and objects | Shape dirt, place objects and configure the environment. |
| 7. Save, test and publish | Save the starting state, use SaveScenes, publish and inspect Workshop levels. |
| 8. Troubleshooting | Check water, progress, collision and saving problems. |
Advanced modding
Use this section when the built-in content is not enough. It covers Unreal Engine 5.6 and the DrainSim PAK Creator workflow. Use the complete creator bundle supplied for your game and engine.
| Page | What you will learn |
|---|---|
| Before you start | Choose an asset pack or imported map and understand compatibility. |
| Prepare your content | Create a Content Only plugin and fix its dependencies. |
| Bring geometry into Unreal | Prepare a small Blender/FBX import and check materials, collision and water geometry. |
| Build a PAK | Run the creator tool and understand Level Blueprint cleanup. |
| Import and test | Load the PAK, prepare the scene and check that it works after reloading. |
| PAK troubleshooting | Diagnose build failures, missing assets and excluded maps. |
A few useful terms
| Term | Meaning |
|---|---|
| Mesh | The geometry of an object, such as a wall, bridge or chair. |
| Actor | An object placed in a level. Actors can contain meshes, lights or other components. |
| Scene | The level layout you work on and save in DrainSim. |
| Simulation domain | The fixed area covered by the water simulation; always present and no longer shown as an editable actor. |
| Heightmap | An overhead representation of the heights used by the water simulation. |
| Measure Volume | A region whose water is measured for height displays and completion. |
| Max Height | The region's maximum water-height reference for the UI and minimap. |
| Target Height | The remaining-water tolerance at which the region counts as cleared. |
| PAK | An archive containing custom content cooked for DrainSim. |
| Cook | Convert Unreal assets into files the game can load. |
For help, use the DrainSim Discord. Include your game version, what you were doing and a screenshot or log that shows the problem.
Controls and editor layout
Open Level Editor from DrainSim's main menu. The example scene already contains essential DrainSim actors. Keep these while learning the editor.
Camera and object controls
| Input | Action |
|---|---|
| Hold right mouse button and use W / A / S / D | Move the editor camera. |
| Q | Switch to the selection tool. |
| W | Show the move gizmo. |
| E | Show the rotation gizmo. |
| R | Show the scale gizmo. |
| Ctrl + Z | Undo a move, rotation or scale change. |
| P | Enter gameplay testing. |
| Esc during gameplay testing | Leave the test and return to the editor. |
| Hold Shift while moving the camera | Keep the selected object in focus. |
| Click an object in the viewport or its entry in the Outliner | Select it. |
| Drag a mesh from the Content Browser into the scene | Place an instance of that mesh. |
While holding the right mouse button, W moves the camera. Release the right mouse button before using W to work with an object's move gizmo.
A gizmo is the on-screen handle for changing a selected object's position, rotation or size. Drag its handles, or use the selected actor's fields in the Details panel for precise changes. The red, green and blue axes represent X, Y and Z; Z is the vertical axis.
The Details panel shows the properties exposed for that actor in DrainSim. Do not expect every setting from Unreal's full editor to be available here.
Use Ctrl + Z to undo transform changes. The voxel tools currently have no undo. Save a working copy before sculpting terrain or making other major edits.
Find the main tools
The numbers identify tools and panels in this image. They are not Measure Volume regions or Location Names. This is the original layout; use the panel names to find the tools in the current editor.
| Number in image | Tool or panel | Use it for |
|---|---|---|
| 1 | Water settings and minimap tools | Run, pause, reset and save water, and capture the minimap. The adjacent readout shows the current height for the selected Measure Volume. |
| 2 | Water Hider / Unhider | Exclude a mesh from water capture or include it again. |
| 3 | Voxel dirt tools | Edit the voxel dirt in the scene. |
| 4 | Content Browser | Find meshes and drag them into the level. |
| 5 | Outliner | Find and select actors already placed in the scene. |
| 6 | Details | Edit the selected actor's properties. |
| 7 | Upload | Create a Workshop submission or update one of your existing submissions. |
The top toolbar's minus / plus buttons quickly exclude a mesh from water capture or include it again. See Water Hider / Unhider for the buttons and steps.
Select, move and inspect an object
- Use Q and select a mesh. If it is difficult to click, find it in the Outliner.
- Press W, E or R for the change you want to make.
- Adjust the object with the gizmo.
- Check the Details panel and look at the result from another angle.
- If it affects the flooded area, test the water again.
Return to the selection tool after using a special tool. In particular, clicking a mesh while the Water Hider is active changes its water participation rather than simply selecting it.
Find the DrainSim actors
Open the Content Browser, return to Root and open DrainSim. This folder contains the important built-in DrainSim Blueprint actors prepared for scene saving, including those used in the example scene. Use it to find the gameplay and water actors for your level.
Open DrainSim to find the supplied actors. The example scene shows how they are used together.
These built-in actors are supported. The Blueprint import restriction applies to custom Blueprint content brought in through PAKs.
Start with the example actors
Keep the essential actors in the supplied scene while learning. Use the Outliner to find the actor responsible for the change you want to make.
| Actor | Main role |
|---|---|
WaterBlocker | Defines an invisible barrier for the water simulation. |
BP_DS_WaterSource | Adds water with positive Intensity; removes it with negative Intensity. |
BP_MeasureVolume | Measures a region; configure its maximum reference and clearing tolerance. |
BP_PlayerStart | Sets where the player begins. |
BP_EditorStreamLevelLoader | Chooses the base level, background and a custom streamed environment. |
BP_FluxNiagaraActorDig / BP_FluxNiagaraActorMud | Drains the player uncovers by digging or scraping. |
BP_WeatherProxy | Controls the scene's weather, lighting settings and water type. |
BP_LevelController | Holds the timing settings used for the level's rating. |
Change one part of the setup at a time so you can see what affected the result.
The water simulation domain is always present in the background. It is no longer shown as an editable actor, so you do not need to find, place or retain a domain object. See simulation coverage when planning the map's size.
Enter and leave gameplay testing
- Press P, or use the editor's Play menu.
- Wait for the level and gameplay UI to finish loading.
- Test player movement, tools, water and region completion.
- Press Esc to return to the editor.
This is different from pressing Play in the Water Simulation panel, which runs the water calculation. After a gameplay test, check the water state before saving so you do not replace the intended flooded start with the drained result.
Continue with Build your first level.
Build your first level
For your first map, use a small outdoor area with a clear flooded section and an accessible place to start. Leave bridges, roofs and imported maps for a second pass.
Goal: a level you can load, move around in, drain and reopen with the same intended starting conditions.
1. Keep a working starting point
- Open Level Editor from the main menu.
- Keep the example scene's essential actors.
- Use the File menu to save your own scene before changing the layout.
- Learn camera movement and object selection.
The important built-in actors used in the example are available in Content Browser > Root > DrainSim. See where to find them.
Keep an earlier saved copy before making major terrain or water changes. You should always have a known working scene to return to.
2. Choose the environment
Find BP_EditorStreamLevelLoader in the Outliner and inspect its Details. Choose a supplied environment under Level and a suitable Background. Leave custom streaming for later.
Keep the first playable area compact and within the water simulation's coverage. Expand only after checking where water is simulated.
Check: the ground you want to build on is visible, and you can identify the area the player will use.
3. Make a simple layout
- Open the Content Browser.
- Drag a few meshes into the scene to define the area.
- Use W / E / R to position, rotate and size them.
- Keep a clear route from the player start to the flooded section.
- Use the voxel dirt tools only if your design needs changes to the editable dirt.
A small yard or construction area is a good design exercise. Start with large, readable shapes. Decoration can wait until the water and player routes work.
Check: the player has enough room to move and use the intended tools.
4. Check the water setup
The water simulation domain is always present and is no longer visible as an editable actor. Keep the example's WaterSource settings for the first test.
Use the Water Simulation controls in the top toolbar, shown in the editor overview image. Play runs the water; Pause holds it for inspection. Reset restores saved water, while Remove empties the current simulation. See Water controls and sources.
Watch what happens before adding more objects:
- Does water appear in the intended area?
- Does it stay within the intended boundaries?
- Is the flooded section reachable?
- Does a new object unexpectedly obstruct the water?
If the last point occurs, read Water simulation and FluxHide before changing the source or increasing the water level. Overhead geometry may be the cause.
Check: the intended starting water state is visible and makes sense for the layout.
5. Configure the measured region
- Select BP_MeasureVolume through its red viewport icon or the Outliner.
- Check Area Size, Area Location and Location Name for the flooded region.
- Prepare the highest water state the region can reach and read its current height in the top toolbar.
- Enter that maximum reading into Max Height. This calibrates the region's water-height UI and minimap.
- Set Target Height, the remaining-water tolerance for counting the region as cleared.
Use the illustrated Measure Volume setup. The values in another map's screenshot are examples, not a preset for your level.
Check: the volume covers the intended region and its maximum reference matches that region's water setup.
6. Run a gameplay test
Press P or use the editor's Play menu. Wait for loading to finish, then check the level from the player's view.
- Check the starting position and routes through the level.
- Try the tools the player needs.
- Drain the area far enough to find inaccessible pockets or awkward boundaries.
- Check that its water-height displays make sense and that it becomes cleared at the intended tolerance.
- Watch for collision problems and severe slowdowns during normal play.
Press Esc to return to the editor. Adjust the measured region or its tolerance if the completion test does not match the intended task.
Fix the layout before adding detail. A level that looks good from above may still have an obstructed path or water the player cannot reach.
7. Save the intended start
Return the scene to the water state you want players to start with. Do not accidentally publish the drained state left by your test.
Use Save Water State in the top toolbar's Water Simulation controls, then capture the minimap with Minimap Controls. The editor overview image shows their location. Save the scene through File, then reload it and check the starting water, region displays and completion setup again.
These are separate tasks. Saving the scene alone is not a substitute for saving the prepared water state and capturing the minimap.
Continue with Save, test and publish once this small level works.
Water simulation and FluxHide
DrainSim's water simulation reads the level from above. It does not understand every empty space inside a 3D model. This is why an opening that looks clear to the player can still block water.
How the top-down simulation works
Think of an overhead map split into small cells. Each horizontal position has a ground height and a water depth. Water moves between neighboring cells according to the captured terrain and water levels.
This is often called 2.5D: the terrain and water have height, but the simulation does not store a full stack of independent water-filled rooms at each horizontal position.
Conceptual cross-section. The arrows show capture from above, not the direction in which water flows.
The practical consequence is simple: a roof, bridge deck or other overhead mesh can become the surface seen by the water capture instead of the ground underneath it.
Simulation coverage and size
The simulation covers a fixed area and is always present. Its domain is no longer shown as an editable object. Keep all water-based gameplay within that coverage; scenery can extend beyond the area you use for water.
For a rough planning reference, the developer found that a cube scaled to X = 150, Y = 150 came close to covering the simulation area. Scale is a multiplier, so the physical size depends on the cube's original dimensions. If the unscaled cube is 1 metre wide, that reference is about 150 × 150 metres, or 492 × 492 feet. This is an approximate reference, not a measured simulation boundary.
Start small and use the water preview and a test source near the intended outer edges to check coverage before building a large level.
Why a bridge can obstruct the water
A player sees a bridge deck with an opening underneath. The top-down capture sees the bridge's upper surface at those positions. It cannot automatically describe both the deck and the open channel below it.
To simulate water below the bridge, exclude the appropriate bridge mesh from the water capture. That lets the capture use the surfaces underneath.
What FluxHide does
FluxHide marks an actor so its mesh is ignored by the water capture. The in-game Water Hider is the editor tool for applying this exclusion.
It is not a command to hide the object from the player, and it does not create another simulation layer. Water participation and the object's ordinary visible/player-collision behavior are separate things.
Apply it in the in-game editor
- Find the minus / plus buttons in the top toolbar, shown above. The editor overview image also shows their location.
- Activate the minus icon for the Water Hider.
- Click the mesh that should be excluded from water capture.
- Return to the selection tool when finished.
- Test the water around and underneath the object.
The minus icon applies the FluxHide exclusion; the plus icon removes it and includes the mesh in water capture again. Check the resulting water behavior after either change.
You can also inspect or add the tag directly: select the actor, open Details > Actor > Tags, add an array entry and enter FluxHide. These actor tags are separate from the categories selected during a Workshop upload.
Apply it to an imported map
Add FluxHide under the relevant actor's Tags in Unreal before packing the map. Type the tag exactly as shown. It is an actor tag, not the actor's name or a material name.
Objects inside a streamed custom PAK level cannot be clicked or selected individually in the in-game editor. Tag them in Unreal before creating the PAK. To change those tags later, edit the source map and rebuild the PAK. Individually placed assets from an asset pack use the normal in-game tools.
Rebuild barriers with WaterBlocker
The simplest setup is often to mark the entire object FluxHide, then add WaterBlockers for the solid parts that should obstruct water. You do not need to split a building's roof or a bridge's deck from its mesh just to handle an overhang.
For a building with a projecting roof, exclude the building and use blockers that follow the main building body, leaving out the roof overhang. If water must enter the building, keep its intended interior and entrances open instead of filling them with one solid blocker. A combined bridge/support mesh works the same way: exclude it, then represent the supports with blockers while keeping the water channel open.
Use WaterBlocker actors where the water still needs a deliberate barrier. In the example below, the bridge uses FluxHide, and blockers at the sides define the parts that should remain blocked.
Original DrainSim example: the bridge is excluded from capture; separate blockers define the sides of the passage.
Keep the intended channel open. A blocker across the opening defeats the purpose of excluding the bridge. Separating meshes remains an optional approach when you want different actors to participate independently.
Water still needs the intended ground and boundaries. When excluding a whole object, recreate its necessary water barriers with blockers and inspect the resulting capture.
Prevent spikes at tall vertical drops
Tall, abrupt 90-degree height changes can cause water spikes. Break the height change into steps at regular intervals, or use a slightly sloped WaterBlocker to give the simulation a gentler transition.
Check the water preview and test flow across the edited section. Apply the same check to sculpted terrain and imported geometry before adding detail around a steep drop.
Why two flooded floors cannot work independently
Imagine a flooded room directly above a flooded basement. At the same horizontal position, the simulation would need to represent two different floors, two water surfaces and the separation between them. One captured ground height and water depth cannot describe that arrangement.
Excluding the upper floor lets the capture see below it. It does not preserve an independent pool on the excluded floor. Adding blockers does not add a second vertical water layer either.
Different elevations are fine in principle. Vertically overlapping independent water spaces are the limitation. A slope or a lowered yard is not the same problem as two rooms directly above each other.
| Layout | Design guidance |
|---|---|
| Outdoor yard, street or construction area | A good starting point. Keep boundaries and drainage routes easy to inspect. |
| Sloping ground or areas at different elevations | Can fit the top-down model when the relevant surfaces do not need independent vertical layers at the same position. |
| Bridge above one water channel | Exclude overhead geometry and use blockers where needed. Test the result. |
| Roof above one flooded interior | May be approximated by excluding the roof while retaining the intended floor and boundaries. Test the whole interior. |
| Flooded road directly above a flooded tunnel | Cannot be represented as two independent stacked water spaces. Redesign the flooded layout. |
| Two independently flooded floors | Unsupported by this top-down arrangement. FluxHide does not solve the missing second layer. |
This also applies to voxel terrain. Sculpt it without overpasses, tunnels or overhangs that place terrain above a water route: the capture sees the upper surface. Plan one exposed water-supporting surface at each horizontal position. The voxel tools currently have no undo, so save before sculpting. See voxel editing.
Check the result early
Test a roof or bridge before building the rest of the level around it. Use the water calculation preview to inspect the capture. If water behaves unexpectedly, check which actors have FluxHide and where the blockers are.
After changes, prepare and save the intended water state again and verify it after reloading. See Save, test and publish.
Make the regional displays match the simulation
Once the physical water behaves correctly, configure each Measure Volume. Select the region, read its toolbar height at the maximum intended state and enter that value into Max Height. Set Target Height for the remaining-water tolerance at which it should clear.
These settings calibrate the region's water-height UI, minimap and completion behavior. They do not change top-down capture or add a second water layer. Recheck them when geometry or source changes alter the maximum height a region can reach.
Further reading: DrainSim's original editor guide and the underlying Fluid Flux heightfield model. The latter describes the water system generally; its full feature set is not a list of tools exposed by DrainSim's editor.
Water controls and sources
Use the water panel to prepare the flooded state players will receive. Keep the example setup for your first small level, then adjust one source or setting at a time.
The Water Simulation controls and Minimap Controls are in the top toolbar, shown in the editor overview image. They appear together, but they save different things.
What each water control does
| Control | Use it to |
|---|---|
| Play in the water panel | Run or continue the water simulation. |
| Pause | Hold the current simulation state while you inspect or prepare it. |
| Reset | Restore the last saved water state. |
| Remove / trash icon | Empty the current simulation of water. Active sources can add water again when the simulation runs. |
| Save Water State / disk icon | Record the current simulated water as the level's saved water state. |
| Water calculation preview / grid icon | Inspect the surface representation used by the simulation. |
| Minimap save / capture | Update the minimap image for the level. |
Reset restores saved water; Remove empties the current water. Use the operation that matches your goal. Neither operation replaces saving the scene.
The water panel's Play button runs the simulation. To control the character and test the level, use P or the editor's gameplay Play menu. See Gameplay testing.
Adjust a WaterSource
Find BP_DS_WaterSource in Content Browser > Root > DrainSim, or select an existing one and inspect its Details. With positive Intensity it adds water; with negative Intensity it removes water. Its placement and affected area matter as well as its settings.
| Setting | What to consider |
|---|---|
| Position and scale | Put the source in the intended area and check the footprint it affects. |
| Volume | Adjusts the source's water contribution. Check the result in the simulation rather than treating the number as a final water height. |
| Intensity | Positive values add water; negative values remove it. The value also controls the strength of the effect. Change it separately from other settings while testing. |
| Velocity X / Y | Controls the horizontal flow direction and velocity applied by the source. |
| Duration | Controls how long the source acts; the documented source setup uses -1 for an unlimited duration. |
Keep unfamiliar settings at their working values until you have a reason to change them. There is no universal source value that fills every region to the same height: the layout, footprint, other inputs and drains affect the result.
Watch the height readout with the relevant Measure Volume selected. Once the maximum intended state is established, use it to calibrate Max Height.
Separate initial flooding from ongoing inflow
Decide whether the level should begin with standing water, continue receiving water during play, or do both.
For a level that needs an initial fill, an optional workflow is to add a temporary WaterSource just for preparation. Remove that temporary source when filling is complete, allow the water to settle into the intended starting state, then save it. Keep the source actors that are deliberately part of gameplay.
Check every remaining source before publishing. An unnoticed unlimited source can refill a region while the player tries to clear it. If you intentionally include continuous inflow, test that the available tools can handle the task.
Test drains in gameplay
For a drain the player must uncover, use one of these supplied actors from the DrainSim folder:
- BP_FluxNiagaraActorDig: the player digs away the dirt covering the drain.
- BP_FluxNiagaraActorMud: the player scrapes the mud off the drain.
Only these Dig and Mud drain actors support being blocked from draining by their covering material. A WaterSource with negative Intensity also removes water, but it cannot be blocked that way.
The Dig and Mud drains are the recommended choice for visible drainage gameplay: they emit bubbles that help players find them.
Check that the player can reach the covering material, expose the drain and obtain the expected drainage. A functioning drain still needs correctly configured Measure Volumes so regional progress and completion make sense.
Save a usable starting point
After a drainage test, restore the intended flooded start. Save its water state, capture the minimap and save the scene. Reload the scene and confirm that the intended sources, measured regions and starting water all return correctly.
The full release sequence is in Save, test and publish.
Measure Volumes and completion
A BP_MeasureVolume measures the water in a region. Its settings tell the UI and minimap how to represent that region's water height and when the region counts as cleared.
For every region, set Max Height to the maximum water-height value that can be reached there, and set Target Height to the remaining-water tolerance for clearing it. Calibrate these after the layout and water setup work.
1. Select the region you want to configure
Select its BP_MeasureVolume in the Outliner, or click its red icon in the viewport. The selected actor's name may have a number appended, such as BP_MeasureVolume2.
The red icon identifies the actor. Check its name in Details before changing values.
In Details > Basic, use Area Size and Area Location to define the region you want to measure. Check the region in the viewport and give it a useful Location Name, such as Loading Yard.
Do this before calibration. If you change which area is measured later, check its height values again.
2. Read the current height in the top toolbar
With the Measure Volume selected, look at the water-height readout in the top toolbar. It shows the current measured water height for the selected region.
This screenshot shows 8 at that moment. It does not establish that 8 is the region's maximum.
If your level has several Measure Volumes, select them one at a time. Use the reading for the region you are configuring.
3. Calibrate Max Height
- Prepare the region at the highest water level it can reach in your intended level setup. Use the water controls and sources to establish that state.
- Allow the water to reach that state before reading it. A partially filled or already drained region will give a different value.
- Select that region's BP_MeasureVolume.
- Read its current height from the top toolbar.
- Enter that value into Max Height in the Measure Volume's Details.
This gives the UI and minimap the correct maximum reference for that area. If water can rise further during gameplay, account for that higher state when determining the maximum.
Max Height calibrates the displayed height range. It does not fill the region, stop a WaterSource or physically cap the water level. Use the toolbar's water measurement for this value, not the actor's Transform > Location Z or the region's Area Size Z.
Here, Max Height is 9.0 and Target Height is 2.5. These are example values for this region, not settings to copy into every map. The screenshot uses decimal commas:
9,0means9.0.
4. Set Target Height and test completion
Target Height is the tolerance for how much water may remain when the region counts as cleared. Choose it for the intended drainage task, then test it with the tools available to the player.
- A higher target allows more remaining water when the region clears.
- A lower target requires more thorough drainage.
- The target should be below the maximum reference for a region that begins flooded and needs to be drained.
Run a gameplay test and drain the region. Check that it becomes cleared at the intended point and that the UI and minimap represent its water height correctly. A target that the player cannot reach makes the task frustrating or impossible; an overly generous one can clear the region while too much water remains.
Changing Target Height changes the completion tolerance. It does not remove the remaining water for the player.
Keep these three values separate
| Value | Meaning | When to use it |
|---|---|---|
| Toolbar height | The selected region's current measured water height. | Observe filling and drainage; read it at the maximum state when calibrating. |
| Max Height | The maximum water-height reference for that region. | Calibrate the water-height UI and minimap. |
| Target Height | The permitted remaining-water tolerance for clearing the region. | Decide how thoroughly the player must drain it. |
The example can therefore show a current reading of 8, a maximum reference of 9.0, and a clearing tolerance of 2.5. Use the values shown by the editor, keeping the current reading, maximum reference and tolerance separate.
Finish and recheck
Repeat the setup for every measured region. Regions with different maximum water heights need their own calibration.
Recheck it after changing the measured area, terrain, barriers, water sources or any other part of the layout that changes the height water can reach. A correct Max Height cannot fix an incorrectly captured roof or a blocked channel; handle those in Water simulation and FluxHide.
After testing, restore the intended starting water, save the water state, capture the minimap and save the scene. Reload it and check the regional displays and completion behavior again. Continue with Save, test and publish.
Terrain and objects
Work on the playable shape first. A small, readable level is easier to debug than a fully decorated map with an unknown water problem.
Use the right tool for the job
| What you want to change | Where to work |
|---|---|
| Supplied landscape or background | Select BP_EditorStreamLevelLoader and use its Details. |
| An object already in the scene | Select it in the viewport or Outliner; use W / E / R and Details. |
| Add a mesh | Drag it from the Content Browser. |
| Add a supplied gameplay or water actor | Open Content Browser > Root > DrainSim. |
| Editable voxel dirt | Use the Voxel dirt tools shown in the editor overview image. |
| Whether a mesh affects water capture | Use the top toolbar's Water Hider / Unhider minus and plus buttons. |
| A deliberate water barrier | Use a WaterBlocker actor from the DrainSim folder. |
| Region name, height display or clearing tolerance | Select BP_MeasureVolume; follow Measure Volume setup. |
| Weather, time of day or fluid appearance | Select BP_WeatherProxy. |
Choose the base environment
In BP_EditorStreamLevelLoader > Details, Level selects the supplied base environment and Background selects the surrounding backdrop. For a first level, start with those supplied choices.
The Custom Level and Custom Location fields are for an imported streamed environment. Custom Level takes only the level name, such as Canal, without a path or .umap extension. Prepare and load its PAK first using Import and test.
Edit voxel dirt in small passes
The voxel tools work on the level's editable dirt. Do not assume that an imported static mesh becomes sculptable terrain simply because it looks like ground.
Start with a small change in a test area. Inspect the result from the side and in gameplay before applying the same edit over a large area.
Voxel sculpting currently has no undo. Ctrl+Z for object transformations will not restore a voxel edit. Save a working copy before sculpting so you can reload it if needed.
Sculpt terrain so the water can read its surface from above. Avoid voxel overpasses, tunnels and overhangs above a water route. Use open channels and slopes instead. At tall vertical drops, add steps at regular intervals or a slightly sloped WaterBlocker to reduce water spikes.
After terrain edits, check:
- Can the player still reach the affected area?
- Does water enter or leave it as intended?
- Have you created a pocket that is difficult to drain?
- Does the terrain look and behave correctly after saving and reloading?
- Does the region's Measure Volume still match the area and the water height it can reach?
If the task uses a drain covered by terrain, test the actual uncovering action. BP_FluxNiagaraActorDig is uncovered by digging; BP_FluxNiagaraActorMud is cleared by scraping mud. See Test drains in gameplay.
Use blockers to simplify water geometry
You usually do not need to split a roof from a building or a deck from a bridge. Mark the whole object FluxHide, then add WaterBlockers for the parts that should stop water.
For a building, let the blockers follow its main body without including the roof overhang. Keep any intended flooded interior and entrances open. For a bridge, represent the supports while leaving the channel open. See the illustrated WaterBlocker workflow.
Separating geometry is optional when independent pieces are useful for editing. For a streamed PAK map, set the FluxHide actor tags in Unreal before packaging, because its individual objects cannot be selected in DrainSim. Add the required DrainSim WaterBlockers around the imported environment and test the result.
Do not confuse the three checks
| Check | Question |
|---|---|
| Appearance | Does the object look right? |
| Player/tool collision | Can the player and tools interact with the surfaces as intended? |
| Water capture | Does the object contribute the intended shape to the simulation? |
Passing one check does not prove the others. A visible wall may have unsuitable collision, and a bridge the player can cross may still obstruct the water projection.
Help hoses and cables cross a gap in navigation
If a hose or cable cannot find a route over a wall or across a canal, look for BP_NavLink in the Content Browser's DrainSim folder. This actor links two locations for hose and cable navigation.
Position its two ends for the connection you need, then test the route with the actual hose or cable in gameplay. A navigation link does not change the water capture or add physical ground; keep checking the route's collision and clearance.
Add detail after the water works
Build one area at a time and test after meaningful changes. Watch the level during drainage, tool use and movement, not only while the camera is still.
If performance drops after adding a group of objects, test that group separately. Reduce unnecessary objects, material variety and oversized textures before making the level larger. For custom content, compare changes in DrainSim rather than assuming that a particular Unreal optimization will help.
Set the scene's appearance
Select BP_WeatherProxy to choose a Weather Preset, adjust Time Of Day, or select Water Type. The panel also exposes weather effects, Exposure Bias Day / Night and Saturation.
Check visibility from the player's view after these changes: the player should be able to identify the flooded area and use the required tools. A different water type still uses the same top-down simulation limits. Use the water controls to manage the actual flooded state.
Tune timing after a complete playthrough
BP_LevelController exposes Rating Minimum and Rating Maximum for the level's timing range. Set rating expectations after testing the full drainage task with the intended tools. Keep this separate from Target Height, which determines a measured region's clearing tolerance rather than a time target.
Save, test and publish
Publish the level only after checking the version that loads from disk. The editor session can contain changes that another player will never receive unless they are saved.
Save all three parts
| Part | What it is for | Where |
|---|---|---|
| Scene | Your saved level layout and scene settings. | The editor's File menu. |
| Prepared water state | The starting water condition you want players to receive. | Save Water State in the top toolbar's Water Simulation controls. |
| Minimap capture | The level's captured minimap. | Minimap Controls in the top toolbar. |
See the editor overview image for the tool locations. Its numbers label interface panels, not measured regions.
The scene settings include the configured Measure Volumes. A minimap capture updates the map image; its water-height representation also depends on the correct regional Max Height values. Complete the Measure Volume setup before the final save.
Where scenes and custom PAKs belong
Your local scenes are stored in Documents > DrainSim > SaveScenes. On a standard Windows setup, you can paste this into File Explorer's address bar:
%USERPROFILE%\Documents\DrainSim\SaveScenes
If Windows has moved your Documents folder, open Documents in File Explorer and then DrainSim\SaveScenes there.
Put every custom PAK needed by a local scene directly in SaveScenes, beside its scene JSON. A PAK left in the creator tool's output folder is not enough. See Import and test.
Prepare the release copy
- Finish the layout and water-capture setup, including
FluxHideand blockers where needed. - Configure each Measure Volume's area and name. Calibrate Max Height from that region's maximum water state and set its Target Height tolerance.
- Run a gameplay test through regional completion. Check the height displays, minimap and the point at which each region clears.
- Restore the intended starting water condition after the test. Remove any temporary fill source and check the gameplay sources you intend to keep.
- Allow the water to reach the intended state; pause it when you need to hold that state for saving.
- Save the prepared water state using Save Water State.
- Capture the minimap for the finished layout.
- Save the scene.
- Reload it and verify the starting water, region displays and completion settings again.
Repeat the affected steps after further edits. A new bridge, terrain change or different starting water condition may make an earlier saved state unsuitable.
An almost empty level may be the result of your drainage test. Make sure the saved starting water state is the one players should receive.
Before uploading
- Check the player start, routes, collision and tool access during a full drainage test.
- Verify water around roofs, bridges, blockers, steep drops and the edges of the simulation.
- Check each Measure Volume's boundaries and Location Name. Calibrate Max Height, test Target Height, and inspect the UI and minimap.
- Remove temporary fill sources and test any intentional ongoing inflow or drainage.
- Check performance during normal movement and tool use.
- Restore and save the intended starting water, capture the minimap, save the scene and reload it.
- Include the required custom PAKs and test the downloaded Workshop copy. See Import and test.
Upload a new level
Open Upload, shown in the editor overview image. In Upload to Workshop, leave Update previous upload on none for a new submission.
| Dialog field | What to enter or check |
|---|---|
| Update previous upload | none for a new item; select the intended existing item when updating. |
| Level name | The title players will see on Workshop. It can differ from your local scene filename. |
| Description | Explain the setting and the player's task. Check any current dialog notice about text-entry limitations. |
| Change notes | Describe what changed when updating an existing submission. |
| Tags | Choose the Workshop categories that fit the map. These are separate from actor tags such as FluxHide. |
| Visibility | Choose Public, Friends Only or Private for the intended audience. |
Check the fields, then use Upload to Workshop. If the editor warns about description support or rejects the text, check the resulting item and edit its description or update notes directly on Steam as needed.
Give the level a clear title and a short description of the task. Check the resulting Workshop item before sharing its link.
Update an existing level
Select your existing item under Update previous upload. Check its title before uploading so the update reaches the intended Workshop item.
For an update, repeat the water-state, minimap, save and reload checks as needed. Then test the Workshop version as well as your local scene.
Play the Workshop version
- Subscribe to the level on Steam Workshop.
- Start DrainSim and go to the garage.
- Open the level-selection icon at the top left.
- Select Workshop, then select the level.
For an updated item, allow Steam to finish downloading the update before testing. Check the actual Workshop copy's starting water, region names, height displays and clearing behavior.
Screenshots from the original Getting Started guide.
For levels with custom assets, a clean test on another installation is particularly useful: it can reveal content that was available only on the creator's machine.
Inspect another creator's Workshop level
You can open a local copy of a downloaded Workshop level to learn how its layout, water actors and Measure Volumes are set up.
-
Subscribe to the level and let Steam finish downloading it.
-
Open DrainSim's Workshop content folder. For Steam's default Windows location, this is:
C:\Program Files (x86)\Steam\steamapps\workshop\content\2963800If your Steam library is on another drive or in another folder, use its corresponding
steamapps\workshop\content\2963800folder. -
Open the numbered folder for the Workshop item you want to inspect.
-
Back up any local files with matching names, then copy the contents of that item's folder into Documents > DrainSim > SaveScenes. Copy the accompanying files, including required PAKs, rather than only the JSON.
-
Open Level Editor and load the copied scene through File. Save your working copy under a distinct name.
Ask the original creator for permission before modifying their level and publishing your own version on the Workshop.
Troubleshooting
Start with the last change you made. Test a small area or a saved working copy before rebuilding the whole map.
Water and level layout
| Symptom | Possible cause | What to check |
|---|---|---|
| Water will not pass below a bridge. | The deck participates in top-down capture, or a blocker crosses the channel. | Check FluxHide on the appropriate mesh and the blocker positions. |
| Water behaves strangely inside a covered area. | A roof or overhead floor changes the captured height. | Test the area with that overhead geometry excluded from capture. Keep the intended floor and walls represented. |
| Water passes through a support after hiding the bridge. | The support is part of the same excluded mesh. | Add a WaterBlocker representing the support while leaving the channel open. |
| Two flooded floors interfere with each other. | The design needs independent water layers at the same horizontal positions. | Redesign the layout. More blockers or a different FluxHide selection cannot create another layer. |
| Water appears outside the intended area. | Gaps, excluded boundary geometry or unsuitable blocker placement. | Inspect the boundary from above and test changes one at a time. |
| A small pocket cannot be drained conveniently. | The tools cannot reach it or the terrain traps it. | Test in gameplay and revise the terrain, access or drainage route. |
| A terrain edit seems correct but the saved level differs. | The scene or prepared water state does not match the latest work. | Save the intended scene and water state, then reload and compare. |
| Reset restores a flooded scene when you wanted no water. | Reset uses the last saved water state. | Use Remove to empty the current simulation. Check active sources before running it again. |
| Water is not moving. | The simulation may be paused. | Check Play / Pause in the water panel before changing sources or geometry. |
| Water forms spikes at a tall vertical drop. | The height change is too abrupt for this setup. | Add steps at regular intervals or a slightly sloped WaterBlocker; see steep-drop fixes. |
| Water does not behave as expected near the edge of a large map. | The flooded area may extend beyond simulation coverage. | Check the approximate size and coverage with a small test source before expanding the layout. |
| A negative-intensity source keeps draining after it is covered. | A WaterSource does not support that blocking behavior. | Use a Dig or Mud drain for a drain that the player must uncover. |
These are checks, not automatic diagnoses. See Water simulation and FluxHide for the underlying limitation.
Height displays and region completion
| Symptom | What to check |
|---|---|
| UI or minimap water height does not match the region. | Select its Measure Volume, establish its maximum intended water state and enter the toolbar reading into Max Height. Confirm the area being measured. |
| Several regions show inconsistent progress. | Calibrate each volume separately. A maximum copied from another region may not apply. |
| A region is cleared while too much water remains. | Inspect Target Height and the region boundaries. A higher target permits more remaining water. |
| A region never becomes cleared. | Check unreachable water, ongoing inflow, the measured area and whether Target Height is too strict for the intended tools. Test the full drainage task. |
| A copied screenshot value gives the wrong result. | 8, 9.0 and 2.5 in the examples are a current reading, a maximum reference and a tolerance for one setup. Measure your own region. |
| Progress changed after a terrain, source or boundary edit. | Recheck the region's maximum state and clearing tolerance, then save and reload the scene. |
Follow Measure Volumes and completion for the illustrated setup. Use Max Height to calibrate height representation and Target Height to tune clearing tolerance. Neither setting repairs physical water capture.
Editor and publication
| Symptom | What to check |
|---|---|
| Pressing W moves the camera instead of the object. | Release the right mouse button, select the object and press W again. |
| Ctrl+Z does not undo a voxel edit. | Voxel tools currently have no undo. Reload a saved working copy; save before further sculpting. |
| The simulation domain cannot be found in the Outliner. | It is always present and is no longer exposed as an editable actor. Use the water toolbar and source actors. |
| A built-in gameplay actor is hard to find. | Open Content Browser > Root > DrainSim. |
| Clicking an object changes its water behavior. | The Water Hider or Unhider may still be active. Return to the selection tool. |
| A streamed map's individual meshes cannot be selected. | Prepare their tags and source geometry in Unreal, then rebuild the PAK. |
| The player falls through a visible floor. | Inspect the floor's ordinary collision. Water capture and player collision are separate checks. |
| A hose or cable cannot route over a wall or canal. | Check the route and try the supplied BP_NavLink between suitable locations. Test the result in gameplay. |
| The uploaded level starts nearly empty. | Verify that the prepared water state was saved before draining the level in a test. Restore and save the intended start. |
| The minimap shows an older layout. | Capture it again after the final layout changes, save and update the submission. |
| Custom content is missing after reloading. | Put its PAK files directly in Documents > DrainSim > SaveScenes, beside the scene JSON, and check the import reports. Use the advanced checks. |
| A large scene slows down during play. | Compare a smaller saved version and remove recent additions in groups to isolate the cost. |
| Gameplay UI remains over the editor after a test. | If this occurs in your build, enter gameplay again with P, wait for loading to finish, then leave with Esc. Reload the scene if the display remains incorrect. |
If the water preview appears stale after an object or tag change, a community-tested workaround is to move the affected actor slightly, release it and inspect the preview again. Restore its intended transform afterwards and recheck the result. Save a working copy before experimenting; this is a refresh workaround, not a requirement for every edit.
Report a problem
Include:
- DrainSim version and whether you used the stable or preview branch.
- The steps needed to reproduce the problem.
- What you expected and what happened instead.
- A screenshot showing the relevant objects, tags or water setup.
- Whether the problem survives saving, closing and reopening the scene.
For PAK problems, include the creator-tool version and relevant build/import reports described in PAK troubleshooting.
Post in the DrainSim Discord.
Advanced modding: before you start
Use this guide to bring custom content into DrainSim from Unreal Engine. If you are using only the game's built-in content, start with the creator guide.
Choose your workflow
| Workflow | What you prepare in Unreal | What you do in DrainSim |
|---|---|---|
| Custom asset pack | Meshes, materials, textures and other compatible assets inside a Content Only plugin. | Load the PAK, then place its meshes using the in-game Content Browser. |
| Imported map | A saved map and its dependencies inside that plugin. | Load the PAK and use the editor's level-streaming workflow to bring in a compatible map. |
Both routes use the same PAK build process. Imported maps also need map preparation and Level Blueprint cleanup.
Requirements
- Windows with Windows PowerShell 5.1 and a complete Unreal Engine 5.6 installation compatible with the creator bundle.
- A project named DrainSim, with the file
DrainSim.uproject. - A Content Only plugin inside that project.
- The complete DrainSim PAK Creator bundle supplied for your game and engine.
- Space for a temporary project copy, cooking and the final archive. Large projects can need substantially more than 10 GB of working space.
For maps, the included native editor helper must match the installed engine's BuildId. Check the bundle's requirements and the creator tool's log. The tool stops if it cannot find a compatible helper. A folder named UE_5.6 alone does not establish binary compatibility.
No separate Python installation is needed. The complete creator bundle includes the compiled helper, so creators do not need to compile that helper themselves. This does not remove any build requirements of an unrelated C++ project you choose to use.
What the importer accepts
DrainSim checks imported content before making compatible assets and maps available.
A map using an imported Blueprint actor is excluded in full. The importer does not remove that actor and load the rest of the map. Direct or indirect dependencies on other excluded packages can also exclude a map or asset.
| Content | Behavior |
|---|---|
| Compatible native assets with available dependencies | Can be retained and loaded. |
| A compatible map using supported native actors and dependencies | Can be retained and streamed. |
| A standalone imported Blueprint asset | Excluded. |
| A map that depends on an imported Blueprint actor | The map is excluded as a whole. |
| A map with a compiled embedded Level Blueprint | Excluded unless the creator's map-cleanup step removes that embedded script content successfully. |
| A map or asset that directly or indirectly depends on an excluded package | Excluded as well. Check the reported dependency chain. |
| An unused Blueprint beside otherwise compatible assets | Does not by itself require rejecting the entire PAK. |
Native actors here means actor classes already supplied by the engine/game, such as ordinary placed Static Mesh actors. It does not mean that modders can ship their own C++ classes in this Content Only workflow.
DrainSim's own built-in Blueprint actors are supported and available in Content Browser > Root > DrainSim. These restrictions apply to imported Blueprint content. See the supplied actor folder.
Two checks, at different stages
- The creator tool prepares and cooks your content, checks references and validates the archive.
- DrainSim's importer decides which packages the running game can accept.
A successful build does not guarantee that every asset or map will be available in the game. A successful PAK import can also contain assets but no compatible maps.
Continue with Prepare your content.
Prepare your content
Use the Unreal Engine version required by the creator bundle. Do not upgrade the content project to a newer engine just because one is available.
1. Create the project
Create an Unreal project named DrainSim, so its project file is DrainSim.uproject. You are preparing custom content; you do not need the game's source project.
Start with a small test pack. One mesh with its materials is enough to verify the asset workflow before importing a large environment.
2. Create a Content Only plugin
- Open Edit > Plugins.
- Click Add.
- Select Content Only.
- Give the plugin a unique internal name, such as
MyCanalPack. - Add the author and description, then click Create Plugin.
The internal plugin name must start with a letter and contain only letters, digits and underscores. Keep this identity consistent across future builds of the same pack.
Original example uses the name AdvancedVillagePack. Use your own consistent name.
If plugin content is not visible, enable Show Plugin Content in the Content Browser's settings. See Epic's plugin documentation.
3. Put the content inside the plugin
Keep the custom runtime assets under the plugin's Content folder. Organize them into useful groups such as Maps, Meshes, Materials and Textures.
| Example on disk | Purpose |
|---|---|
DrainSim/DrainSim.uproject | The project selected by the creator tool. |
DrainSim/Plugins/MyCanalPack/MyCanalPack.uplugin | The Content Only plugin descriptor. |
DrainSim/Plugins/MyCanalPack/Content/Maps/Canal.umap | An optional imported map. |
DrainSim/Plugins/MyCanalPack/Content/Meshes/ | Your custom meshes. |
DrainSim/Plugins/MyCanalPack/Content/Materials/ | Materials, instances and functions needed by those meshes. |
DrainSim/Plugins/MyCanalPack/Content/Textures/ | Required textures. |
If your content is currently in the project's ordinary Content folder, move it through Unreal's Content Browser into the new plugin. In the original example, a named folder is dragged onto the plugin and Move Here is selected.
This older screenshot also shows a Blueprints folder. Its presence in a source pack does not make imported Blueprint gameplay supported.
Update/fix redirector references through Unreal's folder context menu and use Save All. Do not move .uasset files in Windows Explorer as a substitute: that does not update Unreal's internal references.
Alternative: Unreal's Migrate tool
Some DrainSim creators report better results transferring content into the Content Only plugin with Asset Actions > Migrate instead of Move Here. Select the assets in Unreal, open that command and review the dependency list. For this workflow, the destination is your plugin's Content folder, such as DrainSim/Plugins/MyCanalPack/Content.
After migration, open the target project and verify that the intended assets and their references resolve inside the plugin. Use Save All and run the creator tool's reference check before a full build. Migration copies assets and dependencies; it does not replace checking the final plugin references. Epic's migration guide explains the general tool; the preference for using it in this plugin workflow comes from creator reports.
The example paths above are one clean layout, not a required extra nesting level. The important requirement is that the selected plugin contains the saved runtime content you intend to cook.
4. Make dependencies self-contained
A mesh may need a material instance, which needs a parent material, functions and textures. Moving only the mesh is not enough.
Use Unreal's Reference Viewer and the creator tool's reference report to find dependencies. Bring the required assets into your plugin and ensure references point to those copies.
The creator tool blocks missing required packages and unapproved hard dependencies on ordinary project content or other plugins. Soft-reference warnings also need review if that content is required during play. An engine asset being available in your local editor does not prove it is included in DrainSim.
Check: save everything and verify a small pack before continuing with a full map.
If you are starting with a Blender scene or FBX files, use Bring geometry into Unreal to check a small sample before importing the full environment. It covers practical water geometry, materials, collision and the assembled map layout.
5. Prepare an imported map
Skip this section for a pack containing only individual assets.
Keep the environment compatible
Build the imported environment from supported content. Original AI, scripted doors, triggers and other source-game logic do not transfer automatically.
If a building is placed as a custom Blueprint actor, the loader will not convert it into ordinary meshes for you. Replace or reconstruct the required visual environment with compatible native actors before packing. A Blueprint with no visible event nodes can still be a Blueprint dependency.
Check indirect dependencies too. Removing the visible Blueprint actors is not enough if the map still references an asset that depends on excluded content. Follow the import report's dependency chain rather than relying only on what is visible in the Outliner.
Prepare water participation in Unreal
Read Water simulation and FluxHide before finalizing the geometry.
- For a building or bridge with an overhang, the recommended simple setup is to tag the whole actor
FluxHide, then recreate the necessary water barriers with WaterBlockers in DrainSim. - In Unreal, select the placed actor and add
FluxHidein Details > Actor > Tags before packing. This is an actor tag, not a mesh asset name or material setting. - Shape the blockers around the main building body or bridge supports without including the overhang. Keep intended interiors, entrances and channels open.
- Mesh separation is optional when you want independent pieces; it is not required just to exclude a roof or deck.
- Avoid designs requiring independently flooded floors directly above each other.
- Break tall vertical drops into steps or use a slightly sloped WaterBlocker to reduce water spikes.
- Keep player collision and water capture as separate checks.
Prepare these tags before streaming the map into DrainSim: individual streamed objects cannot be clicked or selected in the in-game editor. To change their tags after import, edit the map in Unreal and rebuild the PAK.
Save the supported map layout
Save your .umap files inside the selected plugin. The creator tool processes all saved maps in that plugin automatically, including classic streaming sublevels stored there.
World Partition, external actor/object packages and World Composition are not supported by this cleanup workflow. Use an appropriate ordinary-map setup; disabling a UI checkbox after building a complex map is not a substitute for checking its actual saved layout.
Embedded Level Blueprint logic is removed from the temporary build copy. Do not make the exported map depend on that logic. See what cleanup changes.
6. Check before cooking
- The project file is
DrainSim.uproject. - The selected plugin is Content Only and has a valid, consistent name.
- Required meshes, materials, textures and maps are saved inside that plugin.
- References resolve to the intended assets.
- Imported maps do not depend on custom Blueprint actors or Level Blueprint logic.
FluxHidetags are prepared in Unreal, and the required WaterBlockers are planned for the DrainSim scene.- Imported geometry has the intended scale, placement, materials and player collision.
- The maps use a layout supported by the cleanup tool.
- Everything is saved with Save All.
Continue with Build a PAK.
Bring geometry into Unreal
Use this page if your environment begins in Blender or another modelling tool. If the assets already work in Unreal, continue with Prepare your content.
Start with one representative section, such as a small building with a roof overhang. Take it through import, PAK creation and a DrainSim test before processing the whole environment.
Preserve a source copy
Save an untouched copy of the working scene and keep its texture files together. Work on a separate export copy so you can recover from an unsuitable merge, split or scale change.
If a specialised importer is involved, use a Blender version supported by that importer. Successfully opening a file is only the first check: confirm the geometry, material assignments and texture coordinates are usable.
Plan simple water geometry
For an overhanging building or bridge, start with FluxHide on the whole placed actor, then use WaterBlockers in DrainSim to represent the solid parts that should stop water. This is usually easier than splitting the visual geometry just to exclude a roof or deck. Keep the blockers clear of overhangs, intended interiors and water routes.
Splitting meshes is optional when you need independent pieces for editing or other purposes. Keep the environment in manageable sections; there is no need to split every small fragment for the water simulation.
Apply actor tags in the Unreal map before packing. Individual objects in a streamed PAK level cannot be selected in DrainSim to add those tags afterwards. See water participation preparation.
Remove unwanted source-scene helpers and old water surfaces from the export copy. Keep intentional environment geometry and any collision meshes your import workflow needs. Recreate DrainSim's water and gameplay setup in DrainSim.
Prepare a small FBX export
For a static environment:
- Select the intended meshes, including deliberate custom collision meshes when used.
- Export the selection to FBX and restrict the object types to the content you need.
- Include the evaluated modifiers if they are meant to appear in the final geometry.
- Omit animation from an environment that has no animation to transfer.
- Keep the texture files available separately, even if the exporter offers embedding.
Preserve working UVs and shading. If triangulation produces a visible defect, fix the affected geometry in the source scene and test that piece again.
Inspect the Unreal import
Import into your Content Only plugin, then inspect the resulting assets.
| Item | Check |
|---|---|
| Combine Meshes | Leave it off when the source objects need separate control. |
| Materials and textures | Verify that the expected assets arrived and that material inputs use the correct textures. |
| Normals and tangents | Inspect the surface shading before changing the import method. |
| Collision | Check openings and walking surfaces, not just whether a collision object exists. |
| Scale and orientation | Compare against a known size before committing to a large import. |
The FBX normal options differ: Import Normals retains the file's normals and lets Unreal calculate tangents; Import Normals and Tangents retains both; Compute Normals rebuilds them. Choose according to the result you need, not merely to remove a warning.
Materials often need attention after transfer. A mesh can import correctly while a texture is unconnected or a source shader's effect is missing. Fix the material in Unreal and keep its dependencies inside the plugin.
Check the assembled map as well as the assets
Importing mesh assets into the Content Browser does not, by itself, prove that a complete level has been assembled with the right placements. Check the environment in an Unreal map, including relative positions, orientation and scale.
Before detailed water preparation, verify that the whole environment sits where intended. Check its placement again after streaming it into DrainSim; Custom Location on the stream loader controls the custom environment's offset.
For custom FBX collision, Epic documents a limitation when multiple meshes with custom collision share one FBX: only the first mesh's collision is imported. Export collision-critical pieces separately where needed and inspect the result.
Diagnose the failed stage
| Symptom | First place to look |
|---|---|
| Objects are combined when you wanted separate editing | Check source joins and Combine Meshes. Combining a building is fine for the FluxHide-and-blocker workflow. |
| Far too many small assets | Review how the export copy was split; keep only useful divisions. |
| Missing textures or incorrect material effects | Check source texture files, UVs, Unreal material inputs and plugin dependencies. |
| Shading warnings | Inspect the affected mesh for visible defects; repair or reimport that piece if needed. |
| Open doorway blocks the player | Inspect the collision shape across the opening. |
| Imported environment sits too high or low | Verify the assembled map transform and the custom streaming offset. |
| Water behaves incorrectly despite good geometry | Inspect capture, FluxHide and blockers in the water guide. |
Once the small sample works, apply the same preparation to the remaining areas. Check source tags and dependencies in Prepare your content, then Build a PAK.
References: Epic FBX Static Mesh Pipeline, Epic FBX import options and Blender FBX export options.
Build a PAK
Use the complete DrainSim PAK Creator bundle supplied for your game and engine. Keep its launcher, PowerShell script and helper together; do not mix files from different releases.
1. Get the complete creator bundle
The original DrainSim workflow provides modding tools under the game installation's DrainSim/Content/ModdingTools folder. Use the complete creator bundle supplied for your game/engine version; check its included START_HERE.txt and README.txt.
Extract the whole ZIP into a new folder and keep these together:
- The PAK Creator launcher (
.bat) named inSTART_HERE.txt - Its matching creator script (
.ps1) - The included
DrainSimPakEditorHelperfolder
The launcher and script filenames may include a release number. Use the files from your complete bundle.
For maps, the helper must match the engine BuildId. See Requirements.
2. Save and select your project
- In Unreal, use Save All.
- Close the project, or at least stop editing it during the build. Do not run another packaging job on the same project/output at the same time.
- Double-click the bundle's PAK Creator launcher (
.bat), as identified inSTART_HERE.txt. - Select
DrainSim.uproject, or browse/paste its full path when requested. - Select the Content Only plugin you want to pack.
Check the console's version and script path if you have several tool downloads. Only saved content is used. You do not need to type each map name; the tool finds the plugin's saved maps.
3. Choose whether to change Nanite settings
At the Nanite prompt:
| Choice | Result |
|---|---|
| Enter / N | Keep your existing mesh settings. Meshes already using Nanite stay that way. |
| Y | Attempt to enable Nanite on eligible meshes in the temporary build copy. |
For the first compatibility test, keep the existing settings. Optional conversion skips unsuitable or uncertain content, including identified foliage, translucent materials and potential vertex animation/World Position Offset. It does not guarantee better performance.
4. Let the build finish
For map builds, the tool prepares a temporary project copy, removes embedded Level Blueprint content, reopens the saved maps to verify them, checks references, cooks and validates the PAK. Additional Unreal windows or processes during these stages are expected.
Read any blocking report. Do not treat the presence of an old output file as proof that this run succeeded.
What Level Blueprint cleanup changes
| Item | Creator tool behavior |
|---|---|
| Embedded Level Blueprint and its script objects | Removed from the temporary map copy before cooking. |
| Ordinary Blueprint assets and placed Blueprint actors | Retained by the creator tool. They remain subject to DrainSim's import restrictions. |
| Original project assets | The cleanup works on a copy, leaving the authored source maps intact. |
| Retained actors, transforms, components and tags | Checked before/after cleanup and after reopening the saved copy; failed verification blocks the build. |
Removing the embedded Level Blueprint does not make an ordinary Blueprint building compatible. A map depending on that imported Blueprint can still be excluded by DrainSim's loader.
Even a visually empty Level Blueprint graph may leave generated objects in the saved map. The cleanup and import checks are not based only on whether the graph appears empty.
Packaging settings
The creator tool applies the following settings for its build. With this workflow, you do not need to reproduce them manually in your original Project Settings.
| Setting | Value for this build |
|---|---|
| PAK output | Enabled |
| Use Io Store | Off |
| Zen Server as cooked output store | Off |
| Share Material Shader Code | Off |
| Shared Material Native Libraries | Off |
| Generate Chunks | Off |
| Generate No Chunks | On |
| Cook All | Off |
DrainSim's custom-content workflow expects a compatible .pak, not an IoStore .utoc/.ucas pair. The tool produces one plugin PAK and checks that the expected cooked content is present.
5. Find the successful output
By default, the tool writes to your Windows Desktop:
Desktop/DrainSimPakOutput/MyCanalPack/MyCanalPack.pak
Replace MyCanalPack with your plugin name. Redirected Windows Desktop locations are respected. On success, Explorer selects the output PAK.
The output directory also contains reports and may contain MyCanalPack_Previous.pak. The previous file is a backup, not an additional dependency to distribute with the new build.
A failed build leaves the previous successful PAK in place. Check the run's result before copying or uploading the file.
Optional command: check references only
The creator script's -CheckOnly option checks references without building a PAK. Use the PowerShell command in your bundle's README.txt from the extracted tool folder, so the script filename matches your download.
This checks saved original references. It does not clean Level Blueprints, create a PAK or prove that an imported map will pass the runtime loader.
Continue with Import and test.
Import and test
Test inside DrainSim after every significant content change. A correct-looking Unreal preview and a successful PAK build are only the first stages.
1. Keep the PAK beside the scene
Required custom PAKs must be directly in Documents > DrainSim > SaveScenes, in the same folder as the saved scene JSON. On a standard Windows setup, paste this into File Explorer's address bar:
%USERPROFILE%\Documents\DrainSim\SaveScenes
If Windows has redirected Documents, open your actual Documents folder, then DrainSim\SaveScenes there.
Save a new scene first so its destination is established. Copy the successful output PAK into that folder, then use File > Load Pak to load that copy. Make sure it is the same PAK version you intend to distribute.
For example:
| File in the scene folder | Purpose |
|---|---|
CanalTest.json | The saved DrainSim scene. |
MyCanalPack.pak | A custom content dependency used by that scene. |
Saved custom PAK references use filenames such as MyCanalPack.pak. Absolute paths from your machine or Steam Workshop download folders are not portable scene dependencies. Do not put user PAKs into the game's ordinary startup auto-mount content folder.
Storing a PAK filename does not copy the PAK file. A file left only in the creator tool's output folder is not available beside the scene when that scene is reloaded. If you copy the scene into another folder, copy its required PAKs there too. Subfolders are not searched by this scene-path resolver.
2. Load the PAK
- Start DrainSim and open Level Editor.
- Choose File > Load Pak.
- Select the custom PAK copy beside your scene JSON.
- Check the imported content in the Content Browser.
If the PAK imports but a particular map is absent, check the import report. Compatible assets may be retained while an incompatible map is excluded.
3A. Use individual assets
For an asset pack, drag the imported meshes from the Content Browser into your scene. Use the normal object controls to place them.
Apply the intended water participation with Water Hider or actor tags, check collision and save the resulting scene.
3B. Use an imported map
For an imported environment, select BP_EditorStreamLevelLoader in the Outliner. Its Details expose Level, Background, Custom Level and Custom Location. Use Custom Level for the retained map from your loaded PAK, and Custom Location to adjust the streamed environment's position.
Enter only the level name in Custom Level. No path is needed, and do not include the .umap extension. For a map saved as Canal.umap, enter Canal. Do not enter /MyCanalPack/Maps/Canal or the PAK filename.
Keep the DrainSim scene's essential gameplay and water setup. Streaming an environment into the scene does not bring the original source game's logic with it.
Check the imported geometry's scale, position and water simulation coverage. Prepare FluxHide tags in the Unreal source map because individual streamed objects cannot be clicked or selected in the in-game editor. In DrainSim, add WaterBlockers for the solid parts of excluded buildings or bridges while keeping intended water routes open.
If the source geometry or tags need changes, return to Unreal, save and rebuild the PAK.
4. Test the complete level
- Check the starting position, scale and player routes.
- Verify important meshes, materials and textures.
- Test floors and walls with the player and intended tools.
- Watch the water around roofs, bridges, supports and map boundaries.
- Set up the DrainSim scene's Measure Volumes for the imported environment. Match each area and calibrate its Max Height from the toolbar at the maximum intended water state.
- Set each region's Target Height tolerance and test that the player can clear it.
- Check regional height displays, minimap, drainage and performance during normal gameplay.
- Save the intended water state, capture the minimap and save the scene.
- Close and reopen DrainSim, load the scene and repeat the checks.
For a Workshop release, also test the subscribed Workshop copy. A clean installation helps reveal dependencies that exist only in your development setup.
5. Rebuild and update safely
Use the same plugin identity and intended PAK filename for updates to an existing pack. Renaming the archive does not change the plugin's internal asset paths.
Close DrainSim before replacing a PAK used by an active session, then restart and load it again. The importer uses a verified copy, so changing the source PAK does not replace content that is already mounted in the running session.
Do not try to load two different builds owning the same plugin root simultaneously. Keep the scene and the exact PAK files it was tested with together.
Once the reloaded version works, follow Save, test and publish.
PAK troubleshooting
First identify the stage that failed: preparation, cooking, import, or playing the loaded scene. Each stage answers a different question.
Creator-tool failures
Build reports are stored under:
Desktop/DrainSimPakOutput/MyCanalPack/Logs/<run-id>/
Use your plugin name and the folder for the run that failed.
| Symptom | Check |
|---|---|
| The wrong tool version starts. | Extract the complete current bundle into a new folder and run its matching BAT. Check the version and script path printed in the console. |
| No project is found. | Browse or paste the full path to DrainSim.uproject. |
| No compatible helper is found. | Read the required engine BuildId in Build.log. Use the matching complete bundle; do not edit UnrealEditor.modules to force an incompatible binary to load. |
REFERENCE CHECK STOPPED | Open ReferenceReport.txt. Follow the dependency chain and move/repoint required assets using Unreal. |
| A material depends on assets outside the plugin. | Check the Material Instance's parent, then its master material, functions and textures. Copying the visible instance alone is not enough. |
| Level Blueprint cleanup or verification fails. | Read the Level Blueprint reports and corresponding editor logs. Check the named map and supported map features. |
| Actors/components differ after saving. | Inspect LevelBlueprintVerify.txt, .json and .log. Do not assume that the archive is safe to publish because the original map still looks correct. |
| Cooked assets are missing. | Check MissingCookedAssets.txt, Never Cook settings, editor-only content and the cook logs. |
| Unreal cooking fails. | Read BaseBuild.log and PluginBuild.log for the original error. |
| An old PAK still exists after failure. | Expected behavior: failed builds preserve the previous successful output. It is not evidence that the new run succeeded. |
If the tool reports unsupported path characters, use a simple project/output location such as D:\DrainSimMods\CanalTest. The nested batch workflow rejects double quotes and the characters %, !, ^, &, |, < and > in these paths. Spaces, parentheses, apostrophes and non-English letters are supported by the creator tool.
Runtime import failures and exclusions
DrainSim's PAK importer writes reports inside the game's Saved/Logs location:
| Report | Use |
|---|---|
QuietPakImportReport.txt | The current attempt's context, then its classification results if that stage is reached: retained packages/maps, exclusions and dependency reasons. |
QuietPakImportBlocked.txt | The current attempt's context or failure reason. The file may exist even when no error has been recorded. |
Later attempts can overwrite these reports. Collect them immediately after reproducing the relevant failure, together with the game's log from the same run.
An early failure can leave only an attempt summary instead of package classifications. Read the file contents and the identified source PAK; the presence of a file named QuietPakImportBlocked.txt does not by itself mean that import failed.
| Symptom | Check |
|---|---|
| PAK imports but the map is absent. | The map may have been excluded while compatible assets were retained. Read its package/dependency reason. |
| Map references a Blueprint building. | Replace the custom Blueprint actor with a compatible environment setup in Unreal, then save and rebuild. The loader does not remove individual actors from a map to salvage it. |
| Map contains no visible Blueprint actor but is still excluded. | Read the exact package or class-import reason and any dependency chain. Indirect dependencies, embedded script objects, unavailable classes or other validation failures can block the map. A class-import diagnostic alone does not prove that the map contains executable Blueprint logic. |
| Map has an embedded Level Blueprint. | Rebuild using the compatible map-cleanup tool and inspect its verification reports. An empty-looking graph is not sufficient proof. |
| Assets are missing despite a successful cook. | Check the runtime report for unavailable classes and missing or excluded dependencies. |
| The old content remains after copying a new PAK. | Restart DrainSim and import the intended source file in a fresh session. |
| Two copies of a pack conflict. | Avoid importing a local and Workshop copy that own the same internal plugin root in one session. |
| Scene loads but its custom content is missing. | Put every required custom PAK directly in Documents > DrainSim > SaveScenes, beside that scene's JSON, with the expected filename. |
| The imported map is accepted but Custom Level does not load it. | Enter only its level name, such as Canal, without a path or .umap extension. Check the import report to confirm that the map was retained. |
| Water is wrong but the environment loads. | Check source actor tags, overhead geometry, blockers and the saved water state. Start with Water simulation and FluxHide. |
| Water behaves correctly, but height displays or completion do not. | Check the measured areas and calibrate Max Height and Target Height in the DrainSim scene. Follow Measure Volume setup. |
Send a useful report
Include the DrainSim build/branch, creator-tool version, Unreal version and engine BuildId, plugin name, exact error and the relevant reports. For a build failure, include the run's Logs folder. For an import failure, include both QuietPak reports and the game log from that attempt.
State whether you were importing individual assets or a complete map, and whether the problem persists in a fresh game session. A small project that reproduces the failure is easier to investigate than a large environment with unrelated assets.
Get help on the DrainSim Discord.