A visual .uasset editor and mod manager for Spellbreak Community Edition, built with Godot 4.
The editor targets Spellbreak's UE 4.22 asset layout and uses a fixed Spellbreak profile for packing, texture tools, tags, enums, and constants.
The main project is spellbreak_uasset_editor/, a Godot 4 desktop app with a
built-in mod manager, a full .uasset editor, and Spellbreak-specific profile data.
Repository-level scripts and CI run the regression suite.
Everything is bundled inside the single binary:
- UAssetAPI converter (pre-compiled .NET DLLs)
- u4pak for packing mods into
.pakfiles and extracting base-game sources - UE4-DDS-Tools + libtexconv for texture extraction/injection
- Python 3.10+ — required at runtime for mod packing, base-pak source generation, and texture operations
Windows: when installing Python, check "Add Python to PATH" on the first installer screen — it is unchecked by default.
- .NET Runtime — required for UAssetAPI (asset parsing)
- ImageMagick — required for texture export/import (DDS/TGA to PNG conversion)
Most Linux distros include it. On Windows, install from imagemagick.org and add to PATH.
Optional:
- umodel (UE Viewer) — required for 3D mesh and animation preview (StaticMesh / SkeletalMesh / AnimSequence assets). Download a prebuilt binary or build from source. Set the path in Settings > umodel (3D Preview).
- Godot 4.6+ — only if building the editor from source (no .NET support needed)
Go to the releases page, click on the latest version and download the file for your platform.
Release artifacts are packaged as linux.zip and win.zip.
git clone https://github.com/twdoor/spellbreak_modkit
cd spellbreak_modkitOpen spellbreak_uasset_editor/ in Godot 4.6+, then Project > Export > Linux/Windows. All dependencies (converter, u4pak, ue4_dds_tools) are bundled automatically.
Launch the app, click Settings, and fill in:
- Game directory — the folder used to locate the game executable and pak files. For Spellbreak, this install folder should contain
g3/Content/Paks/. - Mods directory — the parent folder that contains your mod folders. Each direct child is treated as one mod and should mirror the game structure, for example
Mods/MyMod/g3/Content/.... - Launch command — optional, used by the Launch button
- umodel path — optional, path to the umodel binary for 3D mesh and animation preview
- Sources — extracted asset directories for reference. Use Generate from Pak to select a game
.pak, choose an output folder, unpack it, and add the extracted folder as a source.
Settings are saved to config.json next to the executable.
The Mod Manager tab is pinned and always visible. It shows all mod folders found in your configured mods directory as a collapsible tree.
| Action | Result |
|---|---|
| Left-click a mod | Expand / collapse it |
| Right-click a mod | Toggle enabled / disabled |
Double-click a .uasset |
Open it in the asset editor |
| Double-click any other file | Open with the configured editor or system default app |
| Open button on text/config files | Open .txt, .cfg, .json, .ini, .md, and similar files externally |
Multi-select and clipboard:
Select files with Click, Ctrl+Click (toggle), or Shift+Click (range).
| Shortcut | Action |
|---|---|
Ctrl+E |
Import files from sources |
Ctrl+C |
Copy selected files |
Ctrl+X |
Cut selected files |
Ctrl+V |
Paste into target mod (preserves g3/Content/... folder structure) |
Del / Ctrl+D |
Delete selected files or mods |
Toolbar:
| Button | Action |
|---|---|
| New Mod | Create a new mod folder |
| Settings | Open the Settings tab |
| Pack | Pack all enabled mods into a Spellbreak patch pak |
| Watch | Toggle auto-pack on file save |
| Launch | Launch the game |
Sources are read-only reference folders used when importing files into a mod. They are expected to mirror the game's internal paths, for example:
SourceFolder/
└── g3/
└── Content/
└── ...
In Settings > Sources, Generate from Pak can build a source directly from a game package:
- Select the base game
.pak. - Select an output folder for extracted files.
- The modkit unpacks the pak and adds the output folder to the configured sources.
When importing from sources in the Mod Manager, selecting a folder or file inside a mod opens the matching path inside the chosen source if it exists. If it does not exist, the file dialog falls back to the source root.
Open .uasset or .json files via Ctrl+Space, drag-and-drop, or double-click from the mod list.
Keyboard shortcuts:
| Shortcut | Action |
|---|---|
Ctrl+Space |
Open file |
Ctrl+S |
Save |
Ctrl+Q |
Close tab |
Ctrl+C / V / X |
Copy / Paste / Cut |
Del / Ctrl+D |
Delete selected item |
Ctrl+Z |
Undo |
Ctrl+A / F |
Previous / Next tab |
Esc |
Clear selection / cancel edit |
What you can edit:
- Export properties — structs, arrays, scalars, enums, text, object references, SoftObject paths
- Array items — multi-select with Ctrl/Shift+click; copy/paste/delete supported
- Import table — all fields editable inline; multi-select supported
- Name map — add, edit, delete entries
- DataTable rows — view, edit, copy/paste/delete rows
- StringTable exports — namespace and all key/value entries
When opening a texture .uasset (Texture2D, TextureCube, etc.), the detail panel shows:
- Inline preview — the texture rendered at up to 512px wide with dimensions displayed
- Export as PNG — save the texture to a PNG file
- Import PNG — inject an edited PNG back into the
.uasset(automatically handles BC1/BC3/BC5/BC7 format matching)
Texture operations require Python and ImageMagick to be installed and in PATH.
When opening a SoundWave .uasset, the detail panel shows:
- Inline playback — play, pause, stop controls with a seek slider and time display
- Export as OGG — save the audio stream to an OGG Vorbis file
- Import OGG — inject a new OGG file back into the
.uasset(updates companion.uexp/.ubulkbinary data and FByteBulkData headers)
Audio extraction and injection are implemented in pure GDScript — no external tools required.
When opening a StaticMesh or SkeletalMesh .uasset, the detail panel shows:
- 3D preview — interactive viewport with orbit, middle-drag pan, scroll zoom, and a resizable preview area
- Auto-framing — camera automatically positions to fit the mesh on load
- Animation preview — on SkeletalMesh assets, auto-find likely AnimSequence
.uassetfiles or browse manually, then play, pause, loop, change speed, or scrub on the current mesh - Export as glTF — save the mesh to a glTF file
Mesh and animation preview require umodel to be installed and configured in Settings.
The editor uses a fixed JSON-backed Spellbreak profile. It tells the toolchain to target UE 4.22, use g3 as the content root, pack to g3/Content/Paks, and load Spellbreak enums, gameplay tags, and numeric constants.
The Spellbreak profile includes named constants for use in Int/Float property fields. Type an expression like sprint * 5 and it evaluates to the result. An autocomplete popup shows matching constants as you type.
UE4 loads .pak files alphabetically. Files with the _P suffix are treated as patch paks that override matching paths in the base pak.
This modkit creates zzz_mods_P.pak inside Spellbreak's g3/Content/Paks/ folder.
zzzprefix ensures it loads last (after all base paks)_Psuffix marks it as a patch override- A
.sigfile is copied from an existing game pak (UE4 requires a signature file) - The base game is never modified
Your mod files must mirror Spellbreak's internal folder structure:
mods/
└── my_mod/
└── g3/
└── Content/
└── Blueprints/
└── GameModes/
├── DA_BattleRoyale_Solo.uasset
└── DA_BattleRoyale_Solo.uexp
Always copy
.uassetand.uexptogether — they are a pair. If a.ubulkfile also exists, copy that too.
spellbreak-modkit/
├── README.md
├── LICENSE
├── scripts/test.sh Parser check and regression test entry point
├── .github/workflows/ci.yml GitHub Actions test workflow
└── spellbreak_uasset_editor/ Godot 4 app
├── main.gd / main.tscn Entry point, tab bar, status bar
├── app_theme.gd Centralized UI theme constants & helpers
├── property_row.gd Inline property editor widget
├── converter/ Bundled UAssetAPI DLLs (pre-compiled)
├── u4pak/ Bundled u4pak (pak packing tool)
├── ue4_dds_tools/ Bundled UE4-DDS-Tools + libtexconv
├── game_profiles/ Spellbreak profile data
│ └── spellbreak/ Profile, base enums, enums, tags, constants
├── uasset/ Asset parsing & serialization
│ ├── uasset_file.gd
│ ├── uasset_export.gd
│ ├── uasset_import.gd
│ ├── uasset_property.gd
│ ├── game_profile.gd Spellbreak profile loader
│ ├── ue4_enums.gd Legacy wrapper (delegates to profile)
│ └── spellbreak_tags.gd Legacy wrapper (delegates to profile)
├── scenes/
│ ├── process_utils.gd Cross-platform subprocess helpers
│ ├── asset_document.gd Asset ownership, save point, undo/redo history
│ ├── asset_edit_command.gd Reversible editor mutation
│ ├── asset_editor_context.gd Typed detail-view dependencies and actions
│ ├── background_job_runner.gd Application-owned preview jobs and shutdown
│ ├── uasset_tab.gd/tscn Per-file editor tab
│ ├── detail_panel_builder.gd
│ ├── tree_manager.gd
│ ├── selection_manager.gd
│ ├── clipboard_manager.gd
│ ├── texture_service.gd Texture extraction/injection service
│ ├── sound_service.gd Audio extraction/injection service
│ ├── mesh_service.gd 3D mesh/animation export via umodel
│ ├── mesh_preview_material_loader.gd
│ ├── md5_anim_loader.gd MD5Anim parser and Godot animation builder
│ ├── detail_items/ One class per detail-panel view
│ │ ├── detail_item.gd Base class with shared table helpers
│ │ ├── property_detail.gd
│ │ ├── export_detail.gd
│ │ ├── texture_detail.gd Texture preview & import/export
│ │ ├── sound_detail.gd Audio playback & import/export
│ │ ├── mesh_detail.gd 3D mesh, material, and animation preview
│ │ ├── exports_list_detail.gd
│ │ ├── import_detail.gd
│ │ ├── namemap_detail.gd
│ │ ├── datatable_row_detail.gd
│ │ └── stringtable_detail.gd
│ └── mod_manager/
│ ├── mod_manager_panel.gd
│ ├── mod_settings_tab.gd Settings UI
│ ├── base_source_service.gd
│ ├── config_manager.gd
│ ├── mod_state_manager.gd
│ ├── mod_discovery.gd
│ ├── file_watcher.gd
│ ├── file_utils.gd
│ └── packing_service.gd
├── guide/ GUIDE action resources (remappable keybinds)
├── tests/test_core.gd Core regression tests
└── addons/ GUIDE input framework
Run the parser check and regression suite with Godot 4.6.3+:
./scripts/test.shThe suite covers package-index remapping, undo restoration, transactional file replacement, subprocess argument handling, and pak creation/failure recovery.
- UAssetAPI by atenfyr — UE4 asset serialization (bundled)
- u4pak by panzi — UE4 pak archive tool (bundled)
- UE4-DDS-Tools by matyalatte — UE4 texture extraction/injection (bundled)
- Texconv-Custom-DLL by matyalatte — Cross-platform texture format converter (bundled as libtexconv)
- umodel / UE Viewer by Gildor — UE4 mesh viewer/exporter (optional, user-installed)
- G.U.I.D.E by Jan Thomä — Input mapping framework (bundled)