A downloadable game

Buy Now$14.99 USD or more

Your bulk edit stops at the edge of the level you have open.

Property Matrix edits the current selection. Replace Selected Actors With replaces the current selection. Both are good tools. Both end at the map boundary.

So when the lighting standard changes and every point light in the project needs a different unit, or the placeholder Blueprint finally gets its real version, somebody writes a throwaway Python script. Then somebody writes another one next month, and nobody reviews either.

Project-Wide Level Surgeon gives those operations project scope, a preview you can hand to somebody, and an undo.

Three operations, every map

SET — write a named property on every matched actor.
-Property=PointLightComponent.Intensity -Value=4400.0

SWAP — replace every matched actor with another class. Keeps the object name, so soft references and level scripts still resolve. Keeps transform, label, folder, tags and attachments. Carries every actor-level property that exists on both classes with the same name and type. The engine's own replace does none of that.

MARK — add and strip actor tags, move actors between editor folders, across the whole project.

It previews first. Always.

Run it with no switches and it opens every map, decides every change, and writes an HTML sheet. No package is touched. Only -Execute writes.

The preview and the write are the same code path-Execute is read at one place, the statement before the value changes. The dry run is not a simulation of the write. It is the write, stopped one statement short.

And it can be undone.

Every run that writes also writes a JSON journal — before the packages are saved, so a run that dies half way through 240 maps is still fully reversible.

For a swap, the journal records the complete set of authored values the actor held before the swap, including the ones the new class had no property for. The rollback puts every one of them back. That is strictly more than the engine can undo, on strictly more maps than the engine's undo reaches.

World Partition is read, not skipped.

A commandlet that reads ULevel::Actors sees an empty level on a World Partition map — every actor lives in its own package. Tools that do not know this report "0 actors" over an open-world project and call it clean.

Level Surgeon reads the external actor packages directly. SET and MARK work normally on partitioned maps. SWAP is refused on them by name, in the report — not silently skipped, and not attempted.

Built for a repository, not a Friday afternoon

  • Recipes are JSON files. They live in your repo, diff in code review, and run the same on a designer's box and on the build server.
  • Revision control aware. Every package is checked out before it is written, and the report names any file that would not check out.
  • Exit codes are a CI gate. 0 nothing to change · 1 changes found or made · 2 failed · 3 bad arguments.
  • Every refusal is named and shown. A skip you cannot see is indistinguishable from a bug.
  • If nothing was examined, it prints no verdict at all rather than a reassuring zero.

What you get

  • Full C++ source, readable and commented. No obfuscation, no binary blob.
  • One editor module, no Slate, no runtime cost. Nothing ships in your game.
  • Automation tests included and run: 21 of 21 green on UE 5.8.
  • A user Readme with worked examples for all three operations.

Requirements

Unreal Engine 5.8, Windows. That is the only engine this build has been compiled and run on, and it is the only one claimed.

Full documentation

More CSAF tools for Unreal

Overlap Warden — clears the overlap flags Unreal can never fire.
Material Sprawl Collapser — merges duplicate materials into one master.

Purchase

Buy Now$14.99 USD or more

In order to download this game you must purchase it at or above the minimum price of $14.99 USD. You will get access to the following files:

level-surgeon-ue5-plugin.zip 89 kB
Version 1.0.0

Development log

Leave a comment

Log in with itch.io to leave a comment.