@thijshakkenberg/valkyrie-mom-mcp 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +2 -2
- package/.mcp.json +1 -1
- package/README.md +25 -12
- package/agents/scenario-designer.md +5 -3
- package/dist/catalogs/catalog-store.js +2 -2
- package/dist/catalogs/catalog-store.js.map +1 -1
- package/dist/catalogs/data/tile-geometry.d.ts +17 -6
- package/dist/catalogs/data/tile-geometry.d.ts.map +1 -1
- package/dist/catalogs/data/tile-geometry.js +183 -180
- package/dist/catalogs/data/tile-geometry.js.map +1 -1
- package/dist/io/image.d.ts +15 -0
- package/dist/io/image.d.ts.map +1 -0
- package/dist/io/image.js +179 -0
- package/dist/io/image.js.map +1 -0
- package/dist/io/localization-io.d.ts +9 -5
- package/dist/io/localization-io.d.ts.map +1 -1
- package/dist/io/localization-io.js +60 -21
- package/dist/io/localization-io.js.map +1 -1
- package/dist/io/package-builder.d.ts.map +1 -1
- package/dist/io/package-builder.js +7 -3
- package/dist/io/package-builder.js.map +1 -1
- package/dist/map/layout.d.ts +91 -0
- package/dist/map/layout.d.ts.map +1 -0
- package/dist/map/layout.js +253 -0
- package/dist/map/layout.js.map +1 -0
- package/dist/map/render.d.ts +15 -0
- package/dist/map/render.d.ts.map +1 -0
- package/dist/map/render.js +191 -0
- package/dist/map/render.js.map +1 -0
- package/dist/model/component-types.d.ts +18 -1
- package/dist/model/component-types.d.ts.map +1 -1
- package/dist/model/component-types.js +30 -1
- package/dist/model/component-types.js.map +1 -1
- package/dist/model/field-schema.d.ts +20 -0
- package/dist/model/field-schema.d.ts.map +1 -0
- package/dist/model/field-schema.js +61 -0
- package/dist/model/field-schema.js.map +1 -0
- package/dist/model/format-features.d.ts +20 -0
- package/dist/model/format-features.d.ts.map +1 -0
- package/dist/model/format-features.js +46 -0
- package/dist/model/format-features.js.map +1 -0
- package/dist/model/scenario-model.d.ts.map +1 -1
- package/dist/model/scenario-model.js +15 -0
- package/dist/model/scenario-model.js.map +1 -1
- package/dist/resources/format-docs.d.ts +3 -3
- package/dist/resources/format-docs.d.ts.map +1 -1
- package/dist/resources/format-docs.js +87 -32
- package/dist/resources/format-docs.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +78 -17
- package/dist/server.js.map +1 -1
- package/dist/tools/lifecycle.d.ts +16 -0
- package/dist/tools/lifecycle.d.ts.map +1 -1
- package/dist/tools/lifecycle.js +27 -0
- package/dist/tools/lifecycle.js.map +1 -1
- package/dist/tools/map.d.ts +11 -7
- package/dist/tools/map.d.ts.map +1 -1
- package/dist/tools/map.js +92 -52
- package/dist/tools/map.js.map +1 -1
- package/dist/tools/upsert.d.ts +3 -0
- package/dist/tools/upsert.d.ts.map +1 -1
- package/dist/tools/upsert.js +90 -21
- package/dist/tools/upsert.js.map +1 -1
- package/dist/validation/rules/catalog-references.d.ts +1 -0
- package/dist/validation/rules/catalog-references.d.ts.map +1 -1
- package/dist/validation/rules/catalog-references.js +17 -0
- package/dist/validation/rules/catalog-references.js.map +1 -1
- package/dist/validation/rules/cross-references.d.ts +1 -0
- package/dist/validation/rules/cross-references.d.ts.map +1 -1
- package/dist/validation/rules/cross-references.js +32 -1
- package/dist/validation/rules/cross-references.js.map +1 -1
- package/dist/validation/rules/custom-images.d.ts +10 -0
- package/dist/validation/rules/custom-images.d.ts.map +1 -0
- package/dist/validation/rules/custom-images.js +46 -0
- package/dist/validation/rules/custom-images.js.map +1 -0
- package/dist/validation/rules/event-flow.d.ts +5 -7
- package/dist/validation/rules/event-flow.d.ts.map +1 -1
- package/dist/validation/rules/event-flow.js +49 -70
- package/dist/validation/rules/event-flow.js.map +1 -1
- package/dist/validation/rules/event-graph.d.ts.map +1 -1
- package/dist/validation/rules/event-graph.js +4 -1
- package/dist/validation/rules/event-graph.js.map +1 -1
- package/dist/validation/rules/event-semantics.d.ts +18 -0
- package/dist/validation/rules/event-semantics.d.ts.map +1 -0
- package/dist/validation/rules/event-semantics.js +72 -0
- package/dist/validation/rules/event-semantics.js.map +1 -0
- package/dist/validation/rules/field-schema.d.ts +10 -0
- package/dist/validation/rules/field-schema.d.ts.map +1 -0
- package/dist/validation/rules/field-schema.js +47 -0
- package/dist/validation/rules/field-schema.js.map +1 -0
- package/dist/validation/rules/format-rules.d.ts +2 -1
- package/dist/validation/rules/format-rules.d.ts.map +1 -1
- package/dist/validation/rules/format-rules.js +17 -3
- package/dist/validation/rules/format-rules.js.map +1 -1
- package/dist/validation/rules/game-flow.d.ts +29 -0
- package/dist/validation/rules/game-flow.d.ts.map +1 -0
- package/dist/validation/rules/game-flow.js +201 -0
- package/dist/validation/rules/game-flow.js.map +1 -0
- package/dist/validation/rules/mythos-structure.d.ts +1 -1
- package/dist/validation/rules/mythos-structure.js +4 -4
- package/dist/validation/rules/mythos-structure.js.map +1 -1
- package/dist/validation/rules/required-fields.d.ts +1 -1
- package/dist/validation/rules/required-fields.js +3 -3
- package/dist/validation/rules/required-fields.js.map +1 -1
- package/dist/validation/rules/tile-connectivity.d.ts +10 -3
- package/dist/validation/rules/tile-connectivity.d.ts.map +1 -1
- package/dist/validation/rules/tile-connectivity.js +66 -108
- package/dist/validation/rules/tile-connectivity.js.map +1 -1
- package/dist/validation/rules/token-event-wiring.d.ts +1 -0
- package/dist/validation/rules/token-event-wiring.d.ts.map +1 -1
- package/dist/validation/rules/token-event-wiring.js +5 -1
- package/dist/validation/rules/token-event-wiring.js.map +1 -1
- package/dist/validation/rules/triggers.d.ts +15 -0
- package/dist/validation/rules/triggers.d.ts.map +1 -0
- package/dist/validation/rules/triggers.js +62 -0
- package/dist/validation/rules/triggers.js.map +1 -0
- package/dist/validation/validator.d.ts.map +1 -1
- package/dist/validation/validator.js +12 -1
- package/dist/validation/validator.js.map +1 -1
- package/package.json +1 -1
- package/skills/custom-monsters/SKILL.md +98 -149
- package/skills/event-patterns/SKILL.md +47 -40
- package/skills/items-and-distribution/SKILL.md +15 -5
- package/skills/scenario/SKILL.md +7 -4
- package/skills/tile-placement/SKILL.md +77 -16
- package/skills/ui-and-puzzles/SKILL.md +17 -25
- package/skills/variables-and-mythos/SKILL.md +50 -56
- package/src/catalogs/catalog-store.ts +2 -2
- package/src/catalogs/data/tile-geometry.ts +198 -182
- package/src/io/image.ts +173 -0
- package/src/io/localization-io.ts +59 -23
- package/src/io/package-builder.ts +6 -3
- package/src/map/layout.ts +308 -0
- package/src/map/render.ts +202 -0
- package/src/model/component-types.ts +35 -1
- package/src/model/field-schema.ts +65 -0
- package/src/model/format-features.ts +49 -0
- package/src/model/scenario-model.ts +12 -0
- package/src/resources/format-docs.ts +87 -32
- package/src/server.ts +97 -17
- package/src/tools/lifecycle.ts +38 -0
- package/src/tools/map.ts +104 -63
- package/src/tools/upsert.ts +98 -25
- package/src/validation/rules/catalog-references.ts +16 -0
- package/src/validation/rules/cross-references.ts +31 -1
- package/src/validation/rules/custom-images.ts +48 -0
- package/src/validation/rules/event-flow.ts +45 -75
- package/src/validation/rules/event-graph.ts +4 -1
- package/src/validation/rules/event-semantics.ts +79 -0
- package/src/validation/rules/field-schema.ts +54 -0
- package/src/validation/rules/format-rules.ts +17 -3
- package/src/validation/rules/game-flow.ts +198 -0
- package/src/validation/rules/mythos-structure.ts +4 -4
- package/src/validation/rules/required-fields.ts +3 -3
- package/src/validation/rules/tile-connectivity.ts +63 -126
- package/src/validation/rules/token-event-wiring.ts +4 -1
- package/src/validation/rules/triggers.ts +68 -0
- package/src/validation/validator.ts +12 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "valkyrie-mom",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "AI-assisted Mansions of Madness scenario editor for Valkyrie",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Thijs Hakkenberg"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"mcpServers": {
|
|
11
11
|
"valkyrie-mom": {
|
|
12
12
|
"command": "npx",
|
|
13
|
-
"args": ["-y", "@thijshakkenberg/valkyrie-mom-mcp"]
|
|
13
|
+
"args": ["-y", "@thijshakkenberg/valkyrie-mom-mcp@latest"]
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
}
|
package/.mcp.json
CHANGED
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ claude plugin install valkyrie-mom
|
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
This gives you:
|
|
23
|
-
- **MCP server** with
|
|
23
|
+
- **MCP server** with 25 tools for scenario editing (auto-started)
|
|
24
24
|
- **7 skills**: `/scenario`, `/event-patterns`, `/tile-placement`, `/variables-and-mythos`, `/custom-monsters`, `/ui-and-puzzles`, `/items-and-distribution`
|
|
25
25
|
- **Scenario designer agent** for autonomous scenario creation
|
|
26
26
|
- **5 MCP resources** for format documentation
|
|
@@ -85,6 +85,7 @@ npx tsx src/index.ts # Run MCP server via stdio
|
|
|
85
85
|
| `get_scenario_state` | Get current scenario component/localization summary |
|
|
86
86
|
| `validate_scenario` | Run all validation rules |
|
|
87
87
|
| `build_scenario` | Save and build `.valkyrie` package |
|
|
88
|
+
| `set_quest_config` | Set difficulty, play time, investigator count, cover image |
|
|
88
89
|
|
|
89
90
|
### Components
|
|
90
91
|
| Tool | Description |
|
|
@@ -96,15 +97,19 @@ npx tsx src/index.ts # Run MCP server via stdio
|
|
|
96
97
|
| `upsert_item` | Create or update an item |
|
|
97
98
|
| `upsert_puzzle` | Create or update a puzzle |
|
|
98
99
|
| `upsert_ui` | Create or update a UI element |
|
|
100
|
+
| `upsert_custom_monster` | Create or update a custom monster |
|
|
101
|
+
| `upsert_mplace` | Create or update a monster placement |
|
|
102
|
+
| `upsert_activation` | Create or update a custom monster activation |
|
|
99
103
|
| `delete_component` | Delete a component with cascade reference cleanup |
|
|
100
104
|
| `set_localization` | Set localization key-value pairs |
|
|
101
105
|
|
|
102
106
|
### Map
|
|
103
107
|
| Tool | Description |
|
|
104
108
|
|------|-------------|
|
|
105
|
-
| `get_map_ascii` |
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
109
|
+
| `get_map_ascii` | Describe the board: tile areas, doors and where they lead (with explore-token spots), tokens and their tile, ASCII sketch |
|
|
110
|
+
| `render_map` | Render the board as a PNG with the real tile artwork (from Valkyrie's imported data) or a schematic, tokens numbered |
|
|
111
|
+
| `suggest_tile_layout` | Suggest coordinates for large (7x7) tiles in linear, L-shape, or hub-spoke layouts |
|
|
112
|
+
| `place_tile_relative` | Position and rotation for a new tile against an existing one, with a door lined up |
|
|
108
113
|
|
|
109
114
|
### Reference
|
|
110
115
|
| Tool | Description |
|
|
@@ -160,25 +165,33 @@ Built scenarios are ZIP archives with a `.valkyrie` extension.
|
|
|
160
165
|
|
|
161
166
|
## Validation Rules
|
|
162
167
|
|
|
163
|
-
The server validates scenarios against
|
|
168
|
+
The server validates scenarios against 18 rule categories, checked against Valkyrie 3.28 (quest format 21):
|
|
164
169
|
|
|
165
170
|
1. **Unique names** - No duplicate component names
|
|
166
|
-
2. **Required fields** - Tiles have `side`, displayed events have `buttons`
|
|
167
|
-
3. **Cross-references** - All referenced components exist
|
|
171
|
+
2. **Required fields** - Tiles have `side` or `customImage`, displayed events have `buttons`
|
|
172
|
+
3. **Cross-references** - All referenced components exist; `remove` #keywords are valid
|
|
168
173
|
4. **Event graph** - `EventStart` trigger exists, no unreachable/dead-end events
|
|
169
|
-
5. **Event flow** -
|
|
174
|
+
5. **Event flow** - No endless loops of hidden events
|
|
170
175
|
6. **Localization completeness** - Event text, button labels, quest metadata
|
|
171
|
-
7. **Format rules** - Valid format version, type=MoM, tile rotations
|
|
176
|
+
7. **Format rules** - Valid format version (4-21) and high enough for the features used, type=MoM, tile rotations
|
|
172
177
|
8. **Catalog references** - Tile sides, monster names, items match game content
|
|
173
|
-
9. **Tile connectivity** - Tiles
|
|
178
|
+
9. **Tile connectivity** - Tiles don't overlap, touch at least one other tile, and share a lined-up door or open edge (door data measured from the tile artwork)
|
|
174
179
|
10. **Mythos structure** - Proper mythos trigger configuration
|
|
175
180
|
11. **Investigator token** - TokenInvestigators setup and removal
|
|
176
181
|
12. **Explore token** - Explore tokens linked to tile reveal events
|
|
182
|
+
13. **Field schema** - Only fields Valkyrie reads for each component type; valid `tokensize` and boolean values
|
|
183
|
+
14. **Event semantics** - How Valkyrie actually runs events: unreachable event2+ on hidden events, `conditions` ignored next to `vartests`, trailing logical operators, spawns wrongly placed in `add`
|
|
184
|
+
15. **Custom images** - Referenced image files exist in the scenario folder
|
|
185
|
+
16. **Token placement** - Tokens and monster placements sit on a tile
|
|
186
|
+
17. **Triggers** - Every trigger is one Valkyrie fires (no token triggers)
|
|
187
|
+
18. **Game flow** - The game can reach an ending from its triggers; defeat condition, mythos, items and start marker set up correctly
|
|
188
|
+
|
|
189
|
+
`build_scenario` refuses to package a scenario while any rule reports an error.
|
|
177
190
|
|
|
178
191
|
## Development
|
|
179
192
|
|
|
180
193
|
```bash
|
|
181
|
-
npm test # Run all tests (
|
|
194
|
+
npm test # Run all tests (1067 tests across 44 files)
|
|
182
195
|
npm run test:watch # Watch mode
|
|
183
196
|
npm run lint # Type check
|
|
184
197
|
npm run build # Compile to dist/
|
|
@@ -193,7 +206,7 @@ agents/ Scenario designer agent
|
|
|
193
206
|
src/
|
|
194
207
|
io/ INI parser/writer, localization CSV, ZIP packager
|
|
195
208
|
model/ ScenarioModel, LocalizationStore, component types
|
|
196
|
-
validation/
|
|
209
|
+
validation/ 15 rules + orchestrator
|
|
197
210
|
rules/ Individual validation rule implementations
|
|
198
211
|
tools/ MCP tool implementations
|
|
199
212
|
resources/ Format documentation resources
|
|
@@ -71,7 +71,9 @@ Use these skills for detailed pattern guidance:
|
|
|
71
71
|
- Silent events with `event1` MUST have `buttons>=1`
|
|
72
72
|
- Use `randomevents=true` for random encounter pools
|
|
73
73
|
- End scenarios with `operations=$end,=,1`
|
|
74
|
-
- Include both victory and defeat paths
|
|
74
|
+
- Include both victory and defeat paths: victory via `trigger=Defeated<SpawnName>` or the final objective, defeat via `trigger=Eliminated`
|
|
75
|
+
- Wire tokens to their events with the token's own `event1` (never `trigger=<TokenName>`); give every item an explicit `starting`
|
|
76
|
+
- `build_scenario` refuses while `validate_scenario` reports errors: fix them rather than forcing
|
|
75
77
|
- Use vartests for branching: button1=FAIL, button2=PASS
|
|
76
78
|
|
|
77
79
|
### Difficulty Balance
|
|
@@ -81,7 +83,7 @@ Use these skills for detailed pattern guidance:
|
|
|
81
83
|
- Mythos scaling formula: `deadlyRound = 20 - #heroes`, `majorRound = deadlyRound / 2`
|
|
82
84
|
- Initialize mythos variables in EventStart chain
|
|
83
85
|
- Use `>=` not `==` for round checks to avoid missed triggers
|
|
84
|
-
- Use one-shot flags (`
|
|
86
|
+
- Use one-shot flags in `vartests` (e.g. `VarOperation:fired,==,0` plus `operations: fired,=,1`) for events that should fire once
|
|
85
87
|
|
|
86
88
|
### Narrative Style
|
|
87
89
|
- Use italics `<i>text</i>` for atmospheric descriptions
|
|
@@ -111,4 +113,4 @@ Use these skills for detailed pattern guidance:
|
|
|
111
113
|
|
|
112
114
|
## Available MCP Tools
|
|
113
115
|
|
|
114
|
-
All tools from the `valkyrie-mom` MCP server are available.
|
|
116
|
+
All tools from the `valkyrie-mom` MCP server are available. Place tiles with `place_tile_relative`, put tokens on the spots `get_map_ascii` lists, and check the board with `render_map` (tiles hang east and south from their position, so floors have negative y). Run `validate_scenario` after major changes. Use `search_game_content` to find valid catalog entries for tiles, monsters, and items.
|
|
@@ -32,8 +32,8 @@ export class CatalogStore {
|
|
|
32
32
|
if (entry.type === 'tile') {
|
|
33
33
|
const geo = TILE_GEOMETRY[entry.id];
|
|
34
34
|
if (geo) {
|
|
35
|
-
entry.
|
|
36
|
-
entry.
|
|
35
|
+
entry.size = `${geo.width}x${geo.height} units`;
|
|
36
|
+
entry.openings = geo.openings;
|
|
37
37
|
entry.desc = geo.desc;
|
|
38
38
|
}
|
|
39
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-store.js","sourceRoot":"","sources":["../../src/catalogs/catalog-store.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,GACP,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO,WAAW,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;AACjD,CAAC;AAED,MAAM,OAAO,YAAY;IACf,OAAO,CAAiB;IACxB,IAAI,CAA4B;IAChC,MAAM,CAAmC;IAEjD;QACE,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,QAAQ;YACX,GAAG,KAAK;YACR,GAAG,KAAK;YACR,GAAG,KAAK;YACR,GAAG,aAAa;YAChB,GAAG,OAAO;YACV,GAAG,MAAM;SACV,CAAC;QAEF,6CAA6C;QAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,GAAG,EAAE,CAAC;oBACR,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog-store.js","sourceRoot":"","sources":["../../src/catalogs/catalog-store.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,GACP,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO,WAAW,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC;AACjD,CAAC;AAED,MAAM,OAAO,YAAY;IACf,OAAO,CAAiB;IACxB,IAAI,CAA4B;IAChC,MAAM,CAAmC;IAEjD;QACE,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,QAAQ;YACX,GAAG,KAAK;YACR,GAAG,KAAK;YACR,GAAG,KAAK;YACR,GAAG,aAAa;YAChB,GAAG,OAAO;YACV,GAAG,MAAM;SACV,CAAC;QAEF,6CAA6C;QAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,GAAG,EAAE,CAAC;oBACR,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC;oBAChD,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAC9B,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QAExB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAa,EAAE,IAAkB;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QAEnE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC3B,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpD,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrE,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxF,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uCAAuC;IACvC,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,uCAAuC;IACvC,SAAS,CAAC,IAAiB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,+DAA+D;IAC/D,SAAS,CAAC,IAAkB;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACnE,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,yDAAyD;IACzD,SAAS,CAAC,WAAmB;QAC3B,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAED,uEAAuE;IACvE,kBAAkB,CAAC,MAAc;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QACtD,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,qEAAqE;IACrE,iBAAiB,CAAC,SAAiB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzD,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;CACF;AAED,gFAAgF;AAChF,IAAI,cAAc,GAAwB,IAAI,CAAC;AAE/C,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -1,10 +1,21 @@
|
|
|
1
|
+
export interface TileOpening {
|
|
2
|
+
from: number;
|
|
3
|
+
to: number;
|
|
4
|
+
/** door: a doorway about one unit wide; open: an open edge (streets, yards) */
|
|
5
|
+
kind: 'door' | 'open';
|
|
6
|
+
}
|
|
1
7
|
export interface TileGeometry {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
/** Image name in Valkyrie's import/img folder, without the .dds extension */
|
|
11
|
+
image: string;
|
|
12
|
+
/** true when the image ships with Valkyrie rather than being imported from the FFG app */
|
|
13
|
+
bundled?: boolean;
|
|
14
|
+
openings: {
|
|
15
|
+
N: TileOpening[];
|
|
16
|
+
E: TileOpening[];
|
|
17
|
+
S: TileOpening[];
|
|
18
|
+
W: TileOpening[];
|
|
8
19
|
};
|
|
9
20
|
desc: string;
|
|
10
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-geometry.d.ts","sourceRoot":"","sources":["../../../src/catalogs/data/tile-geometry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tile-geometry.d.ts","sourceRoot":"","sources":["../../../src/catalogs/data/tile-geometry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE;QAAE,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,CAAC,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;IACrF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAqLtD,CAAC"}
|