What do you want?
NPCs should be able to see the actual display name of items — including tempering status like (Flawless), (Legendary), (Epic), and custom names set by the player.
Right now, if a player is wielding a Steel Greatsword (Flawless) and wearing Hide Boots (Flawless), the NPC just sees "Steel Greatsword" and "Hide Boots". The tempering is completely invisible to the AI.
Why?
This limits a lot of natural NPC behavior:
- Smiths can't comment on tempering quality ("That's a fine edge you've put on that blade")
- Guards can't notice valuable gear ("By the Nine, is that legendary armor?")
- Traders can't reference the actual item they just sold you
- The grindstone/workbench results are invisible — player tempers something and no NPC ever notices
- Followers don't understand gear upgrades. You give a follower a tempered weapon or improved armor, but they have no awareness of the upgrade. They can't thank you for the improved gear or acknowledge the difference from their old equipment
Enchanted item names DO work (e.g. "Imperial Sword of Long-Embers" shows up correctly). It's specifically tempering and custom names that get stripped.
What area does this affect?
Prompts / templates
How should it work?
Add a displayName field to each item returned by get_inventory(), get_worn_equipment(), and get_merchant_inventory(), populated via the game's GetDisplayName() instead of just GetName().
Currently the decorators only expose name (base item name). The template engine doesn't have a displayName field — rendering {{ item.displayName }} just outputs the raw expression unchanged.
Current output in LLM prompts:
### Worn Equipment
- **Feet**: Hide Boots
- **Forehead**: Leather Helmet
- **leftHand**: Steel Greatsword (drawn)
Expected output:
### Worn Equipment
- **Feet**: Hide Boots (Flawless)
- **Forehead**: Leather Helmet (Flawless)
- **leftHand**: Steel Greatsword (Flawless) (drawn)
Items without tempering or custom names would show the same name as today.
This also affects the event system. Looking at actual LLM prompts from openrouter_input.log, equip events only show base names:
- **Prisoner** equipped Steel Greatsword (just happened)
And worn equipment output:
### Worn Equipment
- **leftHand**: Steel Greatsword (drawn)
No tempering info anywhere in the prompt chain.
Scope
Small tweak (config option, UI adjustment, minor behavior change)
Alternatives or workarounds
Small tweak (add one field to existing decorator output, swap GetName to GetDisplayName)
Anything else?
I checked if there's any way to get this from the template side — there isn't. The field simply doesn't exist on the item object. The only alternative would be manually creating world knowledge entries for every tempered item, which isn't practical.
I also checked via another SKSE plugin which correctly returns both name and displayName fields from the same game data, confirming the engine absolutely has this information available.
What do you want?
NPCs should be able to see the actual display name of items — including tempering status like (Flawless), (Legendary), (Epic), and custom names set by the player.
Right now, if a player is wielding a Steel Greatsword (Flawless) and wearing Hide Boots (Flawless), the NPC just sees "Steel Greatsword" and "Hide Boots". The tempering is completely invisible to the AI.
Why?
This limits a lot of natural NPC behavior:
Enchanted item names DO work (e.g. "Imperial Sword of Long-Embers" shows up correctly). It's specifically tempering and custom names that get stripped.
What area does this affect?
Prompts / templates
How should it work?
Add a
displayNamefield to each item returned byget_inventory(),get_worn_equipment(), andget_merchant_inventory(), populated via the game'sGetDisplayName()instead of justGetName().Currently the decorators only expose
name(base item name). The template engine doesn't have adisplayNamefield — rendering{{ item.displayName }}just outputs the raw expression unchanged.Current output in LLM prompts:
Expected output:
Items without tempering or custom names would show the same name as today.
This also affects the event system. Looking at actual LLM prompts from
openrouter_input.log, equip events only show base names:And worn equipment output:
No tempering info anywhere in the prompt chain.
Scope
Small tweak (config option, UI adjustment, minor behavior change)
Alternatives or workarounds
Small tweak (add one field to existing decorator output, swap GetName to GetDisplayName)
Anything else?
I checked if there's any way to get this from the template side — there isn't. The field simply doesn't exist on the item object. The only alternative would be manually creating world knowledge entries for every tempered item, which isn't practical.
I also checked via another SKSE plugin which correctly returns both
nameanddisplayNamefields from the same game data, confirming the engine absolutely has this information available.