Hunter Pride
Hunter Pride is Acheron’s menu for interacting with defeated actors.
This page documents the behavior implemented in HunterPride.cpp and the Papyrus bridge in Functions.cpp.
Built-In Options
rescue: revive the defeated targetplunder: open inventory/loot flow (treated as assault)execute: kill a defeated targetvampire: feed option for vampires on valid targets (this action is treated as murder)
Built-in option IDs are fixed:
rescue->0plunder->1execute->2vampire->3
Adding Custom Options
Papyrus signature:
int Acheron.AddOption(string id, string name, string iconPath, string conditionJson)
Example:
int id = Acheron.AddOption(
"MyOption",
"$HP_CustomOption_Name",
"Interface\\Acheron\\CustomIcon.dds",
"{\"target\":{\"has\":{\"keywords\":[\"0xA82BB|Skyrim.esm\"]}}}"
)
Arguments:
optionId: unique string keyname: label shown in UI (localization key allowed)icon: icon path used by menuconditions: JSON condition string (optional)
Return value:
>= 0: success-1: rejected (invalid/duplicate option)
JSON Conditions
The bridge lowercases the entire JSON string before parsing. Use lowercase keys and values.
Top-level branches:
playertarget
Supported structure per branch:
{
"has": {
"keywords": [],
"factions": []
},
"not": {
"keywords": [],
"factions": []
},
"is": ["essential", "nonessential", "hostile", "nonhostile"]
}
Full example:
{
"player": {
"has": {
"keywords": ["0xA82BB|Skyrim.esm"]
}
},
"target": {
"not": {
"keywords": ["0x13796|Skyrim.esm"]
},
"is": ["nonessential"]
}
}
Form strings support both:
0xFORMID|Plugin.esp- raw numeric ID (hex with
0xor decimal)
Icon Paths
Supported file types are whichever the Scaleform UI consumes via the icon source string; defaults include .swf and custom options commonly use .dds/.png.
SWF frame syntax is supported:
AcheronIcons.swf{Health}
AcheronIcons.swf{2}
Handling Option Selection
When a custom option is selected, you receive an event through Papyrus. Register for the event and check the option ID:
Event OnInit()
Acheron.RegisterForHunterPrideSelect(self)
EndEvent
Event OnHunterPrideSelect(int aiOptionID, Actor akTarget)
If aiOptionID == Acheron.GetOptionID("MyOption")
Debug.Trace("My option selected")
EndIf
EndEvent
For aliases and magic effects, use:
RegisterForHunterPrideSelect_Alias(...)RegisterForHunterPrideSelect_MgEff(...)
Event arguments:
aiOptionID: selected option IDakTarget: interacted defeated actor
Option Management
bool exists = Acheron.HasOption("MyOptionID")
int optionID = Acheron.GetOptionID("MyOptionID")
bool removed = Acheron.RemoveOption("MyOptionID")
Notes
- Option IDs are unique.
- Custom option IDs start at
4. - Invalid condition/form parsing rejects option registration.
- The condition string is lowercased before parse.
Last Updated
May 2026