In a Nightreign project the Object Palette can show the assets of an Elden Ring install. Placing one copies it into the project so Nightreign can load it.
Status: the editor steps and file names below were read against the code. Whether the copied assets work in game is unproven, see the last section.
Before you start
- A Nightreign project with a map loaded. The game picker is only shown for Nightreign projects.
- An Elden Ring install. Smithbox finds it through Steam (app 1245620,
Game\eldenring.exe). You can also set the folder by hand (step 2). A folder counts as an install when it hasData0.bhdor anasset\aegfolder. - The basics of the palette: place-an-object.md.
Steps
- Open View > Object Palette.
- Open the game picker, the
Game: Nightreigncombo next to the Map picker.- If Elden Ring (copied in when placed) is greyed out, no install was found. Type the path of the Elden Ring
Gamefolder in the field below it and press Enter. An empty field means "found through Steam". The path is kept in the settingObjectPalette_ER_Game_Path.
- If Elden Ring (copied in when placed) is greyed out, no install was found. Type the path of the Elden Ring
- Choose Elden Ring (copied in when placed). The palette shows "Opening Elden Ring..." while the archives open. The palette now has two tabs, Assets and Characters.
- Find the asset. Search, the place picker and the category chips work as for Nightreign. Map search and places use Elden Ring's own maps.
- Place it: drag it onto the viewport, double-click it, or use Place.
- Save the map.
To go back, choose Nightreign (the project) in the game picker.
What is copied at placement
The install is opened read-only, archives first and loose files second, apart from the project's own file system. Nothing is written outside the project folder. At placement the importer writes into the project:
| What | Path in the project |
|---|---|
| The model binder | asset/aeg/aegXXX/aegXXX_YYY.geombnd.dcx |
| Its collision binders, where Elden Ring has them | asset/aeg/aegXXX/aegXXX_YYY_l.geomhkxbnd.dcx and _h |
| The AET texture packs its materials use that the project lacks | asset/aet/aetXXX/aetXXX_YYY.tpf.dcx |
| The MATBINs it uses that the project lacks or has in another version | added to the project's material/allmaterial.matbinbnd.dcx |
Files are written with the compression Nightreign uses. Files that need no change are copied as they are.
No AssetEnvironmentGeometryParam row is added.
A placed copy takes the Elden Ring asset's name as a project alias when the project's game does not already name that model.
Id collisions
- The id is free in the game, mod folders and project: the id is kept.
- Nightreign has the same model under that id: nothing is copied and Nightreign's own is used. "The same model" is judged on bounds, mesh, material and node counts, material names and textures, and per-mesh triangle count and area, because Nightreign re-exported its copies.
- Nightreign has another model under that id: the copy gets the highest free id of the same family, counting
down from
_999(AEG700_043becomesAEG700_999). Binder entries are renamed. - An AET pack exists in the project with other pixels under the same names: the pack gets a free AET id the same way. The model's texture paths point at the new id.
- A MATBIN exists in the project with other content, or now points at a renamed pack: it is added under
<name>_er(_er2, ... if needed) and the model's materials point at it.
Placing the same Elden Ring asset again reuses its copy and writes nothing new. If a copy was deleted from the project it is made again under the same id.
Mapping files in <project>/.smithbox/
| File | What it holds |
|---|---|
er_asset_imports.json |
Elden Ring asset id to project asset id, AET id to copied AET id, MATBIN name to copied name. |
er_asset_names.json |
The project's own names for Elden Ring assets (set with Edit community name... in Elden Ring mode). |
Model Map Index er.json |
Which Elden Ring maps use which assets, for map search and the place picker. |
Preview Cache/ |
Rendered previews. |
Elden Ring characters tab
- The Characters tab lists the install's characters with previews.
- A character Nightreign also has under the same id is tagged "in nightreign". Placing it places Nightreign's own character, with its own AI and stats.
- A character Nightreign does not have is tagged "needs a port". It can be browsed but not placed: Place and Replace selected are greyed out. It needs a full port (model, animations, behaviour, AI and params) first.
How to tell it worked
- The log says
Copied Elden Ring's AEGXXX_YYY into the project(withas AEGXXX_999when the id was taken), followed by the files written and a line for each texture pack copied. - The asset's tooltip changes from "copied into the project when placed" to "in the project" or "in the project as AEGXXX_999".
- The detail bar says "Elden Ring asset: Nightreign has the same model" when nothing needed copying.
What goes wrong
- "Not an Elden Ring Game folder (no Data0.bhd)." The path in the picker is wrong.
- The log says a texture pack or material "is in neither game". The model draws without it.
- "The project has no material/allmaterial.matbinbnd.dcx". The importer needs that file in the project's file list to add MATBINs. This case was not tested here.
- Elden Ring DLC assets have no community names. They show by id only until you name them.
- Previews look grey for a while. Elden Ring assets wait longer for their shared texture packs.
Unproven in game
None of this has been tested in Nightreign itself, per the build notes of this feature:
- Elden Ring collision (hkx) inside Nightreign.
- Elden Ring MATBINs and shaders inside Nightreign. Materials with shaders no project material uses are logged.
- Assets without an
AssetEnvironmentGeometryParamrow.
Also known: the project's allmaterial.matbinbnd.dcx becomes a full copy of the top layer's file (mod folder or
game). It goes stale if that layer's file changes later.
Through the MCP bridge
place_model with game="er" copies and places an Elden Ring asset. palette_search with game="er" switches the
palette. er_assets lists the install's assets and the copies made so far, and with inspect=<id> an asset's
materials. set_community_name with game="er" names an Elden Ring asset. See mcp-bridge.md.
For whole maps, see port-er-map.md.