Praetorium
Server Details
Read-only access to Praetorium’s verified game reference. Search missions, rules, factions, and datasheets, or retrieve structured data for roster planning with source attribution.
- Status
- Healthy
- Uptime
- 99.9% over 34 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 15 tools
The battle and roster tools are clearly distinct, but the reference cluster (list_reference, list_factions, search_reference, get_reference, get_reference_record) has genuinely fuzzy boundaries — list_factions duplicates a stated capability of list_reference, and get_reference vs get_reference_record differ only by 'excerpt document' vs 'structured record.' The descriptions help sort them out, but an agent still has to read carefully to pick the right entry point.
Every tool follows a clean verb_noun snake_case pattern (create_battle, get_my_battle, list_my_rosters, search_reference, simulate_combat, submit_battle_action). The 'my_' infix is applied consistently to the signed-in-player variants, making ownership scoping predictable.
15 tools for a domain spanning rosters, battles, rules reference, and combat simulation is well-scoped and sits at the top of the sensible range. Each area gets a small, purposeful cluster rather than a sprawl of one-off endpoints.
Roster and reference surfaces are strong (list/get/save/visibility plus layered reference lookup), but there are real dead ends: no delete_roster, no way to conclude or report a finished battle, and no join/seat-management operation to complement create_battle. Battle flow effectively stops at create + sit + append actions.
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 | ||
| fixture | No | ||
| groupToken | 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 state readOnlyHint=false, destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is largely covered. The description adds useful auth context with 'Requires mcp:write,' but it does not explain what the destructive hint means in practice or what side effects creation has.
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 two short sentences and front-loads the core action. The phrase 'using the same rules as the site' is vague, but it does not bloat the definition.
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 10-parameter mutation tool with no schema descriptions and no output schema, the description is far too sparse. It covers purpose and write permission, but leaves parameter usage, required combinations, and behavioral consequences largely 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 description coverage is 0% across 10 parameters, so the description must carry the burden. It only loosely hints at player seats via 'named player seats' and never explains any parameter names, formats, defaults, or valid combinations such as guestNames, opponentIds, casual, manual, or missionPackId.
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 clear verb and resource: 'Creates a battle,' and adds that it uses named player seats. This distinguishes it from read/list siblings, though it does not explicitly contrast with related tools like save_roster or submit_battle_action.
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 usage-related detail is the prerequisite 'Requires mcp:write.' There is no guidance on when to use create_battle versus alternatives such as simulate_combat or submit_battle_action, nor any exclusions or preconditions beyond the write scope.
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=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by stating the authorization requirement (mcp:read) and that the view is current/seated, but it does not explain error behavior or return characteristics.
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 purpose and followed by the permission requirement. There is no wasted text and the key information is easy to locate.
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 one-parameter read tool, the description explains the action and permission requirement but omits the only parameter entirely. With no output schema and no parameter documentation in the schema, an agent still lacks guidance on what token to supply and what the "seated view" return will contain.
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 has one required parameter, token, and schema description coverage is 0%. The description does not mention the token parameter at all, so it does not clarify whether the token identifies the battle, represents an auth token, or has any format constraints beyond what the schema silently enforces.
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 names a specific verb ("Returns") and resource ("battle") and scopes it to the signed-in player. It is clear this reads one battle rather than listing battles, but it does not explicitly differentiate itself from the closest sibling, 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?
The description provides no guidance on when to use this tool versus list_my_battles, submit_battle_action, or other battle-related siblings. The signed-in-player scope is useful context, but not an explicit usage rule or exclusion.
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 one roster owned by the signed-in player, by an id from list_my_rosters. summary names each unit with its points, models, wargear, enhancements, Warlord and attachments, and gives the total and any problems that stop the list being fielded; it is null while army data is unavailable. roster holds the saved choices by catalogue id, the shape save_roster takes. 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, so the safety profile is covered; the description goes beyond by adding the required scope mcp:read and the conditional-null behavior of summary when army data is unavailable. It does not describe the failure mode when an id is missing or unauthorized, which is the main remaining behavioral gap.
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 dense sentences, front-loaded with the return contract and ending on the auth requirement. The middle sentence is a long enumeration of summary contents but every item is a field the caller will encounter, so it earns its length.
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, the description correctly takes on the return contract: it names both top-level parts (summary, roster), the null condition, and cross-references save_roster for the shape of a roster rather than re-documenting it. A brief note on what happens for an unknown/inaccessible id is the only material omission.
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%, so the description must carry the parameter meaning, and it does: the single id identifies a roster owned by the caller and should come from list_my_rosters, which is exactly the provenance an agent needs. It adds no format or bounds detail beyond the schema's min/max length, but the provenance guidance is the non-obvious part.
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 concrete verb (returns) and resource (one roster), scoped to the signed-in player and keyed by an id drawn from list_my_rosters. An agent can immediately distinguish this from list_my_rosters (list vs. single) and save_roster (write).
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?
'by an id from list_my_rosters' names the sibling to call first and thereby establishes the lookup sequence, and 'owned by the signed-in player' rules out cross-user reads. It stops short of stating what happens when the id is unknown or not owned, or naming an explicit alternative for that case.
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 | A reference id such as datasheet:necrons:necron-warriors: a result id from search_reference, a mission pack id from list_reference, or a referenceId from list_units or simulate_combat. Names, URLs, and unit ids are not reference ids. |
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 readOnly/idempotent/non-destructive, and the description adds real behavior beyond them: the document is bounded, includes revisions and attribution, and sections may withhold rules text while exposing textSources with a pinned upstream file and record id. That withholding behavior is the kind of thing an agent could not infer. It omits error behavior for ids that don't resolve.
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 what is returned, followed by the one non-obvious edge case. Nothing is wasted and nothing important is buried.
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 and annotations covering safety, the description correctly focuses on the withheld-text path rather than return shapes. The remaining gap is the lack of differentiation from get_reference_record, a sibling whose name strongly overlaps.
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 'id' parameter and its accepted sources are fully documented in the schema itself. The description adds no format or validation detail beyond that, 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 ('Reads the complete bounded document... with its revisions and attribution') and anchors it to the sibling that produces the id (search_reference). It does not differentiate itself from the sibling get_reference_record, which an agent must distinguish by name alone.
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?
Clear usage context: this is the fetch step that follows search_reference, and it names the fallback path (textSources) for withheld rules text. It stops short of stating when to use get_reference_record instead, so exclusions are missing.
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 | A reference id such as datasheet:necrons:necron-warriors: a result id from search_reference, a mission pack id from list_reference, or a referenceId from list_units or simulate_combat. Names, URLs, and unit ids are not reference ids. |
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, so the safety profile is covered. The description adds genuine behavioral context beyond that: that records withholding rules text expose textSources pointing at a pinned upstream file and record id, which tells the agent to expect partial payloads rather than missing data.
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 with the core action front-loaded and the textSources caveat second. No filler, though the payload enumeration in sentence one is slightly 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?
With an output schema present, the description needn't detail return shapes, and it correctly focuses on what the record contains plus the withheld-rules-text behavior. The one real gap is failing to clarify its relationship to the get_reference sibling.
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 id parameter already documents its accepted sources (search_reference, list_reference, list_units, simulate_combat, datasheet: prefix) and explicitly excludes names, URLs, and unit ids. The description adds nothing further on the parameter, so the 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 payload categories (mission cards, deployments, terrain geometry, detachments, datasheets). However, it never distinguishes itself from the sibling get_reference, which by name sounds nearly identical, leaving the agent to guess which to call.
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 caller arrives from search_reference, and the id schema hints at list_units/simulate_combat provenance. But there is no explicit when-to-use or when-not statement, and no guidance versus get_reference or list_reference.
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, destructiveHint=false and closed-world, so the safety profile is fully covered and the description doesn't contradict it. The description adds the functional context that factions serve as filter values, but says nothing about whether the set is static, how large it is, or whether it is exhaustive, which would help an agent decide between listing and querying.
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 sentence that front-loads the resource and immediately supplies the reason to call it. No filler, no restatement 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?
With an output schema present, the description need not explain return values, and a zero-parameter read tool needs little more. What is missing is the tie-in to the specific sibling (search_reference) that consumes these faction values, which would close the loop for an agent.
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 are zero parameters, so the baseline is 4 and there is no schema surface for the description to compensate for. The schema is an empty object and the description correctly describes a no-argument enumeration call.
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 opens with a specific verb and resource ('Lists the factions') and adds the role those results play ('narrow reference searches'), which separates it from list_units and list_reference. It never names a sibling explicitly, so differentiation is inferred from the subject matter rather than stated.
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 'can be used to narrow reference searches' implies the tool is called to obtain filter values before search_reference or list_reference, but that workflow is never spelled out and no alternative is named. Usage is implied rather than prescribed.
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/non-destructive, and the description adds two things they don't cover: the 25-item page cap with cursor continuation and the required mcp:read scope. That is genuine context beyond structured fields, though return shape remains unspecified.
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 terse sentences, zero filler, with the page-size limit front-loaded and the permission requirement trailing as a prerequisite.
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-required-parameter read tool with no output schema, the definition covers count, pagination, and auth. A slightly fuller account of what a battle record contains or how to source the cursor's at/id 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?
Schema coverage is 0% and the single parameter is an object named 'before' holding at/id fields. The description mentions 'a cursor for the next page' but never ties it to the 'before' parameter or explains how to obtain its at/id values, so it only partially compensates for the undocumented schema.
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 clear verb and resource (lists battles) with implicit 'my' scope and page size. An agent can tell it apart from get_my_battle or list_my_rosters, though it never spells out that it returns only the caller's 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?
No guidance on when to use this versus get_my_battle or other list tools, and no mention of when pagination is needed. The only conditional statement is the auth requirement.
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 readOnly, idempotent, non-destructive, closed-world behavior, so the description's burden is lighter. It adds a concrete, non-schema behavioral requirement — 'Requires mcp:read' — which the agent cannot get from annotations. It stops short of describing result shape or whether all rosters are returned unscoped.
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 with zero waste; the resource and scope come first, the auth prerequisite second. Nothing is repeated from the title or annotations.
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 parameters, no output schema, and full annotation coverage, the description supplies what an agent needs to select and call it, plus an auth scope note. A brief mention of return contents or result completeness would close the last 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 per the baseline rule the description need not document parameter semantics. Nothing in the description misleads about inputs.
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+resource and scope ('rosters saved to the signed-in Praetorium account'), which is more precise than the title alone. It distinguishes itself implicitly from get_my_roster (singular) and save_roster by being a listing, but never names those siblings.
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 by 'lists the rosters saved to the signed-in account' — an agent can infer this is the enumeration tool rather than a detail fetch. However, it gives no explicit when-to-use vs get_my_roster or list_my_battles, and no exclusions or follow-up routing.
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?
The annotations already declare this as a read-only, idempotent, non-destructive, closed-world operation, so the safety profile is covered. The description adds only the content scope of the catalogue and does not describe pagination, ordering, authentication, or other behavioral constraints.
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 redundant or filler language. Every listed item contributes to describing the catalogue contents.
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 no-parameter catalogue-listing tool with rich annotations and an output schema, the description is largely complete. It could mention that it takes no arguments or how the catalogue is organized, but the output schema can carry return details.
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 has zero parameters, so there is no parameter semantics burden for the description to compensate for. Baseline 4 is appropriate.
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 names a specific catalogue resource and enumerates the kinds of entries it discovers (factions, mission packs, rule documents, reference kinds, active source revisions). It is clear what the tool returns, though it does not explicitly differentiate itself from siblings like list_factions or search_reference.
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 description implies a discovery/catalogue-browsing use case, but it does not state when to use this tool instead of get_reference, search_reference, or list_factions. No exclusions or prerequisites are provided.
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, including one a chapter takes from its codex, to list only the units it allows and 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. A unit’s points is what its smallest size costs in this battle size and detachment, including any wargear or enhancement the detachment makes it take; costs is the Munitorum Field Manual table for every size. Legends and Crucible datasheets are left out unless nonMatchedPlay is true. A large faction such as a Space Marine chapter can exceed what an assistant reads at once, so pass query to list only the units whose name or keywords contain it.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | List only units whose name or keywords contain this text, such as Terminator or Character. | |
| 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. | |
| nonMatchedPlay | No | Also list Legends and Crucible datasheets, which matched play does not allow. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| units | Yes | |
| faction | Yes | |
| revisions | Yes | |
| battleSize | Yes | |
| detachment | Yes | |
| nonMatchedPlay | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description adds substantial context: Legends and Crucible are excluded unless nonMatchedPlay, rules text lives at textSources, and points vs costs are defined precisely. These are behavioral facts not present in 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?
Front-loaded with the core return behavior and dense with useful detail, with little filler. The points/costs sentence is long and slightly convoluted, costing a bit of readability.
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 needn't explain return shape, and it still covers filtering, exclusions, detachment semantics, and size-dependent cost behavior. An agent has everything needed to call it correctly.
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 baseline is 3, but the description goes beyond the schema by clarifying that query matches name or keywords, that detachment scopes results to allowed units, and by distinguishing 'points' from 'costs'. This adds real meaning over the field descriptions.
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 first sentence states a specific verb and resource ('Returns every pickable unit') plus the exact fields returned and that the response is bounded. This is clearly distinguishable from reference-listing siblings like list_reference or list_factions.
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 concrete conditions: include a detachment to list only its allowed units, and pass query for large factions that exceed a single read. It does not explicitly name sibling alternatives, but the internal query/no-query and detachment/no-detachment guidance is clear.
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 flag destructiveHint and non-idempotency, and the description adds value beyond that: the mcp:write scope requirement and the subtle preservation behavior of omitting pointsBudget. It does not state that the entire roster payload (picks, prep) is replaced wholesale, which is the main destructive consequence an agent should know.
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?
Four dense sentences, each covering a distinct behavioral rule, with the create/edit distinction front-loaded. No filler, though the limit sentence packs several constraints together and is slightly harder to parse than necessary.
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 destructive write with no output schema and no schema descriptions, the description covers the highest-risk semantics (mode selection, battle size, budget override, auth) but leaves the bulk of the payload — picks structure, prep, detachmentIds, waivedRules — entirely unexplained. Adequate to avoid a wrong mode, not adequate to build a valid request from description alone.
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%, so the description must compensate, and it does so well for limit (enumerating 1000/2000/3000, 600 for King of the Colosseum — information absent from the bare integer schema) and pointsBudget. However, only 3 of 14 parameters are addressed; name, catalogueId, detachmentIds, disposition, picks, prep, source, visibility, waivedRules and borrowedDetachmentId get no semantic help 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?
"Saves a complete roster" is a specific verb+resource, and the description immediately splits the two modes (pass id to edit an owned roster, omit to create). This cleanly separates it from read-side siblings like get_my_roster and list_my_rosters.
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?
Explicit branching rules for id (edit vs create) and for pointsBudget (omit = keep saved budget, null = standard total), which is exactly the kind of conditional guidance an agent needs. It does not mention when to use the visible sibling set_roster_visibility instead of embedding visibility here, so it stops short of full alternative routing.
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 declare readOnly/idempotent/non-destructive, so the description is free to add real behavioral context, which it does: bounded excerpts, canonical URLs, source revisions, attribution, and the important limitation that rules text itself is not returned and records point upstream. It stops short of describing pagination or result-ordering 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?
Three tight sentences, front-loaded with what is searched, followed by what comes back and the key limitation. No filler or redundant restatement 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?
An output schema exists, so return values needn't be spelled out, and the description still usefully characterizes the payload and its upstream pointers. The main omission is pagination and the scoping parameters (pack, faction, document, cursor), which leaves the agent guessing how to narrow or page large result sets.
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 only 14%, so the description must carry more weight. It does add meaning for 'query' (name, rule number, ability, weapon, keyword) and implies the 'kinds' filter by naming datasheets, missions, rules, and detachments, but says nothing about pack, faction, document, limit, or cursor — a third of the surface remains undocumented.
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 ('Searches Praetorium's missions, rules, detachments, and datasheets') and enumerates the lookup axes (name, number, keyword, value), so an agent knows exactly what it retrieves. It does not explicitly contrast itself with siblings like list_reference or get_reference_record, but the search framing is distinctive enough.
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: the enumerated lookup axes suggest this is the tool for query-driven discovery, and the 'rules text is not included' line hints at when to follow up elsewhere. There is no explicit when-to-use/when-not or named alternative (e.g., use list_reference to browse by kind without a query).
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 openWorldHint=true, so the description only needs to add context. It adds the auth scope requirement, which is genuinely useful, but says nothing about the consequences of flipping a roster to 'public' (exposure of data, revertibility) — a notable gap for a destructive write.
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 with zero padding, and the operation is front-loaded before the auth requirement. Efficient, though it is terse to the point of under-specifying parameters.
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 two-parameter destructive mutation with no output schema, the description covers what it does and the required scope, which is a reasonable minimum. It omits the effect of each visibility value and any warning about public exposure, which an agent would need to act safely.
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 the burden, and it does not: neither 'id' (roster identifier) nor 'visibility' (private/unlisted/public semantics and what each means for discoverability) is explained. The enum exists in the schema, but the meaning of each level is left entirely to inference.
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 ('Changes the visibility of an owned roster'), which is clearly distinct from siblings like save_roster or get_my_roster. It does not explicitly name an alternative, but the operation 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 prerequisite 'Requires mcp:write' and the ownership constraint ('owned roster') give implied guidance on when the call is valid. There is no explicit when-to-use/when-not framing or mention of alternatives such as save_roster for other roster edits.
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. Rules the simulator cannot calculate are never approximated: a phase it cannot estimate has status refused with its reasons, and recognised rules it leaves out are listed under notCalculated, so explain those gaps rather than retrying. Errors are reserved for unknown factions or units, illegal unit sizes or attachments, and unavailable reference data. It uses default loadouts, and a side fields a detachment's rules and offers its stratagems only when its detachment is named; 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 } }. commandReroll spends one Command Re-roll per phase on the first failed hit, wound, or save roll, or the first single-die Attacks roll below its average; compare with a run without it to judge the CP. | |
| 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?
Goes well beyond the readOnly/idempotent annotations: it discloses refusal semantics (a non-computable phase returns status 'refused' with reasons), the notCalculated list for recognised-but-omitted rules, and the precise error surface (unknown factions/units, illegal sizes/attachments, unavailable reference data). It also states the default-loadout assumption up front, which is exactly the hidden default an agent would otherwise misjudge results with.
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 verb/resource, then scope, then returns, then defaults and error semantics — a sensible priority order for a tool this complex. The long return enumeration is justified because no output schema exists, 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?
For a 4-parameter, deeply nested tool with no output schema, it covers inputs, defaults, refusal/error behavior, and return contents thoroughly. The gap is the unmentioned `modifiers` object, which an agent would only discover by reading the schema, leaving situational-modifier usage under-explained by the prose.
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?
With 50% schema coverage, the description compensates for the important ambiguity: rules and weaponModes keys must come from a previous result, detachment governs which rules/stratagems apply, attached units must be legal and come from canBeLedBy/canBeSupportedBy, and models must be a legal unit size. The notable omission is the entire `modifiers` object — the single largest and most semantically dense parameter — which is never mentioned in the description (only its schema blurb covers it).
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 ('Runs Praetorium's exact combat simulator') plus the exact scope: one attacker with attached leaders versus one defender at full strength, across shooting, melee, and combined sequences. An agent immediately knows this is a deterministic estimate tool, not a battle-action or roster tool, distinguishing it from every sibling.
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?
Explicitly says passive datasheet rules apply by default while stratagems and conditional rules stay off until chosen, and that a side only gets detachment rules/stratagems when a detachment is named. It also gives a strong operating instruction for gaps: 'explain those gaps rather than retrying,' and enumerates what errors are reserved for. Missing only an explicit pointer to which sibling produces the legal inputs (list_units is named in the schema, not the description).
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 state that this is a non-read-only, non-idempotent, destructive operation. The description adds useful behavioral context beyond annotations: it appends rather than overwrites, enforces optimistic concurrency via expectedSeq, and requires mcp:write. It remains silent on failure behavior and return semantics, but it is consistent with 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?
The description is two tightly written sentences with the core operation and the sequence precondition front-loaded. There is 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?
This is a complex mutation tool whose command parameter has dozens of possible shapes, with no schema descriptions and no output schema. The description covers auth and expectedSeq but omits command-kind semantics, mismatch handling, and return behavior, so it is not complete enough for safe invocation.
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 compensate. It clarifies expectedSeq as a concurrency token and implies command is a battle command, but it never explains token or the many command variants in the large anyOf schema. The parameter guidance is therefore far too thin for this schema.
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 uses a specific verb and resource: 'Appends a legal battle command'. It also adds the key execution condition that the append happens only when expectedSeq matches the current log. It does not explicitly distinguish this tool from siblings such as create_battle or simulate_combat, so it falls 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?
The description gives an important precondition: use only when expectedSeq matches the current log, and it notes the mcp:write requirement. However, it does not explain when to choose this tool over alternatives like create_battle or simulate_combat, nor does it describe what to do when the sequence check fails.
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.
1 tool update
- Changed
create_battle2 fields changed- removed
Input schema / properties / clubTokenRemoved value: -{ - "maxLength": 64, - "minLength": 1, - "type": "string" -} - added
Input schema / properties / groupTokenAdded value: +{ + "maxLength": 64, + "minLength": 1, + "type": "string" +}
1 tool update
- Changed
simulate_combat4 fields changed- changed
Input schema / properties / modifiers / descriptionPrevious value: -"Situational modifiers the simulator page offers, such as { \"all\": { \"cover\": true, \"hitModifier\": -1 } }, { \"melee\": { \"charged\": true } }, or { \"target\": { \"invulnerable\": 4 } }."New value: +"Situational modifiers the simulator page offers, such as { \"all\": { \"cover\": true, \"hitModifier\": -1 } }, { \"melee\": { \"charged\": true } }, or { \"target\": { \"invulnerable\": 4 } }. commandReroll spends one Command Re-roll per phase on the first failed hit, wound, or save roll, or the first single-die Attacks roll below its average; compare with a run without it to judge the CP." - added
Input schema / properties / modifiers / properties / all / properties / commandRerollAdded value: +{ + "enum": [ + "attacks", + "hit", + "wound", + "save", + "damage" + ], + "type": "string" +} - added
Input schema / properties / modifiers / properties / melee / properties / commandRerollAdded value: +{ + "enum": [ + "attacks", + "hit", + "wound", + "save", + "damage" + ], + "type": "string" +} - added
Input schema / properties / modifiers / properties / ranged / properties / commandRerollAdded value: +{ + "enum": [ + "attacks", + "hit", + "wound", + "save", + "damage" + ], + "type": "string" +}
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": { - "armyPoints": { - "anyOf": [ - { - "items": { - "maximum": 10000, - "minimum": 1, - "type": "integer" - }, - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - { - "type": "null" - } - ] - }, - "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": { - "clubId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "set-battle-club", - "type": "string" - } - }, - "required": [ - "kind", - "clubId" - ], - "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" - }, - "warlords": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "side", - "playerId" - ], - "type": "object" - }, - "maxItems": 2, - "type": "array" - } - }, - "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": { - "checked": { - "type": "boolean" - }, - "kind": { - "const": "set-setup-checked", - "type": "string" - }, - "step": { - "maximum": 9, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "step", - "checked" - ], - "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": "set-side-warlord", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "playerId" - ], - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "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" - }, - "embarkedSpace": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "embarksWithBodyguard": { - "type": "boolean" - }, - "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" - }, - "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" - }, - "startsEmbarkedIn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "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", - "warlord", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 9, - "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": 200, - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "pointsBudget": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "prep": { - "anyOf": [ - { - "properties": { - "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": 200, - "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", - "warlord", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 9, - "type": "array" - } - }, - "required": [ - "name", - "catalogueId", - "detachmentIds", - "disposition", - "limit", - "picks", - "prep" - ], - "type": "object" - }, - "kind": { - "const": "attach-draft-roster", - "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" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - } - }, - "required": [ - "kind", - "draft" - ], - "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" + }, + "objective": { + "properties": { + "key": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "name": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "name" + ], + "type": "object" + } + }, + "required": [ + "kind", + "objective" + ], + "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": { + "armyPoints": { + "anyOf": [ + { + "items": { + "maximum": 10000, + "minimum": 1, + "type": "integer" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "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": { + "clubId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "set-battle-club", + "type": "string" + } + }, + "required": [ + "kind", + "clubId" + ], + "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" + }, + "warlords": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "playerId" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + } + }, + "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": { + "checked": { + "type": "boolean" + }, + "kind": { + "const": "set-setup-checked", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step", + "checked" + ], + "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": "set-side-warlord", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "playerId" + ], + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "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" + }, + "embarkedSpace": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "embarksWithBodyguard": { + "type": "boolean" + }, + "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" + }, + "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" + }, + "startsEmbarkedIn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "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": 200, + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "pointsBudget": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "prep": { + "anyOf": [ + { + "properties": { + "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": 200, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "type": "array" + } + }, + "required": [ + "name", + "catalogueId", + "detachmentIds", + "disposition", + "limit", + "picks", + "prep" + ], + "type": "object" + }, + "kind": { + "const": "attach-draft-roster", + "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" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + } + }, + "required": [ + "kind", + "draft" + ], + "type": "object" + } +]
2 tool updates
- Changed
list_units10 fields changed- added
Input schema / properties / nonMatchedPlayAdded value: +{ + "default": false, + "description": "Also list Legends and Crucible datasheets, which matched play does not allow.", + "type": "boolean" +} - added
Input schema / properties / queryAdded value: +{ + "description": "List only units whose name or keywords contain this text, such as Terminator or Character.", + "maxLength": 160, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / nonMatchedPlayAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / queryAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / units / items / properties / costs / items / properties / copiesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / units / items / properties / costs / items / properties / detachment / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / units / items / properties / costs / items / properties / faction / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / units / items / properties / costs / items / properties / keyword / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / units / items / properties / costs / items / requiredPrevious value: -[ - "models", - "cost", - "keyword", - "faction", - "detachment" -]New value: +[ + "models", + "cost" +] - changed
Output schema / requiredPrevious value: -[ - "faction", - "battleSize", - "detachment", - "units", - "revisions" -]New value: +[ + "faction", + "battleSize", + "nonMatchedPlay", + "query", + "detachment", + "units", + "revisions" +]
- Changed
simulate_combat2 fields changed- added
Input schema / properties / attacker / properties / detachmentAdded value: +{ + "description": "Detachment id, slug, or name from list_units, to field its rules and offer its stratagems; omit it for none.", + "maxLength": 160, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / defender / properties / detachmentAdded value: +{ + "description": "Detachment id, slug, or name from list_units, to field its rules and offer its stratagems; omit it for none.", + "maxLength": 160, + "minLength": 1, + "type": "string" +}
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": { - "armyPoints": { - "anyOf": [ - { - "items": { - "maximum": 10000, - "minimum": 1, - "type": "integer" - }, - "maxItems": 2, - "minItems": 2, - "type": "array" - }, - { - "type": "null" - } - ] - }, - "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": { - "clubId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "set-battle-club", - "type": "string" - } - }, - "required": [ - "kind", - "clubId" - ], - "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" - }, - "warlords": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "side", - "playerId" - ], - "type": "object" - }, - "maxItems": 2, - "type": "array" - } - }, - "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": "set-side-warlord", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "playerId" - ], - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "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" - }, - "embarkedSpace": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "embarksWithBodyguard": { - "type": "boolean" - }, - "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" - }, - "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" - }, - "startsEmbarkedIn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "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", - "warlord", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 9, - "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": 200, - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "pointsBudget": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "prep": { - "anyOf": [ - { - "properties": { - "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": 200, - "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", - "warlord", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 9, - "type": "array" - } - }, - "required": [ - "name", - "catalogueId", - "detachmentIds", - "disposition", - "limit", - "picks", - "prep" - ], - "type": "object" - }, - "kind": { - "const": "attach-draft-roster", - "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" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - } - }, - "required": [ - "kind", - "draft" - ], - "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": { + "armyPoints": { + "anyOf": [ + { + "items": { + "maximum": 10000, + "minimum": 1, + "type": "integer" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "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": { + "clubId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "set-battle-club", + "type": "string" + } + }, + "required": [ + "kind", + "clubId" + ], + "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" + }, + "warlords": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "playerId" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + } + }, + "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": { + "checked": { + "type": "boolean" + }, + "kind": { + "const": "set-setup-checked", + "type": "string" + }, + "step": { + "maximum": 9, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "step", + "checked" + ], + "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": "set-side-warlord", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "playerId" + ], + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "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" + }, + "embarkedSpace": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "embarksWithBodyguard": { + "type": "boolean" + }, + "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" + }, + "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" + }, + "startsEmbarkedIn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "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": 200, + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "pointsBudget": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "prep": { + "anyOf": [ + { + "properties": { + "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": 200, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "type": "array" + } + }, + "required": [ + "name", + "catalogueId", + "detachmentIds", + "disposition", + "limit", + "picks", + "prep" + ], + "type": "object" + }, + "kind": { + "const": "attach-draft-roster", + "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" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + } + }, + "required": [ + "kind", + "draft" + ], + "type": "object" + } +]
1 tool update
- Changed
create_battle1 field changed- added
Input schema / properties / fixtureAdded value: +{ + "maxLength": 300, + "type": "string" +}
2 tool updates
- Changed
get_reference1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"The stable result id returned by search_reference."New value: +"A reference id such as datasheet:necrons:necron-warriors: a result id from search_reference, a mission pack id from list_reference, or a referenceId from list_units or simulate_combat. Names, URLs, and unit ids are not reference ids."
- Changed
get_reference_record1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"The stable id returned by search_reference or list_reference."New value: +"A reference id such as datasheet:necrons:necron-warriors: a result id from search_reference, a mission pack id from list_reference, or a referenceId from list_units or simulate_combat. Names, URLs, and unit ids are not reference ids."
4 tool updates
- Changed
get_reference2 fields changed- changed
Output schema / properties / sections / items / properties / textSources / descriptionPrevious value: -"Where withheld rules text lives upstream; fetch it there if you need the wording."New value: +"Where withheld rules text lives upstream: the pinned file, its source, and the id of the record holding it there when the file has one. Fetch it there if you need the wording." - added
Output schema / properties / sections / items / properties / textSources / items / properties / url / formatAdded value: +"uri"
- Changed
get_reference_record2 fields changed- changed
Output schema / properties / document / properties / sections / items / properties / textSources / descriptionPrevious value: -"Where withheld rules text lives upstream; fetch it there if you need the wording."New value: +"Where withheld rules text lives upstream: the pinned file, its source, and the id of the record holding it there when the file has one. Fetch it there if you need the wording." - added
Output schema / properties / document / properties / sections / items / properties / textSources / items / properties / url / formatAdded value: +"uri"
- Changed
list_units1 field changed- changed
Output schema / properties / units / items / properties / limit / anyOfPrevious value: -[ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
search_reference4 fields changed- added
Output schema / properties / results / items / properties / excerpt / maxLengthAdded value: +322 - added
Output schema / properties / results / items / properties / section / properties / textSources / descriptionAdded value: +"Where withheld rules text lives upstream: the pinned file, its source, and the id of the record holding it there when the file has one. Fetch it there if you need the wording." - added
Output schema / properties / results / items / properties / section / properties / textSources / items / properties / url / formatAdded value: +"uri" - added
Output schema / properties / results / maxItemsAdded value: +25
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": { - "clubId": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "kind": { - "const": "set-battle-club", - "type": "string" - } - }, - "required": [ - "kind", - "clubId" - ], - "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" - }, - "warlords": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "side", - "playerId" - ], - "type": "object" - }, - "maxItems": 2, - "type": "array" - } - }, - "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": "set-side-warlord", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "playerId" - ], - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "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" - }, - "embarkedSpace": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "embarksWithBodyguard": { - "type": "boolean" - }, - "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" - }, - "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" - }, - "startsEmbarkedIn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "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", - "warlord", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 9, - "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": 200, - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "pointsBudget": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "prep": { - "anyOf": [ - { - "properties": { - "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": 200, - "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", - "warlord", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 9, - "type": "array" - } - }, - "required": [ - "name", - "catalogueId", - "detachmentIds", - "disposition", - "limit", - "picks", - "prep" - ], - "type": "object" - }, - "kind": { - "const": "attach-draft-roster", - "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" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - } - }, - "required": [ - "kind", - "draft" - ], - "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": { + "armyPoints": { + "anyOf": [ + { + "items": { + "maximum": 10000, + "minimum": 1, + "type": "integer" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "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": { + "clubId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "set-battle-club", + "type": "string" + } + }, + "required": [ + "kind", + "clubId" + ], + "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" + }, + "warlords": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "playerId" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + } + }, + "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": "set-side-warlord", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "playerId" + ], + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "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" + }, + "embarkedSpace": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "embarksWithBodyguard": { + "type": "boolean" + }, + "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" + }, + "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" + }, + "startsEmbarkedIn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "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": 200, + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "pointsBudget": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "prep": { + "anyOf": [ + { + "properties": { + "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": 200, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "type": "array" + } + }, + "required": [ + "name", + "catalogueId", + "detachmentIds", + "disposition", + "limit", + "picks", + "prep" + ], + "type": "object" + }, + "kind": { + "const": "attach-draft-roster", + "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" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + } + }, + "required": [ + "kind", + "draft" + ], + "type": "object" + } +]
2 tool updates
- Changed
create_battle1 field changed- added
Input schema / properties / clubTokenAdded value: +{ + "maxLength": 64, + "minLength": 1, + "type": "string" +}
- 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" - }, - "warlords": { - "items": { - "properties": { - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "side", - "playerId" - ], - "type": "object" - }, - "maxItems": 2, - "type": "array" - } - }, - "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": "set-side-warlord", - "type": "string" - }, - "playerId": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "side": { - "maximum": 1, - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "kind", - "side", - "playerId" - ], - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "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" - }, - "embarkedSpace": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "embarksWithBodyguard": { - "type": "boolean" - }, - "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" - }, - "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" - }, - "startsEmbarkedIn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "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", - "warlord", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 9, - "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": 200, - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "pointsBudget": { - "anyOf": [ - { - "maximum": 10000, - "minimum": 500, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "prep": { - "anyOf": [ - { - "properties": { - "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": 200, - "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", - "warlord", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" - ], - "type": "string" - }, - "maxItems": 9, - "type": "array" - } - }, - "required": [ - "name", - "catalogueId", - "detachmentIds", - "disposition", - "limit", - "picks", - "prep" - ], - "type": "object" - }, - "kind": { - "const": "attach-draft-roster", - "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" - }, - "whileDestroyed": { - "type": "boolean" - } - }, - "required": [ - "key", - "ability", - "description", - "timings" - ], - "type": "object" - }, - "maxItems": 200, - "type": "array" - } - }, - "required": [ - "kind", - "draft" - ], - "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": { + "clubId": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "kind": { + "const": "set-battle-club", + "type": "string" + } + }, + "required": [ + "kind", + "clubId" + ], + "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" + }, + "warlords": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "playerId" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + } + }, + "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": "set-side-warlord", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "playerId" + ], + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "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" + }, + "embarkedSpace": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "embarksWithBodyguard": { + "type": "boolean" + }, + "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" + }, + "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" + }, + "startsEmbarkedIn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "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": 200, + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "pointsBudget": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "prep": { + "anyOf": [ + { + "properties": { + "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": 200, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "type": "array" + } + }, + "required": [ + "name", + "catalogueId", + "detachmentIds", + "disposition", + "limit", + "picks", + "prep" + ], + "type": "object" + }, + "kind": { + "const": "attach-draft-roster", + "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" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + } + }, + "required": [ + "kind", + "draft" + ], + "type": "object" + } +]
2 tool updates
- Changed
save_roster3 fields 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": { - "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": { + "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": 200, + "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
Input schema / properties / waivedRules / items / enumPrevious value: -[ - "points-limit", - "detachments", - "detachment-points", - "kotc-infantry", - "kotc-warlord", - "kotc-epic-heroes", - "kotc-toughness", - "kotc-datasheet-copies" -]New value: +[ + "points-limit", + "detachments", + "detachment-points", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" +] - changed
Input schema / properties / waivedRules / maxItemsPrevious value: -8New value: +9
- 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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "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" - }, - "embarkedSpace": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "embarksWithBodyguard": { - "type": "boolean" - }, - "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" - }, - "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" - }, - "startsEmbarkedIn": { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - "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" - }, - "embarkedIn": { - "maximum": 99, - "minimum": 0, - "type": "integer" - }, - "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" - }, - "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" - } -]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" + }, + "warlords": { + "items": { + "properties": { + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "side", + "playerId" + ], + "type": "object" + }, + "maxItems": 2, + "type": "array" + } + }, + "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": "set-side-warlord", + "type": "string" + }, + "playerId": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "side": { + "maximum": 1, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "kind", + "side", + "playerId" + ], + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "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" + }, + "embarkedSpace": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "embarksWithBodyguard": { + "type": "boolean" + }, + "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" + }, + "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" + }, + "startsEmbarkedIn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "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": 200, + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "pointsBudget": { + "anyOf": [ + { + "maximum": 10000, + "minimum": 500, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "prep": { + "anyOf": [ + { + "properties": { + "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": 200, + "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", + "warlord", + "kotc-infantry", + "kotc-warlord", + "kotc-epic-heroes", + "kotc-toughness", + "kotc-datasheet-copies" + ], + "type": "string" + }, + "maxItems": 9, + "type": "array" + } + }, + "required": [ + "name", + "catalogueId", + "detachmentIds", + "disposition", + "limit", + "picks", + "prep" + ], + "type": "object" + }, + "kind": { + "const": "attach-draft-roster", + "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" + }, + "whileDestroyed": { + "type": "boolean" + } + }, + "required": [ + "key", + "ability", + "description", + "timings" + ], + "type": "object" + }, + "maxItems": 200, + "type": "array" + } + }, + "required": [ + "kind", + "draft" + ], + "type": "object" + } +]
2 tool updates
- Changed
save_roster1 field changed- added
Input schema / properties / picks / items / properties / embarkedInAdded value: +{ + "maximum": 99, + "minimum": 0, + "type": "integer" +}
- 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" - }, - "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" - }, - "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" - }, - "embarkedSpace": { - "exclusiveMinimum": 0, - "maximum": 1000, - "type": "integer" - }, - "embarksWithBodyguard": { - "type": "boolean" - }, - "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" - }, - "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" - }, - "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" - }, - "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" - }, - "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" - } -]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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "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" + }, + "embarkedSpace": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "embarksWithBodyguard": { + "type": "boolean" + }, + "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" + }, + "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" + }, + "startsEmbarkedIn": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "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" + }, + "embarkedIn": { + "maximum": 99, + "minimum": 0, + "type": "integer" + }, + "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" + }, + "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" + } +]
2 tool updates
- Changed
simulate_combat2 fields changed- changed
Input schema / properties / attacker / properties / attached / descriptionPrevious value: -"Leaders or support units joined to the unit, from its canBeLedBy and canBeSupportedBy."New value: +"Leaders or support units joined to the unit, from its canBeLedBy and canBeSupportedBy. A unit that joins one of these instead, such as Nork Deddog joining a Cadian Command Squad, goes after it." - changed
Input schema / properties / defender / properties / attached / descriptionPrevious value: -"Leaders or support units joined to the unit, from its canBeLedBy and canBeSupportedBy."New value: +"Leaders or support units joined to the unit, from its canBeLedBy and canBeSupportedBy. A unit that joins one of these instead, such as Nork Deddog joining a Cadian Command Squad, goes after it."
- 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" - }, - "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" - }, - "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" - }, - "embarksWithBodyguard": { - "type": "boolean" - }, - "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" - }, - "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" - }, - "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" - }, - "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" - }, - "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" - } -]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" + }, + "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" + }, + "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" + }, + "embarkedSpace": { + "exclusiveMinimum": 0, + "maximum": 1000, + "type": "integer" + }, + "embarksWithBodyguard": { + "type": "boolean" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + } +]
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": [ - "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" - }, - "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" - }, - "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" - }, - "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" - }, - "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" - }, - "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" - }, - "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" - } -]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" + }, + "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" + }, + "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" + }, + "embarksWithBodyguard": { + "type": "boolean" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + } +]
2 tool updates
- Changed
save_roster1 field changed- added
Input schema / properties / picks / items / properties / nicknameAdded value: +{ + "maxLength": 40, + "type": "string" +}
- 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" - }, - { - "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" - } -]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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + } +]
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" + } +]
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs115 npm55 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1618 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.