Skip to content

From an FModel export to your first mod

This learning path uses real patterns from the author's Increased Storage - 3, Bigger Inventory and ResourcesAndLoot mods. It targets the 0.8.0.2 release, which includes the earlier 0.8.0.1b source fixes. Check the download page for the current package.

You will learn to identify the object that owns a value, discard export-only wrappers, keep only your changes, and place the result in the correct loader. You do not need to recook an existing compatible asset merely to patch a reflected value. New meshes, classes or Blueprint logic still need cooked content.

1. Choose one measurable change

Start with one of these lessons:

Goal Walkthrough Loader
Increase a chest's slots Bigger chests blueprints
Add a creature drop without deleting its other drops Creature loot raw
Change a cooked item's stack size Patch an existing item assets
Make a separate resource-item variant Item clones assets
Change selected inventory pages Bigger inventory blueprints
Understand replacement, append and selection Patch operators Depends on target

Use a disposable world and character, especially for capacity or save-bearing changes. Do not begin by editing every export in a folder.

2. Inspect the current installed game

  1. Open the archives for the Dragonwilds build you are actually testing. Check the current Game Pass layout separately when working from an older Steam export.
  2. Configure FModel's engine/versioning and matching mapping as required for that build. RuneSchema's mapping status is described in mappings and writable paths. A stale mapping can make an export misleading.
  3. Find the package, open its properties, and follow references to the object or table that actually owns the field. A building piece, its actor, and the actor's inventory component are different objects.
  4. Save the Properties (.json) output somewhere outside your mod's loader folders. Keep the untouched original as a comparison file.
  5. Record the package/object path, class, component or row, field name, value type, game build and platform in your own notes.

FModel's getting-started guide describes the property view. Its release notes distinguish JSON property exports from raw package/model/world exports; exact menu placement varies by FModel version. Exporting a mesh or raw .uasset is not the same operation as saving properties as JSON.

3. Read the export before changing it

Here is a reconstructed, trimmed FModel-shaped teaching input. The owner/component/field names are backed by Increased Storage - 3; the starting values are illustrative. It is not represented as a verbatim export of your current game. Real files commonly have more exports, flags and references.

Reference input — do not install
// Reconstructed, shortened export envelope for teaching, NOT a verbatim export.
// Owner/component/field names come from Increased Storage - 3.
// 24 and false are illustrative before-values; inspect your current game.
[
  {
    "Type": "BP_Components_WorldItemInventory_C",
    "Name": "BP_Components_WorldItemInventory",
    "Outer": "Default__BP_BaseBuilding_Chest_Small_C",
    "Properties": {
      "MaxSlotCount": 24,
      "bSupportsSortAndFillStacks": false
    }
  }
]
Part What it tells you What the mod needs
Outer [...] The package export is a list of records. Not automatically the loader's required envelope.
Type Which class describes this exported record. Research information, not a field to paste onto the target.
Name The record/component's name. The component key when following it under its owning Blueprint.
Outer A clue to the owning object/default. Identify the owning Blueprint class; do not paste Default__ as a new property.
Properties Exported property values. Extract only the reflected fields your mod intends to change.
MaxSlotCount The capacity field on this component. A JSON number, at the component level.
bSupportsSortAndFillStacks A separate Boolean behavior flag. true/false, not the strings "true"/"false".

Do not delete Properties blindly from every export. First work out who owns it. If you flatten a component's fields into the actor, the fields are on the wrong object even though the JSON parses.

4. Turn the relevant fields into a loader document

The installed storage mod expresses the change like this:

BiggerChests/blueprints/10-ash-chest.jsonc
1
2
3
4
5
6
7
8
{
  "BP_BaseBuilding_Chest_Small_C": {
    "BP_Components_WorldItemInventory": {
      "MaxSlotCount": 56,
      "bSupportsSortAndFillStacks": true
    }
  }
}

The class is the outer key, the inventory component is the next key, and only the two desired values remain. There is no export Type, Outer, Properties or copied full component list. The chest lesson explains every line and the other chest sizes.

5. Recognize the three common export shapes

Export evidence Loader document shape Do not confuse it with
Blueprint/component defaults class → component → changed fields in blueprints A new Blueprint class or cooked actor.
DataTable with Rows table → row → changed fields, or explicit table:row patch in raw An ItemData object.
Existing ItemData object path → changed fields or an explicit asset patch in assets A DataTable row just because the file exports as JSON.

The loot lesson walks a table export into $Append. The item lesson walks an item export into a focused patch. Cloning is a separate operation with a new save identity.

6. Translate references deliberately

These are different things:

Example Meaning
.../ITEM_Resources_Wood_Ash.uasset Package filename, not the preferred runtime object reference.
/Game/.../ITEM_Resources_Wood_Ash.ITEM_Resources_Wood_Ash Complete object path used in the tutorials.
/Game/.../ITEM_Resources_Abyssal_Ashes.0 plus ObjectName FModel export-index reference; the name identifies the actual export.
.../BP_Name.BP_Name_C Blueprint-generated class. The _C is significant when a class is required.
AbyssalDemon A row name inside a particular table, not a package.
PersistenceID Saved identity, not a filename or display name.

RuneSchema accepts several exported reference forms, including supported ObjectName/ObjectPath and AssetPathName wrappers. In hand-written reference fields, use the inspected complete object-path string where supported. Do not blindly replace every .0: a package may contain multiple exports or subobjects. The numeric suffix alone does not tell you the object name.

/Game/Mods, /PluginMount, a Windows path and the RuneSchema mod-folder name are not interchangeable. A loose mod folder does not rename an existing asset's Unreal mount root.

7. Install one lesson, not the export directory

RuneSchema/
  mods/
    runeschema.txt
    BiggerChests/
      blueprints/
        10-ash-chest.jsonc

Add BiggerChests : 1 to mods/runeschema.txt. UE4SS's separate Mods/mods.txt must already have RuneSchema : 1. Restart Dragonwilds completely. Numbered filenames organize files inside a loader; they do not establish one global execution order across assets, raw, recipes and every other loader.

Open Helpy → Diagnostics, inspect the RuneSchema log and search the mod, target and rejection reason. A parse success is not proof of a reflected field write, and a field write is not proof that the game consumes it as intended.

8. Prove the result and keep the smallest diff

Compare before/after behavior, newly created and existing objects, save/reload, menu re-entry and a complete restart. Keep unrelated fields unchanged and test the server/client combinations you plan to support. Use the release checklist before sharing.

Download the teaching inputs and finished example folders. They contain no PAKs or user saves. Keep original game exports for research; distribute the focused authored change, not a whole game dump.