/** Static markdown documentation exposed as MCP resources */ export declare const EVENT_FORMAT_DOC = "# Valkyrie Event System\n\n## Overview\nEvents are the core quest logic mechanism. Each event is an INI section starting with \"Event\".\n\n## Fields\n| Field | Type | Description |\n|-------|------|-------------|\n| display | bool | Whether to show dialog (default: true) |\n| buttons | int | Number of buttons (1-6). **CRITICAL**: Valkyrie only parses event1..eventN where N=buttons. If buttons < highest eventN index, higher event references are silently dropped on re-save |\n| event1..6 | string | Space-separated event/spawn names triggered by each button. Only parsed up to the buttons count |\n| trigger | string | Auto-trigger condition: EventStart, Mythos, StartRound, EndRound, Eliminated, DefeatedMonster*, DefeatedCustomMonster* |\n| conditions | string | AND-only variable gating (format: \"var,comparator,value var2,comparator,value2\"). Unlike vartests, conditions are checked BEFORE the event displays \u2014 if false, the event is silently skipped |\n| highlight | bool | Camera focuses on the event's board position |\n| xposition | float | X position on board (for token placement) |\n| yposition | float | Y position on board |\n| operations | string | Space-separated variable operations (e.g., \"$end,=,1\") |\n| vartests | string | Space-separated variable tests (e.g., \"VarOperation:#round,>=,5\") |\n| add | string | Space-separated component names to show |\n| remove | string | Space-separated component names to hide |\n| audio | string | Audio clip name to play |\n| randomevents | bool | Randomly select from event list instead of showing all |\n| quota | int | Success threshold for skill tests |\n| buttoncolor1..6 | string | Skill test button color override (e.g., \"red\") |\n| mincam | bool | Set minimum camera position |\n| maxcam | bool | Set maximum camera position |\n\n## Variable Operations (the `operations` field)\nFormat: `variable,operator,value`\n- Operators: =, +, -, *, /\n- Special variables: $end (ends scenario), $mythosMinor, $mythosMajor, $mythosDeadly, #round, #heroes\n\n**IMPORTANT:** `operations` is for **variable assignment** only (e.g., `counter,+,1`). It is NOT for placing components on the board. Use the `add` field (space-separated component names) to show tiles, tokens, and spawns, and the `remove` field to hide them.\n\n## Variable Tests\nFormat: `VarOperation:variable,comparator,value`\n- Comparators: ==, !=, >, <, >=, <=\n- Logical operators: `VarTestsLogicalOperator:AND`, `VarTestsLogicalOperator:OR`\n\n## Common Patterns\n\n### Buttons vs Event References\nValkyrie only parses event1 through eventN where N = buttons. This means:\n- buttons=2 \u2192 only event1 and event2 are loaded\n- If event3 is set but buttons=2, event3 is **silently ignored and dropped on re-save**\n- Even display=false auto-advancing events need buttons=1 if they have event1\n- buttons=0 is only safe when there are NO eventN fields (e.g. a terminal remove-only event)\n\n### TokenInvestigators Removal\nCommunity quests always remove TokenInvestigators after setup so the start position marker doesn't stay interactable:\n```\nEventSetup: buttons=1, add=TokenInvestigators, event1=EventRemoveInv\nEventRemoveInv: display=false, buttons=0, remove=TokenInvestigators\n```\nNote: EventRemoveInv uses buttons=0 because it has no event1. EventSetup needs buttons=1 for its event1 to be parsed.\n\n## Triggers\n- **EventStart**: Fires when scenario begins\n- **Mythos**: Fires during mythos phase. **IMPORTANT**: Must have buttons>=1, otherwise Valkyrie auto-confirms and skips sub-events entirely\n- **StartRound**: Fires at start of each round\n- **EndRound**: Fires at end of each round\n- **Eliminated**: Fires when all investigators eliminated\n- **DefeatedMonster***: Fires when a specific monster type is defeated (e.g., DefeatedMonsterCultist)\n- **DefeatedCustomMonster***: Fires when a custom monster is defeated (e.g., DefeatedCustomMonsterBoss)\n\n## Button Labels\nSet via localization: `EventName.button1`, `EventName.button2`, etc.\nCommon patterns: `{qst:CONTINUE}`, `{qst:PASS}`, `{qst:FAIL}`\n"; export declare const LOCALIZATION_FORMAT_DOC = "# Valkyrie Localization Format\n\n## File Format\nCSV-like format with header line.\n\n```\n.,English\nkey,value\nkey,\"value with, commas\"\n```\n\n## Key Patterns\n| Pattern | Example | Description |\n|---------|---------|-------------|\n| quest.name | quest.name | Scenario display name |\n| quest.description | quest.description | Scenario description |\n| quest.authors | quest.authors | Author credits |\n| Component.text | EventStart.text | Main text for component |\n| Component.button1 | EventStart.button1 | Button label |\n| Component.uitext | UIBG.uitext | UI element text |\n| KEYWORD | CONTINUE | Reusable text referenced with {qst:KEYWORD} |\n\n## Substitution Tags\n| Tag | Description |\n|-----|-------------|\n| {qst:KEY} | Reference another localization key |\n| {ffg:KEY} | Reference game content localization |\n| {c:ComponentName} | Reference component display name |\n| {action} | Action icon |\n| {clue} | Clue icon |\n| {strength} | Strength skill icon |\n| {agility} | Agility skill icon |\n| {observation} | Observation skill icon |\n| {lore} | Lore skill icon |\n| {influence} | Influence skill icon |\n| {will} | Will skill icon |\n\n## Newlines\nUse \\n for newlines within values.\n"; export declare const PATTERN_REFERENCE_DOC = "# Valkyrie Scenario Pattern Reference\n\n## Standard Tile Placement Chain\nEvery tile reveal follows this sequence \u2014 each phase ALWAYS calls the next:\n```\nPlaceTile \u2192 PlaceDecoration \u2192 PlaceConnections \u2192 PlaceItems \u2192 PlacePeople \u2192 MoveOneSpace\n```\n- PlaceTile: add=TileX, display=false, buttons=1\n- PlaceDecoration: add walls/barriers\n- PlaceConnections: add explore tokens to adjacent areas\n- PlaceItems: add search/interact tokens\n- PlacePeople: add spawns/NPCs\n- MoveOneSpace: operations=moveOneSpace,=,1, buttons=0 (terminal)\n\n## Silent Event Rules\n- Silent events MUST have BOTH `display=false` AND `buttons=0` (when no eventN fields). `buttons=0` alone is not sufficient \u2014 Valkyrie still tries to render the event dialog without `display=false`.\n- If `event1` is set, MUST have `buttons>=1` (even with `display=false`)\n- `buttons=0` only safe when NO eventN fields exist\n- Example silent passthrough: `display=false, buttons=1, event1=EventNext`\n- Example silent terminal: `display=false, buttons=0, remove=TokenOld`\n\n## Mythos Initialization Formula\n```\ndeadlyRound = 20 - #heroes\nmajorRound = deadlyRound / 2\n```\nInitialize in EventStart chain. Use StartRound triggers with `>=` (not `==`) for round checks.\n\n## Event Loop Structure\n```\nInit (set counter=0) \u2192 Controller (vartest counter>=limit) \u2192 Body (increment, loop back) \u2192 Exit\n```\n- Controller event1 (test FAILS) \u2192 Body\n- Controller event2 (test PASSES) \u2192 Exit\n\n## Token Swap Pattern\nReplace tokens in a single silent event:\n```\ndisplay=false, buttons=1, remove=OldToken, add=NewToken, event1=NextEvent\n```\n\n## Variable Types Quick Reference\n| Prefix | Type | Examples |\n|--------|------|----------|\n| (none) | Quest variable | cluesFound, doorUnlocked |\n| $ | System variable | $end, $mythosMinor, $mythosMajor, $mythosDeadly |\n| # | Read-only | #round, #heroes, #heroName, #rand6, #BtT |\n| @ | Trigger | Set by game events |\n\n## Vartests Button Mapping\n- `event1` = test **FAILS** (condition not met)\n- `event2` = test **PASSES** (condition met)\n\n## conditions vs vartests\n| | conditions | vartests |\n|---|-----------|----------|\n| Timing | Before display | After display |\n| False | Silently skipped | Routes to event1 |\n| True | Proceeds | Routes to event2 |\n| Format | var,op,val (AND) | VarOperation:var,op,val |\n\n## UI Layering Order\nElements render in add order. Buttons MUST be added LAST to remain clickable.\nAlways use `vunits=True` for resolution independence.\n\n## Item Distribution Modes\n| Mode | Fields | Behavior |\n|------|--------|----------|\n| Random by trait | traits=weapon | Random item matching trait |\n| Specific item | itemname=ItemCommonKnife | Exact item |\n| Pool | itemname=Item1 Item2 Item3 | Random from list |\n| Trait with exclusion | traits=common, itemname=Excluded1 | Random trait, exclude listed |\n| Starting | starting=True | Given at scenario start |\n\n## Multi-Question Dialogue Structure\nN questions with pass/fail \u2192 2^N permutation events.\nFor 3 questions: Q1 \u2192 Q2(pass/fail) \u2192 Q3(PP/PF/FP/FF) \u2192 8 outcomes.\nAlternative: track successes with a variable, check threshold at end.\n\n## One-Shot Events\nUse `conditions=fired,==,0` to gate, `operations=fired,=,1` in the fire event.\n"; export declare const COMPONENT_FORMAT_DOC = "# Valkyrie Component Types\n\n## Tiles (tiles.ini)\nPrefix: `Tile`\n| Field | Required | Description |\n|-------|----------|-------------|\n| side | Yes | TileSide name from game content. **Must be a valid catalog ID** \u2014 invalid sides crash Valkyrie |\n| xposition | Yes | X board position |\n| yposition | Yes | Y board position |\n| rotation | No | 0, 90, 180, or 270 degrees |\n\n## Tokens (tokens.ini)\nPrefix: `Token`\n| Field | Required | Description |\n|-------|----------|-------------|\n| type | Yes | TokenSearch, TokenExplore, TokenInteract, TokenInvestigators, TokenWallOutside, TokenWallInside |\n| xposition | Yes | X position |\n| yposition | Yes | Y position |\n| buttons | No | Number of interaction buttons |\n| event1 | No | Event triggered on interaction |\n| conditions | No | AND-only variable gating \u2014 token hidden when false |\n| rotation | No | Rotation for wall tokens |\n\n### Token-Event Linking\nTo make a token interactive, set BOTH `buttons` and `event1`:\n```\n[TokenSearch1]\ntype=TokenSearch\nxposition=5\nyposition=10\nbuttons=1\nevent1=EventSearched\n```\n**Common mistake:** Setting `event1` without `buttons=1`. Valkyrie only reads event1..eventN up to the buttons count, so `event1` without `buttons>=1` is silently ignored.\n\n## Spawns (spawns.ini)\nPrefix: `Spawn`\n\n**IMPORTANT:** Spawns do NOT have position fields (`xposition`/`yposition`). They are placed on the board via an event's `add` field. They need `monster`, `buttons` (usually 1), and optionally `event1`.\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| monster | Yes | Monster type name(s), space-separated |\n| buttons | No | Button count |\n| event1 | No | Next event |\n| conditions | No | AND-only variable gating \u2014 spawn hidden when false |\n| add | No | Space-separated component names to show |\n| uniquehealth | No | Base health override |\n| uniquehealthhero | No | Per-hero health modifier |\n\n## Items (items.ini)\nPrefix: `QItem`\n| Field | Required | Description |\n|-------|----------|-------------|\n| itemname | No | Space-separated catalog item IDs (e.g., ItemCommonKnife, ItemCommonKeroseneLantern). Must use catalog IDs, not display names |\n| starting | No | True if given at start |\n| traits | No | Space-separated: weapon, lightsource, equipment, common, spell |\n| traitpool | No | Alternative trait matching |\n| inspect | No | Event reference triggered on item inspection |\n\n## Puzzles (other.ini)\nPrefix: `Puzzle`\n| Field | Required | Description |\n|-------|----------|-------------|\n| class | No | code, slide, image, tower (default: slide) |\n| skill | No | Skill test: {observation}, {agility}, etc. |\n| conditions | No | AND-only variable gating \u2014 puzzle hidden when false |\n| puzzlelevel | No | Puzzle difficulty level |\n| puzzlealtlevel | No | Alternative difficulty level |\n\n## UI Elements (ui.ini)\nPrefix: `UI`\n| Field | Required | Description |\n|-------|----------|-------------|\n| image | No | Image filename or library ref |\n| size | No | Display size multiplier |\n| vunits | No | Use vertical units |\n\n## Custom Monsters (spawns.ini or monsters.ini)\nPrefix: `CustomMonster`\n| Field | Required | Description |\n|-------|----------|-------------|\n| base | Yes | Base monster type from catalog |\n| health | No | Base health |\n| healthperhero | No | Per-hero health modifier |\n| traits | No | Monster traits |\n"; //# sourceMappingURL=format-docs.d.ts.map