Team Cereustooling wiki

Place an object with the Object Palette

Checkedagainst the code on 2026-11-12 11:36

The Object Palette is a Map Editor window with a searchable grid of 3D model previews. You place a new asset, enemy or map piece by dragging a preview onto the viewport. Checked against the code; nothing on this page was run in game.

To place an Elden Ring asset, see place-er-asset.md.

Before you start

  • A project is open and a map is loaded (Map List). Without a loaded map the palette shows "Load a map (Map List) to place objects in it."
  • 3D previews need the Vulkan renderer. Without it the palette shows names only.

Steps

  1. Open the palette: View > Object Palette in the Map Editor. It is on by default and docks with the other Map Editor windows. Its title is Object Palette.

  2. Pick the target map in the Map picker at the top.

  3. Pick a tab:

    Tab What it lists
    Used in Map The models the target map's parts already use, most used first, with an xN use count.
    Assets Every asset (AEG) in the game data, mod folders and project.
    Characters Every character.
    Map Pieces The map pieces of the target map.
    Recent Models placed this session (the last 40).
  4. Narrow the list (all optional, they combine):

    • Search box. Words match the model id, its name, its tags, and for assets the ids and names of the maps it is used in (for example crate, aeg003, small camp, m43_01). Every word must match. Map search needs an index that is built in the background on the first search. While it builds the count line says "(indexing maps, so map names will match soon)".
    • Place picker (the Place: anywhere combo). Pick This map, one place, or click a kind of place (for example a group of Small Camps) to take all of them. The list then shows only what that place uses, most used first, with counts. The picker has its own search box. Clear removes the place. The picker is shown on every tab except Map Pieces. Picking a place on Used in Map or Recent switches to the Assets tab. Places are grouped by the part of the map's name before " - ". Maps without a name are under "Unnamed maps".
    • Category chips (not on Characters or Map Pieces): All, Lights & Fire, Containers, Plants, Structures, Rocks & Terrain, Props, Effects, Unsorted. Each chip shows a count. Categories are guessed from words in the name and tags. An unnamed asset takes the category most of its named siblings in the same family (AEG004_*) share.
    • Named only hides models that have no name.
  5. Set the options row if you need to:

    • Place: view centre / placement orb / beside selection decides where Place and double-click put the object. Dragging always places under the mouse.
    • Rotation: template / zero / random yaw.
    • Align to slope tilts the placed object to the ground under it and keeps its facing.
    • Clear IDs (on by default) clears the entity ID and entity group IDs copied from the template part.
    • Size slider sets the preview size.
  6. Place the model in one of three ways:

    • Drag a preview onto the viewport and release.
    • Double-click a preview.
    • Select it and press Place in the detail bar, or right-click it and choose Place.

The right-click menu and the detail bar also have Replace selected (gives the selected parts this model and renames them; events, regions and parts that named the old part follow the rename), Select uses, Edit community name... and, in the menu only, Copy model name.

How the position is picked

  • Dragging: a ray from the mouse is cast against the loaded maps' surfaces (asset and map piece triangles and the hit collision). The object lands on the first hit.
  • If the ray hits nothing, the ground height is estimated from nearby parts: enemies and players within 20 m (weighted by closeness), else the median height of the five nearest assets.
  • If that also fails, the placement orb position is dropped onto the ground below it.
  • View centre does the same with a ray through the middle of the viewport. Placement orb uses the orb in front of the camera. Beside selection places 2 units along X from the selected object, at its height.

How the new part is built

  • The new part is a clone of a part already in the target map: the nearest part with the same model, else the nearest part of the same class (Asset, Enemy or MapPiece). This keeps valid draw groups and flags.
  • It gets the new model, a free name <model>_<number> and a matching InstanceID.
  • With rotation set to template, a clone from a different model keeps only the template's yaw.
  • If the map has no part of that class, a fresh part is made and the log says "check its draw groups".
  • One placement is two undo steps: the clone, then its setup.

Enemies get their own AI and stats

When an enemy is placed from, or replaced over, a different character, the palette sets:

  • NpcParamId to the new character's row c*10000 + 10, else its first NpcParam row.
  • NpcThinkParamId to row c*10000, else its first NpcThinkParam row.
  • PatrolRouteName to empty.

If the character has no rows in c*10000 to c*10000 + 9999, nothing is changed and the log says to set them by hand. The Characters tab tooltip still says to set NPCParamID/ThinkParamID afterwards. That text is older than this behaviour.

Previews

  • Previews are rendered one model at a time and kept in <project>/.smithbox/Preview Cache/*.prev, so a page you browsed before shows at once.
  • A model edited in the project is rendered again by itself.
  • After changing materials or textures, open the game picker (the Game: ... combo, Nightreign projects only) and choose Re-render all previews.

Edit a community name

  1. Right-click a model (or use the detail bar) and choose Edit community name....
  2. Type the name and press Save (or Enter). An empty name goes back to Smithbox's own name.

The name is saved to the project's alias file, <project>/.smithbox/Assets/Aliases/<type>.json (Assets, Characters or MapPieces). Only the project's own changes are kept in that file. The palette and the Asset Browser pick the new name up at once. A Nightreign asset with no Nightreign name shows the Elden Ring name of the same id, marked "(Elden Ring name)", until you save one.

How to tell it worked

  • The new part is selected and shown in the map tree.
  • The log says Placed <name> in <map> (cloned from <template>).
  • The model appears on the Recent tab.
  • For an enemy with a new model the log says <model>: NpcParam <id>, NpcThinkParam <id>.

Nothing reaches disk until you save the map.

What goes wrong

  • "No models match." Clear the search, the place, the category chip and Named only.
  • Map names do not match in the search. The map index is still building. Wait for the note to go away.
  • The object lands at the wrong height. No surface was under the mouse, so the height was estimated. Select it and press End (see move-rotate-snap.md).
  • An enemy keeps the old AI. The character has no NpcParam or NpcThinkParam rows of its own. Check the log.

Through the MCP bridge

place_model places a part with the same logic. palette_search opens the palette on a tab with a search, place and category. set_community_name edits a name. model_maps and preview_status report the map index and the preview cache. See mcp-bridge.md.

Source files this page documents (7)
  • smithbox:src/Smithbox.Program/Editors/Map Editor/Tools/Object Palette/ObjectPaletteTool.cs
  • smithbox:src/Smithbox.Program/Editors/Map Editor/Tools/Object Palette/PaletteGrouping.cs
  • smithbox:src/Smithbox.Program/Editors/Map Editor/Tools/Object Palette/ModelMapIndex.cs
  • smithbox:src/Smithbox.Program/Editors/Map Editor/Tools/Object Palette/EnemyParamDefaults.cs
  • smithbox:src/Smithbox.Program/Editors/Common/Utils/CommunityNames.cs
  • smithbox:src/Smithbox.Program/Renderer/Model Preview/ModelPreviewCache.cs
  • smithbox:src/Smithbox.Program/Editors/Map Editor/Tools/Surface Snap/SurfaceSnap.cs

Changed one of these? Update this page: smithbox/place-an-object.md (how).