Unreal

DataTable rows, ready to import.

It reads your row structs from your C++ headers, writes new rows as the CSV a DataTable imports, and changes values in place when a formula moves.

What it reads from a Unreal project.

Open the project folder in the app. It knows an Unreal project by its .uproject file, reads the headers under it, and skips Binaries, Intermediate and Saved. A .uasset is a binary format only the editor can write, so the app never touches one: rows go through CSV, the route a DataTable already gives you, and a reimport brings them in.

Read as data

  • Structs that derive from FTableRowBase.
  • UDataAsset and UPrimaryDataAsset subclasses, and other USTRUCTs.
  • UPROPERTY members only, since nothing else reaches a DataTable row.

Passed over

  • Actors, pawns, characters and components.
  • Widgets.
  • Members without UPROPERTY.

ClampMin and ClampMax in a property’s meta, or UIMin and UIMax, are limits: every new object is checked against them, and a retune that would cross one is clamped and says so. A ToolTip, or the doc comment above the property, becomes its description.

What it gives you.

The object is Emberbrand, from the demo’s saved run. Both files were written by the app’s own code when this page was built: the first is what you copy out, the second is what Save to project writes into a project that holds the first.

WeaponRow.hUSTRUCT for a Data Table row, and a function that adds the rows to a table. Save it as the file name shown: the generated include has to match it.
#pragma once

#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "WeaponRow.generated.h"

UENUM(BlueprintType)
enum class EWeaponRarity : uint8 {
    Common UMETA(DisplayName = "common"),
    Uncommon UMETA(DisplayName = "uncommon"),
    Rare UMETA(DisplayName = "rare"),
    Epic UMETA(DisplayName = "epic"),
    Legendary UMETA(DisplayName = "legendary"),
};

UENUM(BlueprintType)
enum class EWeaponDamageType : uint8 {
    Slashing UMETA(DisplayName = "slashing"),
    Piercing UMETA(DisplayName = "piercing"),
    Bludgeoning UMETA(DisplayName = "bludgeoning"),

134 more lines

The full code comes with the application, which a seat covers.

What Save to project does.

  • New rows are appended to the CSV your existing rows are in, in its own column order. The rows already there stay byte for byte.
  • The first column is the row name, headed --- as Unreal’s own export heads it. When your struct declares an Id, the Id keeps a column of its own as well.
  • Lists and structs go in one cell in Unreal’s own text format, such as ("Fire","Frost") or (X=1.5,Y=2), which a reimport reads.
  • With no CSV yet, it creates one and says how to bring it in: import it in the Content Browser and pick the row struct.

When a formula changes.

A retune changes one cell in each row it moves, quoted the way the file already quotes it, and nothing else in the file. Reimport the DataTable in the editor to pick up the new values.

Apply cannot be undone from inside the app, so commit first.

How a retune works, step by step

Try it on your Unreal project.

The evaluation is the whole app for 14 days, with no card. The guide covers the first ten minutes.

Also for Unity and Godot, and for any other engine through JSON.

Open the demoTalk to us about seats