Data Assets
DataTable, Curve, and Array verbs for structured data manipulation.
Verbs for reading and writing DataTable rows, Curve keys, and array properties
on any UObject asset. All verbs return JSON to stdout. Use -compile -save
flags on write verbs to persist changes.
DataTable verbs#
dt-list-rows#
List all row names and struct fields in a DataTable.
Category: Read
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | DataTable asset path |
Examples:
-verb=dt-list-rows -asset=/Game/Data/DT_WeaponStats
Output:
{
"success": true,
"rowStruct": "FWeaponStatsRow",
"fields": ["Damage", "FireRate", "MagazineSize", "ReloadTime"],
"rows": ["AR_Default", "SMG_Default", "Shotgun_Default"]
}
dt-read-row#
Read all field values for a single row.
Category: Read
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | DataTable asset path |
-row= |
Yes | Row name |
Examples:
-verb=dt-read-row -asset=/Game/Data/DT_WeaponStats -row=AR_Default
Output:
{
"success": true,
"row": "AR_Default",
"fields": {
"Damage": "25.0",
"FireRate": "600.0",
"MagazineSize": "30",
"ReloadTime": "2.1"
}
}
dt-add-row#
Add an empty row to a DataTable. Idempotent: if the row already exists, the verb succeeds without modifying it.
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | DataTable asset path |
-row= |
Yes | Row name to add |
Examples:
-verb=dt-add-row -asset=/Game/Data/DT_WeaponStats -row=LMG_Default -save
After adding, use dt-set-field to populate field values.
dt-remove-row#
Remove a row from a DataTable. Idempotent: if the row does not exist, the verb succeeds without error.
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | DataTable asset path |
-row= |
Yes | Row name to remove |
Examples:
-verb=dt-remove-row -asset=/Game/Data/DT_WeaponStats -row=Shotgun_Default -save
dt-set-field#
Set a field value on a specific row.
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | DataTable asset path |
-row= |
Yes | Row name |
-field= |
Yes | Field/column name |
-value= |
Yes | Value as string |
Examples:
# Set a single numeric field
-verb=dt-set-field -asset=/Game/Data/DT_WeaponStats -row=AR_Default -field=Damage -value=30.0 -save
# Set a string field
-verb=dt-set-field -asset=/Game/Data/DT_WeaponStats -row=AR_Default -field=DisplayName -value="Assault Rifle" -save
Batch example: add a row and populate all its fields in one commandlet run:
{
"defaultAsset": "/Game/Data/DT_WeaponStats",
"operations": [
{ "verb": "dt-add-row", "args": { "row": "LMG_Default" } },
{ "verb": "dt-set-field", "args": { "row": "LMG_Default", "field": "Damage", "value": "18.0" } },
{ "verb": "dt-set-field", "args": { "row": "LMG_Default", "field": "FireRate", "value": "750.0" } },
{ "verb": "dt-set-field", "args": { "row": "LMG_Default", "field": "MagazineSize", "value": "100" } },
{ "verb": "dt-set-field", "args": { "row": "LMG_Default", "field": "ReloadTime", "value": "4.5" } }
],
"save": true
}
Curve verbs#
curve-list-keys#
List all keys across all channels in a curve asset.
Category: Read
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Curve asset path (CurveFloat, CurveVector, CurveLinearColor) |
Examples:
-verb=curve-list-keys -asset=/Game/Data/Curves/C_DamageFalloff
Output:
{
"success": true,
"curveType": "CurveFloat",
"channels": [
{
"name": "Value",
"keys": [
{ "time": 0.0, "value": 1.0, "interp": "Linear" },
{ "time": 50.0, "value": 0.75, "interp": "Linear" },
{ "time": 100.0, "value": 0.4, "interp": "Constant" }
]
}
]
}
For a CurveVector, channels are named X, Y, Z. For CurveLinearColor, channels are R, G, B, A.
curve-add-key#
Add or update a key at a given time. Idempotent at the time value: if a key already exists at that time, its value and interpolation are overwritten.
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Curve asset path |
-time= |
Yes | Key time (float) |
-value= |
Yes | Key value (float) |
-interp= |
No | Interpolation mode: Linear (default), Constant, Cubic |
-channel= |
No | Channel name. Value for CurveFloat, X/Y/Z for CurveVector, R/G/B/A for CurveLinearColor. Defaults to first channel. |
Examples:
# Add a key to a float curve
-verb=curve-add-key -asset=/Game/Data/Curves/C_DamageFalloff -time=75.0 -value=0.5 -save
# Add with constant interpolation
-verb=curve-add-key -asset=/Game/Data/Curves/C_DamageFalloff -time=120.0 -value=0.2 -interp=Constant -save
# Add a key to the Y channel of a vector curve
-verb=curve-add-key -asset=/Game/Data/Curves/C_RecoilPattern -time=0.5 -value=2.0 -channel=Y -save
Batch example: build a damage falloff curve from scratch:
{
"defaultAsset": "/Game/Data/Curves/C_DamageFalloff",
"operations": [
{ "verb": "curve-add-key", "args": { "time": "0.0", "value": "1.0", "interp": "Linear" } },
{ "verb": "curve-add-key", "args": { "time": "30.0", "value": "1.0", "interp": "Linear" } },
{ "verb": "curve-add-key", "args": { "time": "60.0", "value": "0.7", "interp": "Linear" } },
{ "verb": "curve-add-key", "args": { "time": "100.0", "value": "0.35", "interp": "Constant" } }
],
"save": true
}
curve-remove-key#
Remove a key at a given time. Idempotent: if no key exists at that time, the verb succeeds without error.
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Curve asset path |
-time= |
Yes | Key time (float) |
-channel= |
No | Channel name (same options as curve-add-key) |
Examples:
-verb=curve-remove-key -asset=/Game/Data/Curves/C_DamageFalloff -time=75.0 -save
# Remove from a specific channel on a vector curve
-verb=curve-remove-key -asset=/Game/Data/Curves/C_RecoilPattern -time=0.5 -channel=Y -save
Array verbs#
Operate on array properties of any UObject asset (Blueprints, DataAssets, GameplayEffects, etc.). The property name refers to the UPROPERTY name on the asset's class or CDO.
array-count#
Get element count and the inner type of an array property.
Category: Read
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Asset path |
-property= |
Yes | Array property name |
Examples:
-verb=array-count -asset=/Game/Abilities/GA_FireWeapon -property=ActivationRequiredTags
Output:
{
"success": true,
"property": "ActivationRequiredTags",
"count": 3,
"innerType": "GameplayTag"
}
array-get#
Read one or all elements of an array property.
Category: Read
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Asset path |
-property= |
Yes | Array property name |
-index= |
No | Element index (0-based). Mutually exclusive with -all. |
-all |
No | Flag (presence-only): read all elements. Mutually exclusive with -index. |
Provide either -index=N or -all. If neither is given, defaults to reading
the first element.
Examples:
# Read a single element
-verb=array-get -asset=/Game/Abilities/GA_FireWeapon -property=ActivationRequiredTags -index=0
# Read all elements
-verb=array-get -asset=/Game/Abilities/GA_FireWeapon -property=ActivationRequiredTags -all
Output (single element):
{
"success": true,
"property": "ActivationRequiredTags",
"index": 0,
"value": "Ability.Weapon.CanFire"
}
Output (all elements):
{
"success": true,
"property": "ActivationRequiredTags",
"count": 3,
"elements": [
{ "index": 0, "value": "Ability.Weapon.CanFire" },
{ "index": 1, "value": "State.Alive" },
{ "index": 2, "value": "State.NotReloading" }
]
}
array-add#
Append an element to an array property.
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Asset path |
-property= |
Yes | Array property name |
-value= |
Yes | Element value as string |
Examples:
# Add a gameplay tag
-verb=array-add -asset=/Game/Abilities/GA_FireWeapon -property=ActivationRequiredTags -value="State.Aiming" -compile -save
# Add an asset reference
-verb=array-add -asset=/Game/Characters/BP_PlayerCharacter -property=DefaultAbilities -value="/Game/Abilities/GA_Sprint" -compile -save
array-remove#
Remove an element by index. Elements after the removed index shift down.
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Asset path |
-property= |
Yes | Array property name |
-index= |
Yes | Element index to remove (0-based) |
Examples:
-verb=array-remove -asset=/Game/Abilities/GA_FireWeapon -property=ActivationRequiredTags -index=2 -compile -save
Tip: Use array-get -all first to identify the correct index before
removing, especially when indices may have shifted from prior operations.
array-clear#
Clear all elements from an array property. Idempotent: succeeds even if the array is already empty.
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Asset path |
-property= |
Yes | Array property name |
Examples:
-verb=array-clear -asset=/Game/Abilities/GA_FireWeapon -property=ActivationBlockedTags -compile -save
array-set#
Set the value of an element at a specific index. The index must already exist
(use array-add to grow the array first).
Category: Write
Args:
| Arg | Required | Description |
|---|---|---|
-asset= |
Yes | Asset path |
-property= |
Yes | Array property name |
-index= |
Yes | Element index (0-based) |
-value= |
Yes | New value as string |
Examples:
# Replace a tag at index 1
-verb=array-set -asset=/Game/Abilities/GA_FireWeapon -property=ActivationRequiredTags -index=1 -value="State.Combat" -compile -save
Batch example: replace all elements in an array:
{
"defaultAsset": "/Game/Abilities/GA_FireWeapon",
"operations": [
{ "verb": "array-clear", "args": { "property": "ActivationRequiredTags" } },
{ "verb": "array-add", "args": { "property": "ActivationRequiredTags", "value": "Ability.Weapon.CanFire" } },
{ "verb": "array-add", "args": { "property": "ActivationRequiredTags", "value": "State.Alive" } },
{ "verb": "array-add", "args": { "property": "ActivationRequiredTags", "value": "State.Combat" } }
],
"compile": true,
"save": true
}