From valkyrie-mom
Item distribution patterns for Valkyrie MoM. Use when giving random items, unique items, starting items, or creating item inspection events.
How this skill is triggered — by the user, by Claude, or both
Slash command
/valkyrie-mom:items-and-distributionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Patterns for distributing items to investigators in Mansions of Madness scenarios.
Patterns for distributing items to investigators in Mansions of Madness scenarios.
Give a random item matching a trait category. Leave itemname empty and set traits:
upsert_item("QItemSearchWeapon", {
traits: "weapon"
})
upsert_item("QItemSearchLight", {
traits: "lightsource"
})
upsert_item("QItemSearchCommon", {
traits: "common"
})
Available traits: weapon, lightsource, equipment, common, spell
The game randomly selects an item matching the trait from its internal pool.
Give a specific named item. Set itemname and leave traits empty:
upsert_item("QItemPuzzleBox", {
itemname: "ItemCommonPuzzleBox"
})
upsert_item("QItemKnife", {
itemname: "ItemCommonKnife"
})
Use search_game_content with type "Item" to find valid item catalog IDs.
Specify multiple items — the game picks one at random:
upsert_item("QItemRandomWeapon", {
itemname: "ItemCommonKnife ItemCommonAxe ItemCommonPipe"
})
Combine itemname and traits. The itemname acts as an exclusion list — the game picks a random item matching the trait that is NOT in the itemname list:
# Give a random common item, but never the knife or lantern
upsert_item("QItemMysteryCommon", {
traits: "common",
itemname: "ItemCommonKnife ItemCommonKeroseneLantern"
})
Items given to investigators at the beginning of the scenario. Set starting=True:
# Each investigator gets a random weapon
upsert_item("QItemStartWeapon", {
starting: "True",
traits: "weapon"
})
# Each investigator gets a light source
upsert_item("QItemStartLight", {
starting: "True",
traits: "lightsource"
})
# A specific starting item for the scenario
upsert_item("QItemStartLetter", {
starting: "True",
itemname: "ItemCommonOldJournal"
})
Give a random starting item from a trait pool, excluding specific items:
upsert_item("QItemStartEquip", {
starting: "True",
traits: "equipment",
itemname: "ItemCommonBarricade ItemCommonAlarmClock"
})
Attach an event to an item that fires when the investigator inspects it. Use the inspect field:
upsert_item("QItemMysteriousLetter", {
itemname: "ItemCommonOldJournal",
inspect: "EventReadLetter"
})
upsert_event("EventReadLetter", {
buttons: "1",
event1: "EventLetterRead"
})
set_localization({
"EventReadLetter.text": "<i>The faded handwriting reads:\\n\\n\"They must not find the key. I have hidden it where only the moonlight touches.\"</i>",
"EventReadLetter.button1": "{qst:CONTINUE}"
})
Inspection events are great for:
Use the add field on an event to give an item to the active investigator:
upsert_event("EventFindKey", {
buttons: "1",
add: "QItemGoldenKey",
event1: "EventKeyFound"
})
Use the remove field to take an item away:
upsert_event("EventUseKey", {
display: "false",
buttons: "1",
remove: "QItemGoldenKey",
add: "TokenUnlockedDoor",
event1: "EventDoorUnlocked"
})
Check if a player has found an item by using a tracking variable:
# When finding the key, set a flag
upsert_event("EventFindKey", {
buttons: "1",
operations: "hasKey,=,1",
add: "QItemGoldenKey",
event1: "EventKeyNarrative"
})
# Later, check the flag
upsert_event("EventTryDoor", {
display: "false",
buttons: "2",
vartests: "VarOperation:hasKey,>=,1",
event1: "EventDoorLocked", # no key
event2: "EventDoorUnlock" # has key
})
itemname) for story-critical gear; use traits for general lootnpx claudepluginhub thijs-hakkenberg/valkyriemcp --plugin valkyrie-momAudits treasure and magic item placement across campaign modules and character inventories to flag wealth imbalances, rarity mismatches, and loot gaps.
Provides patterns for branching game narratives: quest/event trees, dialogue systems, world-building layers, and lore bibles with YAML + Mermaid.