Praetorium
Server Details
Public Warhammer 40K rules, datasheets, points and missions; sign in to manage rosters and battles.
- Status
- Healthy
- Uptime
- 99.8% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- richardsolomou/praetorium.gg
- GitHub Stars
- 0
TDQS
Scored across 15 tools
Most tools target clearly distinct resources and actions (battles, rosters, reference, simulator). The reference cluster has mild overlap: list_factions and list_reference both surface factions, and get_reference vs get_reference_record require careful reading to distinguish document-level retrieval from structured record retrieval. Descriptions help, but an agent could still hesitate between these pairs.
All 15 tools follow a consistent snake_case verb_noun pattern (create_battle, get_my_roster, list_reference, save_roster, set_roster_visibility, simulate_combat, submit_battle_action). There are no mixed conventions or vague standalone verbs. The naming is predictable and easy to scan.
15 tools is within the well-scoped range for a server covering battles, rosters, reference lookup, unit data, and combat simulation. Each tool earns its place: the reference tools handle distinct lookup stages, and the battle/roster lifecycle tools are split cleanly by operation. No obvious redundancy inflates the count.
The surface covers the core lifecycle for battles (create, list, get, act), rosters (save/create/update, get, list, visibility), reference discovery and retrieval, unit listing, and combat simulation. Minor gaps exist: no roster deletion, no battle update or deletion after creation, and no explicit battle-log retrieval tool separate from the seated view. These are workable omissions rather than dead ends.
Available Tools
15 toolscreate_battleCreate a battleCDestructiveInspect
Creates a battle with named player seats, using the same rules as the site. Requires mcp:write.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| allyId | No | ||
| casual | No | ||
| manual | No | ||
| guestNames | No | ||
| opponentId | No | ||
| opponentIds | No | ||
| missionPackId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=false, so the safety profile is covered. The description usefully adds the authorization requirement ('Requires mcp:write'), which is not in the annotations. However, it says nothing about why a create operation is flagged destructive, whether the battle persists, or what confirmation/response behavior to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight, front-loaded sentences with no padding; the create action and the auth requirement lead. The clause 'using the same rules as the site' is vague enough to consume space without adding actionable meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema and zero schema descriptions, the description is far too thin. An agent cannot reliably populate casual, manual, limit, or the opponent/ally id variants from what is given, and no result shape or validation constraints are conveyed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters, so the description carries the full burden and mostly fails it. 'Named player seats' loosely gestures at guestNames/opponentIds, but limit, casual, manual, allyId, opponentId and missionPackId are entirely unexplained and the distinction between opponentId and opponentIds goes unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a battle') plus a scoping detail ('with named player seats'), which an agent can separate from submit_battle_action and get_my_battle. It stops short of naming any sibling or clarifying how it differs from simulate_combat or list_my_battles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives, despite a crowded sibling set containing simulate_combat and submit_battle_action. The only routing signal is the prerequisite 'Requires mcp:write', which tells the agent whether it is authorized but not when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_battleRead one of my battlesBRead-onlyIdempotentInspect
Returns the current seated view of a battle for the signed-in player. Requires mcp:read.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds the auth requirement ('Requires mcp:read') and notes the view is 'current' (state-dependent), which is useful beyond the annotations, but it does not explain what 'seated view' returns or whether unseen/opponent data is excluded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose before the permission note. No padding, though the second sentence could carry more substance given the gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool with no output schema, an agent still lacks the token semantics and a definition of the returned 'seated view'. Annotations cover safety, so the omission is not critical, but the definition is thinner than the tool warrants.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter ('token') with 0% schema description coverage, so the description should compensate but does not mention it at all. 'For the signed-in player' and 'Requires mcp:read' loosely imply the token is the auth credential, but the format and whether it is a battle token or session token are left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns'), resource ('a battle'), and scope ('for the signed-in player'), which distinguishes it from list_my_battles and create_battle. The term 'seated view' is unexplained jargon, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the obvious siblings (list_my_battles for the collection, submit_battle_action for acting on a battle). The only conditional information is the permission prerequisite 'Requires mcp:read', which is a constraint rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_rosterRead my saved rosterARead-onlyIdempotentInspect
Returns the saved choices for one roster owned by the signed-in player. Requires mcp:read.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds a scope requirement ('Requires mcp:read') that annotations do not convey, which is genuinely useful auth context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero redundancy, with the core purpose front-loaded before the permission note. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description could briefly say what 'saved choices' comprise, but for a simple single-param read tool with full annotation coverage this is largely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'id' parameter has no schema description, so the description must compensate. It only implies that id identifies the roster ('one roster') without stating the format or where the id comes from, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('returns the saved choices') scoped to a single roster owned by the signed-in player. The singular 'one roster' implicitly contrasts with the sibling list_my_rosters, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Requires mcp:read', which is a permission prerequisite rather than usage context. Nothing tells the agent when to pick this over list_my_rosters, get_my_battle, or get_reference_record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_referenceRead one Praetorium reference resultARead-onlyIdempotentInspect
Reads the complete bounded document returned by search_reference, with its revisions and attribution. A section that withholds rules text lists textSources: the pinned upstream file and record id to fetch if you need the wording.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The stable result id returned by search_reference. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| kind | Yes | |
| title | Yes | |
| faction | Yes | |
| sections | Yes | |
| revisions | Yes | |
| attribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: the result is a 'complete bounded document' with revisions and attribution, and sections may withhold rules text, exposing textSources with a pinned upstream file and record id. That redaction-with-pointer behavior is exactly the kind of trait an agent cannot learn from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the core identity (the document from search_reference) is front-loaded. The second sentence earns its place by disclosing the textSources fallback rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with full annotations and an output schema, the description covers what an agent needs: provenance of the id, scope of the returned document, and the textSources edge case. It stops short of nothing essential, though it leaves the overlap with get_reference_record unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single required 'id' parameter is fully documented as the stable result id returned by search_reference. The description restates that the document originates from search_reference but adds no syntax, format, or constraint detail beyond the schema. Baseline 3 applies when the schema carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it reads the complete bounded document previously returned by search_reference, including revisions and attribution. That clearly distinguishes it from search_reference and list_reference. However, it does not differentiate it from the similarly named sibling get_reference_record, leaving that ambiguity unresolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the document is 'returned by search_reference', so an agent can infer this follows a search. There is no explicit when-not guidance and no mention of how this differs from get_reference_record or list_reference. The one conditional pointer (textSources when rules text is withheld) is useful but descriptive rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reference_recordRead structured Praetorium reference dataARead-onlyIdempotentInspect
Returns the structured record behind a search result, including mission cards, deployments, terrain geometry, detachments, and datasheets. Records that withhold rules text carry textSources pointing at the pinned upstream file and record id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The stable id returned by search_reference or list_reference. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| document | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real behavioral value beyond the annotations: it explains that records withholding rules text carry textSources pointing at a pinned upstream file and record id, telling the agent how to interpret a partial payload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and its payload scope. The category list is longer than strictly necessary given an output schema exists, but it aids selection, so it still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is not required, and the description covers purpose plus the non-obvious textSources behavior. The remaining gap is routing versus get_reference, which is a meaningful but narrow omission for a single-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter and schema description coverage is 100%, with the schema explicitly stating the id is 'returned by search_reference or list_reference'. The description adds no syntax, format, or lookup guidance beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (returns the structured record behind a search result) and enumerates the record categories it can yield (mission cards, deployments, terrain geometry, detachments, datasheets). It does not name the sibling it competes with — get_reference — so the agent must infer the distinction from context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'behind a search result' implies the id must come from search_reference, and the schema confirms this. However, the description never states when to use this tool versus the similarly named sibling get_reference, which is exactly the ambiguity an agent would face here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_factionsList factions in the Praetorium referenceARead-onlyIdempotentInspect
Lists the factions that can be used to narrow reference searches.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| factions | Yes | |
| revisions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds only the idea that these values are filter inputs, and says nothing about ordering, completeness of the list, or caching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every word earns its place for a trivial enumerator.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters and an output schema exists, so return values need not be explained. Combined with the annotations, the description is sufficient, though a note connecting these factions to the narrow-search parameter would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (factions in the Praetorium reference), so the agent knows exactly what is returned. It does not explicitly contrast with siblings like list_units or list_reference, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'that can be used to narrow reference searches' implies the downstream use case, telling the agent this feeds search_reference filtering. However, it gives no explicit when-to-use/when-not guidance or names an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_battlesList my battlesARead-onlyIdempotentInspect
Lists up to 25 battles with a cursor for the next page. Requires mcp:read.
| Name | Required | Description | Default |
|---|---|---|---|
| before | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely useful context the annotations do not: a hard cap of 25 items per page and a required mcp:read scope. It does not describe the cursor lifecycle or ordering of results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler. The pagination limit is front-loaded and the auth requirement follows, each earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and an undocumented nested cursor parameter, an agent still lacks clarity on the exact `before` payload and result ordering. Page size, pagination existence, and auth scope are covered, so the essentials are present but not fully sufficient to call it confidently on a second page.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single `before` parameter is a nested object with `at` and `id` fields that the schema does not describe. The description only alludes to 'a cursor for the next page,' which gestures at the parameter's role but does not explain the {at, id} shape or how to obtain the value. Partial compensation for a documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (lists battles scoped to 'my'), which cleanly distinguishes it from list_factions, list_my_rosters, and list_reference among the siblings. It does not explicitly name an alternative, but the 'my' scope is self-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus get_my_battle, list_my_rosters, or search_reference. Usage is only implied by the name and description; no conditions, prerequisites, or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_rostersList my saved rostersARead-onlyIdempotentInspect
Lists the rosters saved to the signed-in Praetorium account. Requires mcp:read.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds the mcp:read scope requirement, which is genuine value, but says nothing about ordering, pagination, or what an empty result means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences, with the resource scope front-loaded and the permission constraint trailing where it belongs. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list with annotations covering safety and no output schema to explain, the description supplies the essential scope and auth requirements. It stops short of describing result ordering or pagination, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description usefully explains that the target account is implicit ('signed-in'), confirming no account identifier is needed, though nothing further is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (rosters) scoped to the signed-in account, which separates it from the singular get_my_roster and from list_my_battles. It does not explicitly name those siblings, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope phrase 'saved to the signed-in Praetorium account' implies when this tool is appropriate, and the permission requirement is useful context. However, there is no explicit comparison to get_my_roster or search-style siblings, so the agent must infer the selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_referenceList the Praetorium reference catalogueARead-onlyIdempotentInspect
Discovers available factions, mission packs, rule documents, reference kinds, and active source revisions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| kinds | Yes | |
| factions | Yes | |
| revisions | Yes | |
| missionPacks | Yes | |
| ruleDocuments | Yes | |
| corpusRevision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered and the description need not restate it. The description adds a small amount of behavioral nuance by scoping results to 'active source revisions', but says nothing about scope limits, pagination, or what is excluded from the catalogue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the discovery verb first and then the resources returned. There is no filler, redundancy, or trailing boilerplate to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description is not obliged to explain return values, and the enumerated resource kinds give the agent enough to know what it will receive. The only real gap is the absence of sibling routing guidance, which is a usage concern rather than a completeness one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. No additional parameter meaning is needed or expected, and the description correctly avoids inventing filter options that the schema does not expose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Discovers' plus the enumerated resource set (factions, mission packs, rule documents, reference kinds, active source revisions) makes clear this is a catalogue-enumeration tool rooted in the 'Praetorium reference' domain. It does not, however, differentiate itself from siblings like list_factions, list_units, or search_reference, which sound like overlapping listing operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Discovers available...' suggests this is the browsable entry point for the catalogue, but there is no explicit when-to-use statement, no mention of prerequisites, and no routing guidance versus get_reference, get_reference_record, or search_reference. The agent must infer this is a discovery-first call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unitsList compact faction units for roster planningARead-onlyIdempotentInspect
Returns every pickable unit in one bounded response with unit-size costs, composition, attachment relationships, roster limits, roles, keywords, and links. Include a detachment to receive its rules, enhancements, upgrades, and stratagems by name, cost, and timing without opening every unit page. Their rules text is at each record’s textSources.
| Name | Required | Description | Default |
|---|---|---|---|
| faction | Yes | Faction id, URL slug, or display name from list_reference. | |
| battleSize | No | Battle size in points for size-dependent limits. | |
| detachment | No | Detachment id, slug, or display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| units | Yes | |
| faction | Yes | |
| revisions | Yes | |
| battleSize | Yes | |
| detachment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description adds genuinely non-structured context: the response is 'bounded', it avoids 'opening every unit page', and rules text lives at each record's textSources. That last point is a real behavioral disclosure about payload location.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary return contract, then the optional-detachment payoff, then the pointer to rules text. The middle enumeration is long but each item is a distinct field, so it earns its space; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not enumerate every returned field, yet it front-loads the key contents anyway. Combined with 100% parameter coverage and a full safety annotation set, the agent has enough to call this correctly; only the lack of alternative routing leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the payoff of the detachment parameter — its rules, enhancements, upgrades, and stratagems come back with name, cost, and timing — which tells the agent why to pass it rather than just what it accepts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Returns every pickable unit' scoped to a faction, with an enumeration of what each record carries (size costs, composition, attachments, limits, roles, keywords, links). The title adds the roster-planning framing. It never names or contrasts a sibling (search_reference, get_reference_record), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the conditional 'Include a detachment to receive its rules, enhancements, upgrades, and stratagems'. There is no explicit when-to-use versus when-to-use-something-else, and no mention of the search_reference/get_reference_record alternatives an agent would otherwise weigh against this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_rosterCreate or edit my rosterADestructiveInspect
Saves a complete roster. Pass its id to edit an owned roster; omit id to create one. limit is the battle size (1000, 2000 or 3000 points, or 600 for King of the Colosseum), which sets detachment points, enhancement and unit limits. pointsBudget optionally replaces only its points total (500 to 10000, not King of the Colosseum); omit it to keep a saved budget, or send null for the standard total. Requires mcp:write.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | Yes | ||
| prep | Yes | ||
| limit | Yes | ||
| picks | Yes | ||
| source | No | editable | |
| visibility | No | private | |
| catalogueId | Yes | ||
| disposition | Yes | ||
| waivedRules | No | ||
| pointsBudget | No | ||
| detachmentIds | Yes | ||
| optionalRules | No | ||
| borrowedDetachmentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is partly covered. The description adds real value beyond that: "Saves a complete roster" signals a full overwrite rather than a merge, the pointsBudget omit-vs-null semantics are spelled out, and the mcp:write auth requirement is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and each sentence carries semantic weight with no filler. It is dense and slightly packed with clause-heavy rules, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, 7-required mutation tool, the description covers create/edit routing, limit, pointsBudget, and auth, which is meaningful. It leaves most parameters unexplained and, with no output schema, says nothing about the return value, so it is only partially complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 14 parameters, so the description must carry the burden, but it only explains id, limit, and pointsBudget. Those three get genuinely useful semantics (battle-size meaning, allowed values, King of the Colosseum exception, replace-vs-keep-vs-reset behavior), but required params like catalogueId, detachmentIds, disposition, picks, and prep are undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Saves a complete roster") and disambiguates the two operating modes: pass id to edit an owned roster, omit id to create one. It is clear on its own but never names or distinguishes itself from relevant siblings such as create_battle or set_roster_visibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit decision rule (id present = edit, absent = create) and states the mcp:write prerequisite, so an agent knows the context for invoking it. It offers no exclusions or pointers to alternative tools for related tasks like visibility changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_referenceSearch the Praetorium game referenceARead-onlyIdempotentInspect
Searches Praetorium’s missions, rules, detachments, and datasheets by name, number, keyword, and value. Returns bounded excerpts with canonical URLs, source revisions, and attribution. Rules text is not included; records point to it upstream.
| Name | Required | Description | Default |
|---|---|---|---|
| pack | No | ||
| kinds | No | ||
| limit | No | ||
| query | Yes | A name, a printed rule number, an ability, a weapon, or a keyword. | |
| cursor | No | ||
| faction | No | ||
| document | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| revisions | Yes | |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's value-add is the output contract: bounded excerpts, canonical URLs, source revisions, attribution, and the explicit limitation that rules text is not returned and must be followed upstream. That is real behavioral context an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it searches, what it returns, and the key limitation. Front-loaded with the verb and resource, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-format detail is a bonus rather than a requirement, and the rules-text caveat is well placed. However, for a 7-parameter tool with near-zero schema coverage, the scoping parameters (pack, faction, document, cursor) are left undocumented in both places, leaving gaps an agent would have to guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14% across 7 parameters, so the description carries most of the burden. It clarifies query semantics (name, number, keyword, value) and implicitly maps to several kinds enum values via the listed record types, but pack, faction, document, cursor, and limit are entirely unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (searches) and resource set (missions, rules, detachments, datasheets) plus the matching facets (name, number, keyword, value). It doesn't explicitly contrast itself with the nearby siblings list_reference and get_reference_record, so an agent must infer that this is the query-driven variant rather than the browse-by-id variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The enumeration of matchable facets implies when this tool is appropriate (free-text or printed-number lookups), but there is no explicit when-to-use/when-not or named alternative among list_reference, get_reference, and get_reference_record. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_roster_visibilityChange my roster visibilityBDestructiveInspect
Changes the visibility of an owned roster. Requires mcp:write.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| visibility | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact — the required 'mcp:write' scope — but says nothing about the effect of flipping visibility (e.g., whether a public roster becomes discoverable), which is the main behavioral question for this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the auth requirement. No filler, nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the mutation/safety profile and there is no output schema to explain, so the bar is lower. Still, for a two-parameter mutation with zero schema description coverage, the definition leaves the parameter meaning and the practical effect of the change entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, yet it never explains 'id' (roster identifier) or that 'visibility' takes one of private/unlisted/public. The schema's enum conveys the allowed values, but the description adds nothing about how the parameters map to the operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('changes the visibility of an owned roster'), which is clearly distinct from sibling tools like save_roster or get_my_roster. It stops short of naming how it relates to the surrounding roster tools, but the action itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It scopes the tool to 'an owned roster,' which is a useful precondition, but there is no guidance on when to reach for this instead of save_roster or other roster siblings, and no mention of what happens when visibility is changed. Usage is implied only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_combatEstimate combat between two unitsARead-onlyIdempotentInspect
Runs Praetorium's exact combat simulator for one attacking unit, with any attached leaders, against one defending unit at full strength: shooting, melee, and shooting followed by melee. Returns expected models destroyed, expected wounds lost, the chance to destroy the unit, cumulative odds, weapons used, the rule and weapon-mode choices each side can change, datasheet citations, and a simulator link. Passive datasheet rules apply by default; stratagems and conditional rules stay off until chosen. Unsupported mechanics are refused or listed under notCalculated rather than approximated. Like the standalone simulator page, it uses default loadouts and no detachment; unit sizes and attachments must be legal.
| Name | Required | Description | Default |
|---|---|---|---|
| attacker | Yes | ||
| defender | Yes | ||
| modifiers | No | Situational modifiers the simulator page offers, such as { "all": { "cover": true, "hitModifier": -1 } }, { "melee": { "charged": true } }, or { "target": { "invulnerable": 4 } }. | |
| weaponModes | No | Weapon mode choices by key from a previous result, such as a frag or krak profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial extra context: it enumerates the returned metrics, discloses that unsupported mechanics are refused or reported under notCalculated rather than approximated, and states the default rules posture. That is exactly the behavioral detail annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action (simulator run) followed by returns, then defaults/limitations. Dense single paragraph where nearly every sentence earns its place, though the return enumeration is somewhat list-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with nested objects and no output schema, the description compensates by listing the expected outputs and the rules-default/refusal behavior. It omits any explanation of the modifiers structure, which is handled only in the schema, leaving a minor completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, so the description must partly compensate. It adds meaning for attached leaders (drawn from canBeLedBy/canBeSupportedBy) and touches rule/weapon-mode choices, but the large nested modifiers object is left entirely to the schema. Adequate but with a clear gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Runs Praetorium's exact combat simulator') plus the exact resource scope (one attacker with attached leaders vs one defender) and enumerates the phases covered (shooting, melee, shoot-then-melee). This clearly separates it from the CRUD/battle siblings, though it never names an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational context: passive datasheet rules on by default, stratagems/conditional rules off until chosen, default loadouts, no detachment, and legal unit sizes/attachments required. It stops short of an explicit when-to-use-vs-siblings routing statement (e.g., versus create_battle), so it is clear context rather than full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_battle_actionRecord a battle actionBDestructiveInspect
Appends a legal battle command only when expectedSeq matches the current log. Requires mcp:write.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ||
| command | Yes | ||
| expectedSeq | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, destructive, non-idempotent write. The description adds value beyond them by disclosing the auth scope requirement (mcp:write) and the optimistic-concurrency guard, both material to calling it correctly. It stops short of saying what a seq mismatch returns or whether retries are safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the core action front-loaded and no filler. Nothing is wasted, though the size is arguably too small for the complexity it fronts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool whose command payload is a deeply nested union of dozens of command kinds, no output schema, and zero schema descriptions, this is significantly under-specified. The write mechanics are covered, but an agent gets no help constructing a valid command.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet it only explains expectedSeq (matching the current log). The token parameter and the enormous command discriminated union — the entire substance of the call — receive no semantic explanation at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("appends a legal battle command") plus a scoping condition, which is enough for an agent to identify this as the action-submission tool. It does not explicitly differentiate itself from siblings like create_battle, but the verb+resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one strong precondition (call only when expectedSeq matches the current log), which is genuine usage guidance. However, it names no alternatives and no explicit when-not, leaving the agent to infer how this differs from other battle-mutating tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
create_battle1 field changed- added
Input schema / properties / guestNamesAdded value: +{ + "items": { + "maxLength": 48, + "minLength": 1, + "type": "string" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" +}
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "manual": { - "type": "boolean" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "dispositions": { - "items": { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "side", - "disposition" - ], - "type": "object" - }, - "maxItems": 2, - "type": "array" - }, - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "tactical", - "fixed" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "dispositions": { - "items": { - "maxLength": 64, - "type": "string" - }, - "maxItems": 16, - "type": "array" - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "pointsBudget": { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "keywords": { - "items": { - "maxLength": 100, - "type": "string" - }, - "maxItems": 60, - "type": "array" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportCapacity": { - "properties": { - "alternatives": { - "items": { - "maxLength": 200, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "conditions": { - "items": { - "properties": { - "capacity": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "carries": { - "maxLength": 200, - "type": "string" - }, - "maxWounds": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "wargear": { - "maxLength": 200, - "type": "string" - } - }, - "required": [ - "capacity", - "carries", - "wargear" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "excluded": { - "items": { - "properties": { - "except": { - "maxLength": 200, - "type": "string" - }, - "keywords": { - "maxLength": 200, - "type": "string" - } - }, - "required": [ - "keywords" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "instead": { - "anyOf": [ - { - "properties": { - "capacity": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "carries": { - "maxLength": 200, - "type": "string" - }, - "maxWounds": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - } - }, - "required": [ - "capacity", - "carries" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "main": { - "properties": { - "capacity": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "carries": { - "maxLength": 200, - "type": "string" - }, - "maxWounds": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - } - }, - "required": [ - "capacity", - "carries" - ], - "type": "object" - }, - "pools": { - "items": { - "properties": { - "capacity": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "carries": { - "maxLength": 200, - "type": "string" - }, - "maxWounds": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - } - }, - "required": [ - "capacity", - "carries" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "space": { - "items": { - "properties": { - "keywords": { - "maxLength": 200, - "type": "string" - }, - "moreWoundsThan": { - "maximum": 1000, - "minimum": 0, - "type": "integer" - }, - "size": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - } - }, - "required": [ - "size" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - } - }, - "required": [ - "main", - "instead", - "conditions", - "pools", - "alternatives", - "excluded", - "space" - ], - "type": "object" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "lentBy": { - "properties": { - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 48, - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "tactical", - "fixed" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "add-note", - "type": "string" - }, - "text": { - "maxLength": 500, - "type": "string" - } - }, - "required": [ - "kind", - "text" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "manual": { + "type": "boolean" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "dispositions": { + "items": { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "disposition" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + }, + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "tactical", + "fixed" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dispositions": { + "items": { + "maxLength": 64, + "type": "string" + }, + "maxItems": 16, + "type": "array" + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "pointsBudget": { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "keywords": { + "items": { + "maxLength": 100, + "type": "string" + }, + "maxItems": 60, + "type": "array" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportCapacity": { + "properties": { + "alternatives": { + "items": { + "maxLength": 200, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "conditions": { + "items": { + "properties": { + "capacity": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "carries": { + "maxLength": 200, + "type": "string" + }, + "maxWounds": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "wargear": { + "maxLength": 200, + "type": "string" + } + }, + "required": [ + "capacity", + "carries", + "wargear" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "excluded": { + "items": { + "properties": { + "except": { + "maxLength": 200, + "type": "string" + }, + "keywords": { + "maxLength": 200, + "type": "string" + } + }, + "required": [ + "keywords" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "instead": { + "anyOf": [ + { + "properties": { + "capacity": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "carries": { + "maxLength": 200, + "type": "string" + }, + "maxWounds": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + } + }, + "required": [ + "capacity", + "carries" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "main": { + "properties": { + "capacity": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "carries": { + "maxLength": 200, + "type": "string" + }, + "maxWounds": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + } + }, + "required": [ + "capacity", + "carries" + ], + "type": "object" + }, + "pools": { + "items": { + "properties": { + "capacity": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "carries": { + "maxLength": 200, + "type": "string" + }, + "maxWounds": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + } + }, + "required": [ + "capacity", + "carries" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "space": { + "items": { + "properties": { + "keywords": { + "maxLength": 200, + "type": "string" + }, + "moreWoundsThan": { + "maximum": 1000, + "minimum": 0, + "type": "integer" + }, + "size": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + } + }, + "required": [ + "size" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + } + }, + "required": [ + "main", + "instead", + "conditions", + "pools", + "alternatives", + "excluded", + "space" + ], + "type": "object" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "lentBy": { + "properties": { + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "tactical", + "fixed" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "add-note", + "type": "string" + }, + "text": { + "maxLength": 500, + "type": "string" + } + }, + "required": [ + "kind", + "text" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "draft": { + "properties": { + "borrowedDetachmentId": { + "anyOf": [ + { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "optionalRules": { + "items": { + "enum": [ + "kotc-borrowed-disposition" + ], + "type": "string" + }, + "maxItems": 1, + "type": "array" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "pointsBudget": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "prep": { + "anyOf": [ + { + "properties": { + "reminders": { + "default": [], + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "default": true, + "type": "boolean" + }, + "secondaries": { + "items": { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "default": "editable", + "enum": [ + "legacy", + "editable", + "praetorium", + "battlebase", + "newrecruit", + "roster-file" + ], + "type": "string" + }, + "visibility": { + "default": "private", + "enum": [ + "private", + "unlisted", + "public" + ], + "type": "string" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "name", + "catalogueId", + "detachmentIds", + "disposition", + "limit", + "picks", + "prep" + ], + "type": "object" + }, + "kind": { + "const": "attach-draft-roster", + "type": "string" + } + }, + "required": [ + "kind", + "draft" + ], + "type": "object" + } +]
4 tool updates
- Changed
get_reference1 field changed- added
Output schema / properties / sections / items / properties / textSourcesAdded value: +{ + "description": "Where withheld rules text lives upstream; fetch it there if you need the wording.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "source": { + "enum": [ + "bsdata", + "game-datacards" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "source", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
get_reference_record1 field changed- added
Output schema / properties / document / properties / sections / items / properties / textSourcesAdded value: +{ + "description": "Where withheld rules text lives upstream; fetch it there if you need the wording.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "source": { + "enum": [ + "bsdata", + "game-datacards" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "source", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
search_reference2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Words, a printed rule number, an ability, a weapon, or a rules phrase."New value: +"A name, a printed rule number, an ability, a weapon, or a keyword." - added
Output schema / properties / results / items / properties / section / properties / textSourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "source": { + "enum": [ + "bsdata", + "game-datacards" + ], + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "source", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "manual": { - "type": "boolean" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "dispositions": { - "items": { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "side", - "disposition" - ], - "type": "object" - }, - "maxItems": 2, - "type": "array" - }, - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "tactical", - "fixed" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "dispositions": { - "items": { - "maxLength": 64, - "type": "string" - }, - "maxItems": 16, - "type": "array" - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "pointsBudget": { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "keywords": { - "items": { - "maxLength": 100, - "type": "string" - }, - "maxItems": 60, - "type": "array" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "lentBy": { - "properties": { - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 48, - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "tactical", - "fixed" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "add-note", - "type": "string" - }, - "text": { - "maxLength": 500, - "type": "string" - } - }, - "required": [ - "kind", - "text" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "manual": { + "type": "boolean" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "dispositions": { + "items": { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "disposition" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + }, + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "tactical", + "fixed" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dispositions": { + "items": { + "maxLength": 64, + "type": "string" + }, + "maxItems": 16, + "type": "array" + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "pointsBudget": { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "keywords": { + "items": { + "maxLength": 100, + "type": "string" + }, + "maxItems": 60, + "type": "array" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportCapacity": { + "properties": { + "alternatives": { + "items": { + "maxLength": 200, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "conditions": { + "items": { + "properties": { + "capacity": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "carries": { + "maxLength": 200, + "type": "string" + }, + "maxWounds": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "wargear": { + "maxLength": 200, + "type": "string" + } + }, + "required": [ + "capacity", + "carries", + "wargear" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "excluded": { + "items": { + "properties": { + "except": { + "maxLength": 200, + "type": "string" + }, + "keywords": { + "maxLength": 200, + "type": "string" + } + }, + "required": [ + "keywords" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "instead": { + "anyOf": [ + { + "properties": { + "capacity": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "carries": { + "maxLength": 200, + "type": "string" + }, + "maxWounds": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + } + }, + "required": [ + "capacity", + "carries" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "main": { + "properties": { + "capacity": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "carries": { + "maxLength": 200, + "type": "string" + }, + "maxWounds": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + } + }, + "required": [ + "capacity", + "carries" + ], + "type": "object" + }, + "pools": { + "items": { + "properties": { + "capacity": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "carries": { + "maxLength": 200, + "type": "string" + }, + "maxWounds": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + } + }, + "required": [ + "capacity", + "carries" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "space": { + "items": { + "properties": { + "keywords": { + "maxLength": 200, + "type": "string" + }, + "moreWoundsThan": { + "maximum": 1000, + "minimum": 0, + "type": "integer" + }, + "size": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + } + }, + "required": [ + "size" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + } + }, + "required": [ + "main", + "instead", + "conditions", + "pools", + "alternatives", + "excluded", + "space" + ], + "type": "object" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "lentBy": { + "properties": { + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "tactical", + "fixed" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "add-note", + "type": "string" + }, + "text": { + "maxLength": 500, + "type": "string" + } + }, + "required": [ + "kind", + "text" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "manual": { - "type": "boolean" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "dispositions": { - "items": { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "side", - "disposition" - ], - "type": "object" - }, - "maxItems": 2, - "type": "array" - }, - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "dispositions": { - "items": { - "maxLength": 64, - "type": "string" - }, - "maxItems": 16, - "type": "array" - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "pointsBudget": { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "keywords": { - "items": { - "maxLength": 100, - "type": "string" - }, - "maxItems": 60, - "type": "array" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "lentBy": { - "properties": { - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 48, - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "add-note", - "type": "string" - }, - "text": { - "maxLength": 500, - "type": "string" - } - }, - "required": [ - "kind", - "text" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "manual": { + "type": "boolean" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "dispositions": { + "items": { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "disposition" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + }, + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "tactical", + "fixed" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dispositions": { + "items": { + "maxLength": 64, + "type": "string" + }, + "maxItems": 16, + "type": "array" + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "pointsBudget": { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "keywords": { + "items": { + "maxLength": 100, + "type": "string" + }, + "maxItems": 60, + "type": "array" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "lentBy": { + "properties": { + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "tactical", + "fixed" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "add-note", + "type": "string" + }, + "text": { + "maxLength": 500, + "type": "string" + } + }, + "required": [ + "kind", + "text" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "manual": { - "type": "boolean" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "dispositions": { - "items": { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "side", - "disposition" - ], - "type": "object" - }, - "maxItems": 2, - "type": "array" - }, - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "dispositions": { - "items": { - "maxLength": 64, - "type": "string" - }, - "maxItems": 16, - "type": "array" - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "pointsBudget": { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "lentBy": { - "properties": { - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 48, - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "add-note", - "type": "string" - }, - "text": { - "maxLength": 500, - "type": "string" - } - }, - "required": [ - "kind", - "text" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "manual": { + "type": "boolean" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "dispositions": { + "items": { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "disposition" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + }, + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dispositions": { + "items": { + "maxLength": 64, + "type": "string" + }, + "maxItems": 16, + "type": "array" + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "pointsBudget": { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "keywords": { + "items": { + "maxLength": 100, + "type": "string" + }, + "maxItems": 60, + "type": "array" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "lentBy": { + "properties": { + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "add-note", + "type": "string" + }, + "text": { + "maxLength": 500, + "type": "string" + } + }, + "required": [ + "kind", + "text" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "manual": { - "type": "boolean" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "pointsBudget": { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "lentBy": { - "properties": { - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 48, - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "add-note", - "type": "string" - }, - "text": { - "maxLength": 500, - "type": "string" - } - }, - "required": [ - "kind", - "text" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "manual": { + "type": "boolean" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "dispositions": { + "items": { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "disposition" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + }, + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "dispositions": { + "items": { + "maxLength": 64, + "type": "string" + }, + "maxItems": 16, + "type": "array" + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "pointsBudget": { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "lentBy": { + "properties": { + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "add-note", + "type": "string" + }, + "text": { + "maxLength": 500, + "type": "string" + } + }, + "required": [ + "kind", + "text" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "manual": { - "type": "boolean" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "pointsBudget": { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "add-note", - "type": "string" - }, - "text": { - "maxLength": 500, - "type": "string" - } - }, - "required": [ - "kind", - "text" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "manual": { + "type": "boolean" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "pointsBudget": { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "lentBy": { + "properties": { + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 48, + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "add-note", + "type": "string" + }, + "text": { + "maxLength": 500, + "type": "string" + } + }, + "required": [ + "kind", + "text" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
3 tool updates
- Changed
create_battle1 field changed- added
Input schema / properties / manualAdded value: +{ + "default": false, + "type": "boolean" +}
- Changed
save_roster3 fields changed- removed
Input schema / properties / picks / items / properties / nicknameRemoved value: -{ - "maxLength": 40, - "type": "string" -} - added
Input schema / properties / pointsBudgetAdded value: +{ + "anyOf": [ + { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + { + "type": "null" + } + ] +} - changed
Input schema / properties / prep / anyOfPrevious value: -[ - { - "properties": { - "reminders": { - "default": [], - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "default": true, - "type": "boolean" - }, - "secondaries": { - "items": { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "shareNotes": { - "default": false, - "type": "boolean" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "reminders": { + "default": [], + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "default": true, + "type": "boolean" + }, + "secondaries": { + "items": { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "nickname": { - "maxLength": 40, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "nickname": { - "maxLength": 40, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "missed": { - "properties": { - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "turn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "round", - "phase", - "turn" - ], - "type": "object" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "manual": { + "type": "boolean" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "pointsBudget": { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "add-note", + "type": "string" + }, + "text": { + "maxLength": 500, + "type": "string" + } + }, + "required": [ + "kind", + "text" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "nickname": { - "maxLength": 40, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "nickname": { - "maxLength": 40, - "type": "string" - }, - "note": { - "maxLength": 500, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "nickname": { + "maxLength": 40, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "nickname": { + "maxLength": 40, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "missed": { + "properties": { + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "turn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "round", + "phase", + "turn" + ], + "type": "object" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
2 tool updates
- Changed
save_roster3 fields changed- added
Input schema / properties / picks / items / properties / nicknameAdded value: +{ + "maxLength": 40, + "type": "string" +} - added
Input schema / properties / picks / items / properties / noteAdded value: +{ + "maxLength": 500, + "type": "string" +} - changed
Input schema / properties / prep / anyOfPrevious value: -[ - { - "properties": { - "reminders": { - "default": [], - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "default": true, - "type": "boolean" - }, - "secondaries": { - "items": { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "reminders": { + "default": [], + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "default": true, + "type": "boolean" + }, + "secondaries": { + "items": { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "shareNotes": { + "default": false, + "type": "boolean" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - }, - { - "properties": { - "allEligible": { - "type": "boolean" - }, - "areas": { - "items": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" - }, - "kind": { - "const": "locate-and-deny", - "type": "string" - }, - "outsideZone": { - "type": "boolean" - } - }, - "required": [ - "kind", - "areas", - "outsideZone", - "allEligible" - ], - "type": "object" - }, - { - "properties": { - "controlled": { - "type": "boolean" - }, - "kind": { - "const": "sensor-sweep", - "type": "string" - }, - "marker": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name", - "playerId" - ], - "type": "object" - } - }, - "required": [ - "kind", - "marker", - "controlled" - ], - "type": "object" - }, - { - "properties": { - "consecrations": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "consecrate", - "type": "string" - }, - "notHome": { - "type": "boolean" - }, - "qualified": { - "type": "boolean" - } - }, - "required": [ - "kind", - "consecrations", - "qualified", - "notHome" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon", - "locate-and-deny", - "sensor-sweep", - "consecrate" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "nickname": { + "maxLength": 40, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "nickname": { + "maxLength": 40, + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "cardKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "select-mission", - "type": "string" - }, - "occurrence": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "selection": { - "oneOf": [ - { - "properties": { - "fallback": { - "type": "boolean" - }, - "kind": { - "const": "punishment", - "type": "string" - }, - "qualified": { - "type": "boolean" - }, - "unavailable": { - "const": true, - "type": "boolean" - }, - "units": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - } - }, - "required": [ - "kind", - "units", - "fallback", - "qualified" - ], - "type": "object" - }, - { - "properties": { - "guards": { - "items": { - "properties": { - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "unit": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - } - }, - "required": [ - "objective", - "unit" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "kind": { - "const": "guards", - "type": "string" - } - }, - "required": [ - "kind", - "guards" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "tempting-target", - "type": "string" - }, - "noMansLand": { - "type": "boolean" - }, - "notHome": { - "type": "boolean" - }, - "objective": { - "properties": { - "key": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "objective", - "notHome", - "noMansLand" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "beacon", - "type": "string" - }, - "note": { - "maxLength": 200, - "type": "string" - }, - "unit": { - "anyOf": [ - { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterSeq": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "playerId", - "unitKey", - "rosterSeq" - ], - "type": "object" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "unit", - "note" - ], - "type": "object" - } - ] - } - }, - "required": [ - "kind", - "cardKey", - "occurrence", - "selection" - ], - "type": "object" - }, - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "selection": { - "enum": [ - "punishment", - "guards", - "tempting-target", - "beacon" - ], - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + }, + { + "properties": { + "allEligible": { + "type": "boolean" + }, + "areas": { + "items": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 5, + "type": "array" + }, + "kind": { + "const": "locate-and-deny", + "type": "string" + }, + "outsideZone": { + "type": "boolean" + } + }, + "required": [ + "kind", + "areas", + "outsideZone", + "allEligible" + ], + "type": "object" + }, + { + "properties": { + "controlled": { + "type": "boolean" + }, + "kind": { + "const": "sensor-sweep", + "type": "string" + }, + "marker": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name", + "playerId" + ], + "type": "object" + } + }, + "required": [ + "kind", + "marker", + "controlled" + ], + "type": "object" + }, + { + "properties": { + "consecrations": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "consecrate", + "type": "string" + }, + "notHome": { + "type": "boolean" + }, + "qualified": { + "type": "boolean" + } + }, + "required": [ + "kind", + "consecrations", + "qualified", + "notHome" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon", + "locate-and-deny", + "sensor-sweep", + "consecrate" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "final": { - "properties": { - "claims": { - "items": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "maxItems": 20, - "type": "array" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "claims", - "delta" - ], - "type": "object" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "cardKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "select-mission", + "type": "string" + }, + "occurrence": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "selection": { + "oneOf": [ + { + "properties": { + "fallback": { + "type": "boolean" + }, + "kind": { + "const": "punishment", + "type": "string" + }, + "qualified": { + "type": "boolean" + }, + "unavailable": { + "const": true, + "type": "boolean" + }, + "units": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + } + }, + "required": [ + "kind", + "units", + "fallback", + "qualified" + ], + "type": "object" + }, + { + "properties": { + "guards": { + "items": { + "properties": { + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "unit": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + } + }, + "required": [ + "objective", + "unit" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "kind": { + "const": "guards", + "type": "string" + } + }, + "required": [ + "kind", + "guards" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "tempting-target", + "type": "string" + }, + "noMansLand": { + "type": "boolean" + }, + "notHome": { + "type": "boolean" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective", + "notHome", + "noMansLand" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "beacon", + "type": "string" + }, + "note": { + "maxLength": 200, + "type": "string" + }, + "unit": { + "anyOf": [ + { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterSeq": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "playerId", + "unitKey", + "rosterSeq" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "unit", + "note" + ], + "type": "object" + } + ] + } + }, + "required": [ + "kind", + "cardKey", + "occurrence", + "selection" + ], + "type": "object" + }, + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "selection": { + "enum": [ + "punishment", + "guards", + "tempting-target", + "beacon" + ], + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "description": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "slug": { - "maxLength": 80, - "minLength": 1, - "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "final": { + "properties": { + "claims": { + "items": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "maxItems": 20, + "type": "array" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "claims", + "delta" + ], + "type": "object" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "edition": { - "properties": { - "id": { - "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "preview", - "released", - "retired" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "status" - ], - "type": "object" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "description": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "slug": { + "maxLength": 80, + "minLength": 1, + "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$", + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
1 tool update
- Changed
save_roster1 field changed- added
Input schema / properties / borrowedDetachmentId / defaultAdded value: +null
1 tool update
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "edition": { + "properties": { + "id": { + "pattern": "^[a-z0-9][a-z0-9-]{0,19}$", + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "preview", + "released", + "retired" + ], + "type": "string" + } + }, + "required": [ + "id", + "name", + "status" + ], + "type": "object" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
2 tool updates
- Changed
save_roster1 field changed- removed
Input schema / properties / borrowedDetachmentId / defaultRemoved value: -null
- Added
simulate_combat
2 tool updates
- Changed
create_battle4 fields changed- added
Input schema / properties / limit / anyOfAdded value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Input schema / properties / limit / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / limit / minimumRemoved value: --9007199254740991 - removed
Input schema / properties / limit / typeRemoved value: -"integer"
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "any" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "firstRoundOnly": { - "type": "boolean" - }, - "moment": { - "enum": [ - "round-start", - "round-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "const": "either", - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
2 tool updates
- Changed
save_roster1 field changed- changed
Input schema / properties / prep / anyOfPrevious value: -[ - { - "properties": { - "reminders": { - "default": [], - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "default": true, - "type": "boolean" - }, - "secondaries": { - "items": { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "reminders": { + "default": [], + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "default": true, + "type": "boolean" + }, + "secondaries": { + "items": { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle-round", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "any" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "firstRoundOnly": { + "type": "boolean" + }, + "moment": { + "enum": [ + "round-start", + "round-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "const": "either", + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
2 tool updates
- Changed
save_roster1 field changed- changed
Input schema / properties / prep / anyOfPrevious value: -[ - { - "properties": { - "reminders": { - "default": [], - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "default": true, - "type": "boolean" - }, - "secondaries": { - "items": { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "reminders": { + "default": [], + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "default": true, + "type": "boolean" + }, + "secondaries": { + "items": { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle-round", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
2 tool updates
- Changed
save_roster2 fields changed- changed
Input schema / properties / borrowedDetachmentId / anyOfPrevious value: -[ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / detachmentIds / items / maxLengthPrevious value: -64New value: +128
- Changed
submit_battle_action1 field changed- changed
Input schema / properties / command / anyOfPrevious value: -[ - { - "oneOf": [ - { - "properties": { - "clockLimitMinutes": { - "anyOf": [ - { - "maximum": 300, - "minimum": 5, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "configure-battle", - "type": "string" - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "missionPackId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerCount": { - "anyOf": [ - { - "const": 2, - "type": "number" - }, - { - "const": 3, - "type": "number" - }, - { - "const": 4, - "type": "number" - } - ] - }, - "teamBattle": { - "type": "boolean" - }, - "terrainLayoutId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "twistId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "limit", - "missionPackId", - "terrainLayoutId", - "twistId", - "clockLimitMinutes" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reset-setup", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "detach-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "eventToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "lock-league-rosters", - "type": "string" - }, - "leagueToken": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "leagueToken" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-setup-step", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-attacker", - "type": "string" - } - }, - "required": [ - "kind", - "attackerId" - ], - "type": "object" - }, - { - "properties": { - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-first-turn", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "disposition": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-side-disposition", - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "disposition" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "attach-roster", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "prep": { - "anyOf": [ - { - "properties": { - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "roster": { - "properties": { - "built": { - "properties": { - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "detachment": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "detachmentIds": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "maxItems": 3, - "type": "array" - }, - "detachmentPointBudget": { - "anyOf": [ - { - "maximum": 3, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "detachments": { - "items": { - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "points": { - "anyOf": [ - { - "maximum": 3, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name", - "points" - ], - "type": "object" - }, - "maxItems": 3, - "type": "array" - }, - "disposition": { - "anyOf": [ - { - "maxLength": 64, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "limit": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "picks": { - "items": { - "properties": { - "attachedTo": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "catalogueId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "choices": { - "additionalProperties": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 60, - "minimum": 1, - "type": "integer" - }, - "spreads": { - "additionalProperties": { - "additionalProperties": { - "maximum": 60, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 64, - "type": "string" - }, - "type": "object" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - }, - "toggles": { - "additionalProperties": { - "maximum": 1, - "minimum": 0, - "type": "integer" - }, - "propertyNames": { - "maxLength": 400, - "type": "string" - }, - "type": "object" - } - }, - "required": [ - "entryId" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "revision": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "strategicReserveLimit": { - "maximum": 5000, - "minimum": 0, - "type": "integer" - }, - "units": { - "items": { - "properties": { - "attachedTo": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "enhancements": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "entryId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "formationOptions": { - "items": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "maxItems": 4, - "type": "array" - }, - "group": { - "enum": [ - "epic-hero", - "character", - "battleline", - "infantry", - "swarm", - "mounted", - "beast", - "monster", - "vehicle", - "drone", - "transport", - "fortification", - "other" - ], - "type": "string" - }, - "joined": { - "items": { - "properties": { - "label": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "label", - "name" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "models": { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "points": { - "maximum": 10000, - "minimum": 0, - "type": "integer" - }, - "prebattleRules": { - "items": { - "enum": [ - "infiltrators", - "scouts" - ], - "type": "string" - }, - "maxItems": 2, - "type": "array" - }, - "strategicReserveExempt": { - "type": "boolean" - }, - "transport": { - "type": "boolean" - }, - "transportRule": { - "maxLength": 4000, - "type": "string" - }, - "upgrades": { - "items": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "maxItems": 20, - "type": "array" - }, - "wargear": { - "items": { - "properties": { - "count": { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name", - "count" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "warlord": { - "type": "boolean" - }, - "warlordEligible": { - "type": "boolean" - }, - "wounds": { - "maximum": 100, - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "key", - "name", - "points", - "models" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - }, - "waivedRules": { - "items": { - "enum": [ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 8, - "type": "array" - } - }, - "required": [ - "catalogueId", - "revision", - "limit", - "detachment", - "disposition", - "units" - ], - "type": "object" - }, - "id": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "type": "string" - }, - "reminders": { - "items": { - "properties": { - "ability": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "description": { - "maxLength": 10000, - "type": "string" - }, - "key": { - "maxLength": 240, - "minLength": 1, - "type": "string" - }, - "timings": { - "items": { - "oneOf": [ - { - "properties": { - "moment": { - "enum": [ - "phase-start", - "phase-end" - ], - "type": "string" - }, - "phase": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight" - ], - "type": "string" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - }, - { - "properties": { - "moment": { - "enum": [ - "turn-start", - "turn-end" - ], - "type": "string" - }, - "phase": { - "type": "null" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "moment", - "phase", - "turn" - ], - "type": "object" - } - ] - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "unit": { - "properties": { - "index": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "index", - "name" - ], - "type": "object" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 100, - "type": "array" - }, - "remindersEnabled": { - "type": "boolean" - }, - "text": { - "maxLength": 20000, - "type": "string" - } - }, - "required": [ - "name", - "text" - ], - "type": "object" - } - }, - "required": [ - "kind", - "roster" - ], - "type": "object" - }, - { - "properties": { - "destroyed": { - "type": "boolean" - }, - "kind": { - "const": "set-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "destroyed" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-prep", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "primary": { - "anyOf": [ - { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 6, - "type": "array" - }, - "secondaryDeck": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 60, - "type": "array" - }, - "secondaryMode": { - "enum": [ - "fixed", - "tactical" - ], - "type": "string" - }, - "stratagems": { - "items": { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "detachment": { - "maxLength": 249, - "minLength": 1, - "type": "string" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "limit": { - "enum": [ - "phase", - "turn", - "battle", - "unlimited" - ], - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - "phases": { - "items": { - "enum": [ - "command", - "movement", - "shooting", - "charge", - "fight", - "end" - ], - "type": "string" - }, - "maxItems": 6, - "type": "array" - }, - "turn": { - "enum": [ - "your-turn", - "opponent-turn", - "either" - ], - "type": "string" - } - }, - "required": [ - "key", - "name", - "cp", - "limit" - ], - "type": "object" - }, - "maxItems": 48, - "type": "array" - } - }, - "required": [ - "kind", - "stratagems", - "secondaries", - "primary", - "secondaryMode" - ], - "type": "object" - }, - { - "properties": { - "deployed": { - "type": "boolean" - }, - "kind": { - "const": "deploy-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "deployed" - ], - "type": "object" - }, - { - "properties": { - "formation": { - "enum": [ - "battlefield", - "strategic-reserves", - "deep-strike", - "embarked" - ], - "type": "string" - }, - "kind": { - "const": "set-unit-formation", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "transportKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "formation" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-painted", - "type": "string" - }, - "painted": { - "type": "boolean" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "painted" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "wound-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "damage-unit", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "unitKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "unitKey", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-deployment", - "type": "string" - }, - "patternId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "kind", - "patternId" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "set-battlefield", - "type": "string" - }, - "patternId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "terrainLayoutId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "patternId", - "terrainLayoutId" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "use-stratagem", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key" - ], - "type": "object" - }, - { - "properties": { - "cp": { - "maximum": 6, - "minimum": 0, - "type": "integer" - }, - "kind": { - "const": "use-new-orders", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "secondaryKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "stratagemKey": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "stratagemKey", - "secondaryKey", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "score-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "key", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "score-settlement", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "round": { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - "scores": { - "items": { - "oneOf": [ - { - "properties": { - "category": { - "const": "primary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "category": { - "const": "secondary", - "type": "string" - }, - "delta": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "const": "achieved", - "type": "string" - } - }, - "required": [ - "category", - "key", - "delta" - ], - "type": "object" - } - ] - }, - "maxItems": 31, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "kind", - "scores" - ], - "type": "object" - }, - { - "properties": { - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "set-secondary-status", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "status": { - "enum": [ - "active", - "achieved", - "discarded", - "returned" - ], - "type": "string" - } - }, - "required": [ - "kind", - "key", - "status" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondary", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "draw-secondaries", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondaries": { - "items": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - }, - "maxItems": 2, - "minItems": 1, - "type": "array" - }, - "selected": { - "const": true, - "type": "boolean" - } - }, - "required": [ - "kind", - "secondaries" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-draw", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "acknowledge-scoring", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "select-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "secondary": { - "properties": { - "awards": { - "items": { - "properties": { - "criteria": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "cumulative": { - "type": "boolean" - }, - "group": { - "anyOf": [ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "max": { - "anyOf": [ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "mode": { - "anyOf": [ - { - "maxLength": 40, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "per": { - "anyOf": [ - { - "maxLength": 200, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "trigger": { - "properties": { - "phase": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "playerTurn": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roundMax": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "roundMin": { - "anyOf": [ - { - "maximum": 5, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "timing": { - "anyOf": [ - { - "maxLength": 80, - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "timing", - "phase", - "playerTurn", - "roundMin", - "roundMax" - ], - "type": "object" - }, - "vp": { - "maximum": 100, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "vp", - "per", - "mode", - "max", - "group", - "cumulative", - "criteria", - "trigger" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - }, - "key": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "name": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "key", - "name" - ], - "type": "object" - } - }, - "required": [ - "kind", - "secondary" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reveal-secret", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "attackerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "firstPlayerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "begin-battle", - "type": "string" - } - }, - "required": [ - "kind", - "firstPlayerId" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "adjust-cp", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "delta" - ], - "type": "object" - }, - { - "properties": { - "gainCp": { - "type": "boolean" - }, - "keys": { - "items": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "type": "array" - }, - "kind": { - "const": "resolve-tactical-hand", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "category": { - "enum": [ - "primary", - "secondary" - ], - "type": "string" - }, - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "score", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "category", - "delta" - ], - "type": "object" - }, - { - "properties": { - "delta": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "kind": { - "const": "correct-player", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "resource": { - "enum": [ - "cp", - "primary", - "secondary" - ], - "type": "string" - } - }, - "required": [ - "kind", - "playerId", - "resource", - "delta" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "settle-opponent-turn", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "request-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "cancel-advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "advance", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "pause-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "resume-clock", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "concededBy": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "end-battle", - "type": "string" - }, - "reason": { - "enum": [ - "completed", - "finished-early", - "conceded" - ], - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "reopen-battle", - "type": "string" - } - }, - "required": [ - "kind" - ], - "type": "object" - }, - { - "properties": { - "kind": { - "const": "undo", - "type": "string" - }, - "target": { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - } - }, - "required": [ - "kind", - "target" - ], - "type": "object" - } - ] - }, - { - "additionalProperties": false, - "properties": { - "kind": { - "const": "attach-saved-roster", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "rosterId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "kind", - "rosterId" - ], - "type": "object" - } -]New value: +[ + { + "oneOf": [ + { + "properties": { + "clockLimitMinutes": { + "anyOf": [ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "configure-battle", + "type": "string" + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "missionPackId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerCount": { + "anyOf": [ + { + "const": 2, + "type": "number" + }, + { + "const": 3, + "type": "number" + }, + { + "const": 4, + "type": "number" + } + ] + }, + "teamBattle": { + "type": "boolean" + }, + "terrainLayoutId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "twistId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "limit", + "missionPackId", + "terrainLayoutId", + "twistId", + "clockLimitMinutes" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reset-setup", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "detach-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "eventToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "lock-league-rosters", + "type": "string" + }, + "leagueToken": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "leagueToken" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-setup-step", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-attacker", + "type": "string" + } + }, + "required": [ + "kind", + "attackerId" + ], + "type": "object" + }, + { + "properties": { + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-first-turn", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "disposition": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-side-disposition", + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "disposition" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "attach-roster", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "prep": { + "anyOf": [ + { + "properties": { + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "roster": { + "properties": { + "built": { + "properties": { + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "detachment": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "detachmentIds": { + "items": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "maxItems": 3, + "type": "array" + }, + "detachmentPointBudget": { + "anyOf": [ + { + "maximum": 3, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "detachments": { + "items": { + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "points": { + "anyOf": [ + { + "maximum": 3, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "points" + ], + "type": "object" + }, + "maxItems": 3, + "type": "array" + }, + "disposition": { + "anyOf": [ + { + "maxLength": 64, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "limit": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "picks": { + "items": { + "properties": { + "attachedTo": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "catalogueId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "choices": { + "additionalProperties": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 60, + "minimum": 1, + "type": "integer" + }, + "spreads": { + "additionalProperties": { + "additionalProperties": { + "maximum": 60, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 64, + "type": "string" + }, + "type": "object" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + }, + "toggles": { + "additionalProperties": { + "maximum": 1, + "minimum": 0, + "type": "integer" + }, + "propertyNames": { + "maxLength": 400, + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "entryId" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "revision": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "strategicReserveLimit": { + "maximum": 5000, + "minimum": 0, + "type": "integer" + }, + "units": { + "items": { + "properties": { + "attachedTo": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "enhancements": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "entryId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "formationOptions": { + "items": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + "group": { + "enum": [ + "epic-hero", + "character", + "battleline", + "infantry", + "swarm", + "mounted", + "beast", + "monster", + "vehicle", + "drone", + "transport", + "fortification", + "other" + ], + "type": "string" + }, + "joined": { + "items": { + "properties": { + "label": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "label", + "name" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "models": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "points": { + "maximum": 10000, + "minimum": 0, + "type": "integer" + }, + "prebattleRules": { + "items": { + "enum": [ + "infiltrators", + "scouts" + ], + "type": "string" + }, + "maxItems": 2, + "type": "array" + }, + "strategicReserveExempt": { + "type": "boolean" + }, + "transport": { + "type": "boolean" + }, + "transportRule": { + "maxLength": 4000, + "type": "string" + }, + "upgrades": { + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + "wargear": { + "items": { + "properties": { + "count": { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "count" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "warlord": { + "type": "boolean" + }, + "warlordEligible": { + "type": "boolean" + }, + "wounds": { + "maximum": 100, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "key", + "name", + "points", + "models" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + }, + "waivedRules": { + "items": { + "enum": [ + "points-limit", + "detachments", + "detachment-points", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 8, + "type": "array" + } + }, + "required": [ + "catalogueId", + "revision", + "limit", + "detachment", + "disposition", + "units" + ], + "type": "object" + }, + "id": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "type": "string" + }, + "reminders": { + "items": { + "properties": { + "ability": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "description": { + "maxLength": 10000, + "type": "string" + }, + "key": { + "maxLength": 240, + "minLength": 1, + "type": "string" + }, + "timings": { + "items": { + "oneOf": [ + { + "properties": { + "moment": { + "enum": [ + "phase-start", + "phase-end" + ], + "type": "string" + }, + "phase": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight" + ], + "type": "string" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + }, + { + "properties": { + "moment": { + "enum": [ + "turn-start", + "turn-end" + ], + "type": "string" + }, + "phase": { + "type": "null" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "moment", + "phase", + "turn" + ], + "type": "object" + } + ] + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "unit": { + "properties": { + "index": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "index", + "name" + ], + "type": "object" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 100, + "type": "array" + }, + "remindersEnabled": { + "type": "boolean" + }, + "text": { + "maxLength": 20000, + "type": "string" + } + }, + "required": [ + "name", + "text" + ], + "type": "object" + } + }, + "required": [ + "kind", + "roster" + ], + "type": "object" + }, + { + "properties": { + "destroyed": { + "type": "boolean" + }, + "kind": { + "const": "set-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "destroyed" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-prep", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "primary": { + "anyOf": [ + { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 6, + "type": "array" + }, + "secondaryDeck": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 60, + "type": "array" + }, + "secondaryMode": { + "enum": [ + "fixed", + "tactical" + ], + "type": "string" + }, + "stratagems": { + "items": { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "detachment": { + "maxLength": 249, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "limit": { + "enum": [ + "phase", + "turn", + "battle", + "unlimited" + ], + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "phases": { + "items": { + "enum": [ + "command", + "movement", + "shooting", + "charge", + "fight", + "end" + ], + "type": "string" + }, + "maxItems": 6, + "type": "array" + }, + "turn": { + "enum": [ + "your-turn", + "opponent-turn", + "either" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "cp", + "limit" + ], + "type": "object" + }, + "maxItems": 48, + "type": "array" + } + }, + "required": [ + "kind", + "stratagems", + "secondaries", + "primary", + "secondaryMode" + ], + "type": "object" + }, + { + "properties": { + "deployed": { + "type": "boolean" + }, + "kind": { + "const": "deploy-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "deployed" + ], + "type": "object" + }, + { + "properties": { + "formation": { + "enum": [ + "battlefield", + "strategic-reserves", + "deep-strike", + "embarked" + ], + "type": "string" + }, + "kind": { + "const": "set-unit-formation", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "transportKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "formation" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-painted", + "type": "string" + }, + "painted": { + "type": "boolean" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "painted" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "wound-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "damage-unit", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "unitKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "unitKey", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-deployment", + "type": "string" + }, + "patternId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "kind", + "patternId" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "set-battlefield", + "type": "string" + }, + "patternId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "terrainLayoutId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "patternId", + "terrainLayoutId" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "use-stratagem", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key" + ], + "type": "object" + }, + { + "properties": { + "cp": { + "maximum": 6, + "minimum": 0, + "type": "integer" + }, + "kind": { + "const": "use-new-orders", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "secondaryKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "stratagemKey": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "stratagemKey", + "secondaryKey", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "score-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "key", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "score-settlement", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "round": { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + "scores": { + "items": { + "oneOf": [ + { + "properties": { + "category": { + "const": "primary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "category": { + "const": "secondary", + "type": "string" + }, + "delta": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "const": "achieved", + "type": "string" + } + }, + "required": [ + "category", + "key", + "delta" + ], + "type": "object" + } + ] + }, + "maxItems": 31, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "kind", + "scores" + ], + "type": "object" + }, + { + "properties": { + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "set-secondary-status", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "active", + "achieved", + "discarded", + "returned" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "status" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondary", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "draw-secondaries", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondaries": { + "items": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + }, + "selected": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "kind", + "secondaries" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-draw", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "acknowledge-scoring", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "select-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "secondary": { + "properties": { + "awards": { + "items": { + "properties": { + "criteria": { + "anyOf": [ + { + "maxLength": 2000, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cumulative": { + "type": "boolean" + }, + "group": { + "anyOf": [ + { + "maxLength": 100, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "max": { + "anyOf": [ + { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "mode": { + "anyOf": [ + { + "maxLength": 40, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "per": { + "anyOf": [ + { + "maxLength": 200, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "trigger": { + "properties": { + "phase": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "playerTurn": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roundMax": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "roundMin": { + "anyOf": [ + { + "maximum": 5, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "timing": { + "anyOf": [ + { + "maxLength": 80, + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "timing", + "phase", + "playerTurn", + "roundMin", + "roundMax" + ], + "type": "object" + }, + "vp": { + "maximum": 100, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "vp", + "per", + "mode", + "max", + "group", + "cumulative", + "criteria", + "trigger" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + }, + "key": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "secondary" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reveal-secret", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "attackerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "firstPlayerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "begin-battle", + "type": "string" + } + }, + "required": [ + "kind", + "firstPlayerId" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "adjust-cp", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "delta" + ], + "type": "object" + }, + { + "properties": { + "gainCp": { + "type": "boolean" + }, + "keys": { + "items": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "resolve-tactical-hand", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "category": { + "enum": [ + "primary", + "secondary" + ], + "type": "string" + }, + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "score", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "category", + "delta" + ], + "type": "object" + }, + { + "properties": { + "delta": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "kind": { + "const": "correct-player", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "resource": { + "enum": [ + "cp", + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "kind", + "playerId", + "resource", + "delta" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "settle-opponent-turn", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "request-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "cancel-advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "advance", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "pause-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "resume-clock", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "concededBy": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "end-battle", + "type": "string" + }, + "reason": { + "enum": [ + "completed", + "finished-early", + "conceded" + ], + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "reopen-battle", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "undo", + "type": "string" + }, + "target": { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + } + }, + "required": [ + "kind", + "target" + ], + "type": "object" + } + ] + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "attach-saved-roster", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "rosterId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "rosterId" + ], + "type": "object" + } +]
Related MCP Connectors
Read-only access to your tabletop campaigns: codex, sessions, and session notes.
Magic: The Gathering card search, rules, rulings, deck analysis, brackets, and combo detection.
Public Upravio contract-management guides and capabilities. No private workspace access.
Characters, campaigns, adventures & worlds for D&D 5e/5.5e, Pathfinder, Savage Worlds, Fate, & more.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceGives LLMs structured access to Warhammer 40,000 (10th edition) game data: faction lists, unit datasheets, stratagems, detachments and enhancements.MIT
- AlicenseAqualityAmaintenanceWarhammer Oracle is an MCP server that gives AI assistants accurate Warhammer 40K, Combat Patrol, and Kill Team rules, unit stats, and game flow - so they stop hallucinating rules mid-game. It contains 6 tools (lookup, search, compare units, keywords, phases) covering 2,642 40K units and 506 Kill Team operatives across 48 factions.14690 npm11MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to pull live, keyless worldstate data — the Plains of Eidolon day/night cycle, Cambion Drift, Orb Vallis, the daily Sortie, Baro Ki'Teer, active Void Fissures and Invasions — and to fuzzy-search item data such as warframes, weapons and mods. It can be reached through MCP clients, a scoped gateway endpoint, or directly over HTTP.5 npmMIT
- AlicenseNot gradedqualityFmaintenanceEnables long-form tabletop narrative play with durable campaigns, profiles, conflict phases, and branching storylines. Provides session-scoped MCP tools for lobby and play phases, including administrator controls for access, snapshots, and branches.Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.