From 405856a5a2ecda72ea563850697fd0dc624b1e31 Mon Sep 17 00:00:00 2001 From: nlsui <37106890+nlsui@users.noreply.github.com> Date: Tue, 20 Apr 2021 16:32:57 +0200 Subject: [PATCH] added rulestext and keywords attribute to card --- cardSchema.json | 2 +- cardobject/card.go | 16 ++++++++--- cardobject/keyword.go | 25 ++++++++++++++++ cardobject/testJsons/actionTest1.json | 1 + cardobject/testJsons/entityTest1.json | 2 +- cardobject/testJsons/place1Test.json | 2 +- cardobject/validatePrimitives.go | 21 ++++++++++++++ keywordedSchema.json | 2 +- keywords/card.go | 32 +++++++++++++++------ keywords/testJsons/keywordedCard.json | 2 ++ keywords/testJsons/resolvedGroundTruth.json | 2 +- 11 files changed, 90 insertions(+), 17 deletions(-) diff --git a/cardSchema.json b/cardSchema.json index 11ce080..a7f3af4 100644 --- a/cardSchema.json +++ b/cardSchema.json @@ -1 +1 @@ -{"Card":{"$ref":"#/definitions/Card"},"definitions":{"Abilities":{"type":"array","name":"Abilities","description":"Add some Abilities","children":{"Ability":{"$ref":"#/definitions/Ability"}},"max":3},"Ability":{"type":"interface","name":"Ability","description":"Choose a Ability","children":{"ActivatedAbility":{"$ref":"#/definitions/ActivatedAbility"},"TriggeredAbility":{"$ref":"#/definitions/TriggeredAbility"}}},"AbilityEffectOperator":{"type":"enum","name":"Ability Effect Operator","enum":["GAIN"]},"Action":{"type":"struct","name":"Action","description":"Build a Action","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Effects":{"$ref":"#/definitions/Effects"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["CardName","CastingCost","Class","Effects","FlavourText","Tags"],"interactionText":"§CardName §CastingCost §Class §Effects §FlavourText §Tags"},"ActionCondition":{"type":"interface","name":"Action Condition","description":"Choose a Action Condition","children":{"ActionIntCondition":{"$ref":"#/definitions/ActionIntCondition"},"ActionStringCondition":{"$ref":"#/definitions/ActionStringCondition"},"ActionTagCondition":{"$ref":"#/definitions/ActionTagCondition"}}},"ActionConditions":{"type":"array","name":"Action Conditions","description":"Add some Action Conditions","children":{"ActionCondition":{"$ref":"#/definitions/ActionCondition"}},"max":3},"ActionEffectManipulation":{"type":"struct","name":"Action Effect Manipulation","description":"Build a Action Effect Manipulation","children":{"Effect":{"$ref":"#/definitions/Effect"},"EffectOperator":{"$ref":"#/definitions/AbilityEffectOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["EffectOperator"],"interactionText":"It §EffectOperator §Effect.(§Keyword)"},"ActionExtractor":{"type":"interface","name":"Action Extractor","description":"Choose a Action Extractor","children":{"ActionIntExtractor":{"$ref":"#/definitions/ActionIntExtractor"},"ActionStringExtractor":{"$ref":"#/definitions/ActionStringExtractor"},"ActionTargetExtractor":{"$ref":"#/definitions/TargetExtractor"}}},"ActionExtractors":{"type":"array","name":"Action Extractors","description":"Add some Action Extractors","children":{"ActionExtractor":{"$ref":"#/definitions/ActionExtractor"}},"max":3},"ActionIntCondition":{"type":"struct","name":"Action Int Condition","description":"Build a Action Int Condition","children":{"ActionIntProperty":{"$ref":"#/definitions/ActionIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["ActionIntProperty","IntValue","IntComparator"],"interactionText":"with §ActionIntProperty §IntComparator §IntValue"},"ActionIntExtractor":{"type":"struct","name":"Action Int Extractor","description":"Build a Action Int Extractor","children":{"ExtractIntProperty":{"$ref":"#/definitions/ActionIntProperty"},"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["ExtractIntProperty","IntVariableName"],"interactionText":"Set §IntVariableName to the actions §ExtractIntProperty."},"ActionIntManipulation":{"type":"struct","name":"Action Int Manipulation","description":"Build a Action Int Manipulation","children":{"IntProperty":{"$ref":"#/definitions/ActionIntProperty"},"IntOperator":{"$ref":"#/definitions/IntOperator"},"IntValue":{"$ref":"#/definitions/IntValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["IntProperty","IntOperator","IntValue"],"interactionText":"§IntOperator §IntProperty §IntValue.(§Keyword)"},"ActionIntProperty":{"type":"enum","name":"Action Int Property","enum":["BASECOSTSUM","COSTSUM"]},"ActionManipulation":{"type":"interface","name":"Action Manipulation","description":"Choose a Action Manipulation","children":{"ActionEffectManipulation":{"$ref":"#/definitions/ActionEffectManipulation"},"ActionIntManipulation":{"$ref":"#/definitions/ActionIntManipulation"},"ActionStringManipulation":{"$ref":"#/definitions/ActionStringManipulation"},"ActionTagManipulation":{"$ref":"#/definitions/ActionTagManipulation"},"ActionZoneChange":{"$ref":"#/definitions/ActionZoneChange"}}},"ActionManipulations":{"type":"array","name":"Action Manipulations","description":"Add some Action Manipulations","children":{"ActionManipulation":{"$ref":"#/definitions/ActionManipulation"}},"max":3},"ActionSelector":{"type":"struct","name":"Action Selector","description":"Build a Action Selector","children":{"PlayerMode":{"$ref":"#/definitions/PlayerMode"},"PlayerCondition":{"$ref":"#/definitions/PlayerCondition"},"CardMode":{"$ref":"#/definitions/CardMode"},"ActionConditions":{"$ref":"#/definitions/ActionConditions"},"ActionZone":{"$ref":"#/definitions/ActionZone"},"ActionExtractors":{"$ref":"#/definitions/ActionExtractors"},"AmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["PlayerMode","CardMode","ActionZone"],"interactionText":"Choose §CardMode action §ActionConditions in the §ActionZone of §PlayerMode player §PlayerCondition. §ActionExtractors §AmountExtractor"},"ActionStringCondition":{"type":"struct","name":"Action String Condition","description":"Build a Action String Condition","children":{"ActionStringProperty":{"$ref":"#/definitions/ActionStringProperty"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["ActionStringProperty","StringValue","StringComparator"],"interactionText":"with §ActionStringProperty §StringComparator §StringValue"},"ActionStringExtractor":{"type":"struct","name":"Action String Extractor","description":"Build a Action String Extractor","children":{"ExtractStringProperty":{"$ref":"#/definitions/ActionStringProperty"},"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["ExtractStringProperty","StringVariableName"],"interactionText":"Set §StringVariableName to the actions §ExtractStringProperty."},"ActionStringManipulation":{"type":"struct","name":"Action String Manipulation","description":"Build a Action String Manipulation","children":{"StringProperty":{"$ref":"#/definitions/ActionStringProperty"},"StringOperator":{"$ref":"#/definitions/StringOperator"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["StringProperty","StringOperator","StringValue"],"interactionText":"§StringOperator §StringProperty §StringValue.(§Keyword)"},"ActionStringProperty":{"type":"enum","name":"Action String Property","enum":["NAME","TEXT"]},"ActionTagCondition":{"type":"struct","name":"Action Tag Condition","description":"Build a Action Tag Condition","children":{"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["StringValue","StringComparator"],"interactionText":"with tag §StringComparator §StringValue"},"ActionTagManipulation":{"type":"struct","name":"Action Tag Manipulation","description":"Build a Action Tag Manipulation","children":{"TagValue":{"$ref":"#/definitions/Tag"},"TagOperator":{"$ref":"#/definitions/StringOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["TagValue","TagOperator"],"interactionText":"§TagOperator tag §TagValue.(§Keyword)"},"ActionTargetEffect":{"type":"struct","name":"Action Target Effect","description":"Build a Action Target Effect","children":{"ActionSelector":{"$ref":"#/definitions/ActionSelector"},"ActionManipulations":{"$ref":"#/definitions/ActionManipulations"}},"required":["ActionSelector","ActionManipulations"],"interactionText":"§ActionSelector §ActionManipulations"},"ActionZone":{"type":"enum","name":"Action Zone","enum":["DECK","DUSTPILE","HAND","VOID"]},"ActionZoneChange":{"type":"struct","name":"Action Zone Change","description":"Build a Action Zone Change","children":{"Zone":{"$ref":"#/definitions/ActionZone"},"Player":{"$ref":"#/definitions/PlayerMode"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["Zone","Player"],"interactionText":"Put it into §Player §Zone.(§Keyword)"},"ActivatedAbility":{"type":"struct","name":"Activated Ability","description":"Build a Activated Ability","children":{"AbilityCost":{"$ref":"#/definitions/Cost"},"Effects":{"$ref":"#/definitions/Effects"}},"required":["AbilityCost","Effects"],"interactionText":"Pay §AbilityCost: §Effects \n"},"ArithOperator":{"type":"enum","name":"Arith Operator","enum":["ADD","SUBTRACT"]},"Attack":{"type":"int","name":"Attack","max":32},"AttackEventListener":{"type":"struct","name":"Attack Event Listener","description":"Build a Attack Event Listener","children":{"EntityCondition":{"$ref":"#/definitions/EntityCondition"},"AttackEntityExtractors":{"$ref":"#/definitions/EntityExtractors"}},"interactionText":"Whenever an entity §EntityCondition attacks. §AttackEntityExtractors"},"BasicAmount":{"type":"int","name":"Basic Amount","max":32},"BlockEventListener":{"type":"struct","name":"Block Event Listener","description":"Build a Block Event Listener","children":{"EntityCondition":{"$ref":"#/definitions/EntityCondition"},"BlockingEntityExtractors":{"$ref":"#/definitions/EntityExtractors"},"BlockedEntityExtractors":{"$ref":"#/definitions/EntityExtractors"}},"interactionText":"Whenever an entity §EntityCondition blocks. §BlockingEntityExtractors §BlockedEntityExtractors"},"Card":{"type":"interface","name":"Card","description":"Choose a Card","children":{"Action":{"$ref":"#/definitions/Action"},"Entity":{"$ref":"#/definitions/Entity"},"Place":{"$ref":"#/definitions/Place"},"Headquarter":{"$ref":"#/definitions/Headquarter"}}},"CardConditions":{"type":"interface","name":"Card Conditions","description":"Choose a Card Conditions","children":{"ActionConditions":{"$ref":"#/definitions/ActionConditions"},"EntityConditions":{"$ref":"#/definitions/EntityConditions"},"HeadquarterConditions":{"$ref":"#/definitions/HeadquarterConditions"},"PlaceConditions":{"$ref":"#/definitions/PlaceConditions"},"ThisConditions":{"$ref":"#/definitions/ThisCondition"}}},"CardExtractors":{"type":"interface","name":"Card Extractors","description":"Choose a Card Extractors","children":{"ActionExtractors":{"$ref":"#/definitions/ActionExtractors"},"EntityExtractors":{"$ref":"#/definitions/EntityExtractors"},"HeadquarterExtractors":{"$ref":"#/definitions/HeadquarterExtractors"},"PlaceExtractors":{"$ref":"#/definitions/PlaceExtractors"}}},"CardIntProperty":{"type":"enum","name":"Card Int Property","enum":["ATTACK","COSTSUM","HEALTH"]},"CardMode":{"type":"enum","name":"Card Mode","enum":["ALL","OPPONENTSCHOICE","RANDOM","TARGET"]},"CardName":{"type":"string","name":"Card Name","max":32,"min":1},"CardStringProperty":{"type":"enum","name":"Card String Property","enum":["NAME","TEXT"]},"CastingCost":{"type":"int","name":"Casting Cost","max":32},"ChooseFromEffect":{"type":"struct","name":"Choose From Effect","description":"Build a Choose From Effect","children":{"Effects":{"$ref":"#/definitions/Effects"}},"required":["Effects"],"interactionText":"Do one of §Effects."},"Class":{"type":"struct","name":"Class","description":"Build a Class","children":{"Nature":{"$ref":"#/definitions/Nature"},"Mysticism":{"$ref":"#/definitions/Mysticism"},"Technology":{"$ref":"#/definitions/Technology"},"Culture":{"$ref":"#/definitions/Culture"}},"required":["Nature","Mysticism","Technology","Culture"],"interactionText":"§Nature §Mysticism §Technology §Culture"},"ComplexIntValue":{"type":"struct","name":"Complex Int Value","description":"Build a Complex Int Value","children":{"FirstValue":{"$ref":"#/definitions/IntValue"},"SecondValue":{"$ref":"#/definitions/IntValue"},"ArithOperator":{"$ref":"#/definitions/ArithOperator"}},"required":["FirstValue","SecondValue","ArithOperator"],"interactionText":"§FirstValue §ArithOperator §SecondValue"},"Cost":{"type":"struct","name":"Cost","description":"Build a Cost","children":{"ManaCost":{"$ref":"#/definitions/ManaCost"},"SacrificeCost":{"$ref":"#/definitions/SacrificeCost"},"DiscardCost":{"$ref":"#/definitions/DiscardCost"},"VoidCost":{"$ref":"#/definitions/VoidCost"}},"interactionText":"§ManaCost §SacrificeCost §DiscardCost §VoidCost"},"Culture":{"type":"bool","name":"Culture"},"Delay":{"type":"int","name":"Delay","max":32},"DiscardCost":{"type":"struct","name":"Discard Cost","description":"Build a Discard Cost","children":{"Amount":{"$ref":"#/definitions/BasicAmount"},"Conditions":{"$ref":"#/definitions/CardConditions"}},"required":["Amount","Conditions"],"interactionText":"Discard §Amount card §Conditions"},"DynamicZone":{"type":"enum","name":"Dynamic Zone","enum":["DECK","DUSTPILE","FIELD","HAND"]},"Effect":{"type":"interface","name":"Effect","description":"Choose a Effect","children":{"GrowthEffect":{"$ref":"#/definitions/GrowthEffect"},"ProductionEffect":{"$ref":"#/definitions/ProductionEffect"},"WisdomEffect":{"$ref":"#/definitions/WisdomEffect"},"TokenEffect":{"$ref":"#/definitions/TokenEffect"},"TargetEffect":{"$ref":"#/definitions/TargetEffect"},"ChooseFromEffect":{"$ref":"#/definitions/ChooseFromEffect"}}},"Effects":{"type":"array","name":"Effects","description":"Add some Effects","children":{"Effect":{"$ref":"#/definitions/Effect"}},"max":3},"Entity":{"type":"struct","name":"Entity","description":"Build a Entity","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/Abilities"},"Attack":{"$ref":"#/definitions/Attack"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["CardName","CastingCost","Class","Abilities","Attack","Health","FlavourText","Tags"],"interactionText":"§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags"},"EntityAbilityManipulation":{"type":"struct","name":"Entity Ability Manipulation","description":"Build a Entity Ability Manipulation","children":{"Ability":{"$ref":"#/definitions/Ability"},"AbilityOperator":{"$ref":"#/definitions/AbilityEffectOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["AbilityOperator"],"interactionText":"It §AbilityOperator §Ability.(§Keyword)"},"EntityCondition":{"type":"interface","name":"Entity Condition","description":"Choose a Entity Condition","children":{"EntityIntCondition":{"$ref":"#/definitions/EntityIntCondition"},"EntityStringCondition":{"$ref":"#/definitions/EntityStringCondition"},"EntityTagCondition":{"$ref":"#/definitions/EntityTagCondition"}}},"EntityConditions":{"type":"array","name":"Entity Conditions","description":"Add some Entity Conditions","children":{"EntityCondition":{"$ref":"#/definitions/EntityCondition"}},"max":3},"EntityExtractor":{"type":"interface","name":"Entity Extractor","description":"Choose a Entity Extractor","children":{"EntityIntExtractor":{"$ref":"#/definitions/EntityIntExtractor"},"EntityStringExtractor":{"$ref":"#/definitions/EntityStringExtractor"},"EntityTargetExtractor":{"$ref":"#/definitions/TargetExtractor"}}},"EntityExtractors":{"type":"array","name":"Entity Extractors","description":"Add some Entity Extractors","children":{"EntityExtractor":{"$ref":"#/definitions/EntityExtractor"}},"max":3},"EntityIntCondition":{"type":"struct","name":"Entity Int Condition","description":"Build a Entity Int Condition","children":{"EntityIntProperty":{"$ref":"#/definitions/EntityIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["EntityIntProperty","IntValue","IntComparator"],"interactionText":"with §EntityIntProperty §IntComparator §IntValue"},"EntityIntExtractor":{"type":"struct","name":"Entity Int Extractor","description":"Build a Entity Int Extractor","children":{"ExtractIntProperty":{"$ref":"#/definitions/EntityIntProperty"},"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["ExtractIntProperty","IntVariableName"],"interactionText":"Set §IntVariableName to the entities §ExtractIntProperty."},"EntityIntManipulation":{"type":"struct","name":"Entity Int Manipulation","description":"Build a Entity Int Manipulation","children":{"IntProperty":{"$ref":"#/definitions/EntityIntProperty"},"IntOperator":{"$ref":"#/definitions/IntOperator"},"IntValue":{"$ref":"#/definitions/IntValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["IntProperty","IntOperator","IntValue"],"interactionText":"§IntOperator §IntProperty §IntValue.(§Keyword)"},"EntityIntProperty":{"type":"enum","name":"Entity Int Property","enum":["ATTACK","BASEATTACK","BASECOSTSUM","BASEHEALTH","COSTSUM","HEALTH"]},"EntityManipulation":{"type":"interface","name":"Entity Manipulation","description":"Choose a Entity Manipulation","children":{"EntityAbilityManipulation":{"$ref":"#/definitions/EntityAbilityManipulation"},"EntityIntManipulation":{"$ref":"#/definitions/EntityIntManipulation"},"EntityStringManipulation":{"$ref":"#/definitions/EntityStringManipulation"},"EntityTagManipulation":{"$ref":"#/definitions/EntityTagManipulation"},"EntityZoneChange":{"$ref":"#/definitions/EntityZoneChange"}}},"EntityManipulations":{"type":"array","name":"Entity Manipulations","description":"Add some Entity Manipulations","children":{"EntityManipulation":{"$ref":"#/definitions/EntityManipulation"}},"max":3},"EntitySelector":{"type":"struct","name":"Entity Selector","description":"Build a Entity Selector","children":{"PlayerMode":{"$ref":"#/definitions/PlayerMode"},"PlayerCondition":{"$ref":"#/definitions/PlayerCondition"},"CardMode":{"$ref":"#/definitions/CardMode"},"EntityConditions":{"$ref":"#/definitions/EntityConditions"},"EntityZone":{"$ref":"#/definitions/EntityZone"},"EntityExtractors":{"$ref":"#/definitions/EntityExtractors"},"AmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["PlayerMode","CardMode","EntityZone"],"interactionText":"Choose §CardMode entity §EntityConditions in the §EntityZone of §PlayerMode player §PlayerCondition. §EntityExtractors §AmountExtractor"},"EntityStringCondition":{"type":"struct","name":"Entity String Condition","description":"Build a Entity String Condition","children":{"EntityStringProperty":{"$ref":"#/definitions/EntityStringProperty"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["EntityStringProperty","StringValue","StringComparator"],"interactionText":"with §EntityStringProperty §StringComparator §StringValue"},"EntityStringExtractor":{"type":"struct","name":"Entity String Extractor","description":"Build a Entity String Extractor","children":{"ExtractStringProperty":{"$ref":"#/definitions/EntityStringProperty"},"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["ExtractStringProperty","StringVariableName"],"interactionText":"Set §StringVariableName to the entities §ExtractStringProperty."},"EntityStringManipulation":{"type":"struct","name":"Entity String Manipulation","description":"Build a Entity String Manipulation","children":{"StringProperty":{"$ref":"#/definitions/EntityStringProperty"},"StringOperator":{"$ref":"#/definitions/StringOperator"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["StringProperty","StringOperator","StringValue"],"interactionText":"§StringOperator §StringProperty §StringValue.(§Keyword)"},"EntityStringProperty":{"type":"enum","name":"Entity String Property","enum":["NAME","TEXT"]},"EntityTagCondition":{"type":"struct","name":"Entity Tag Condition","description":"Build a Entity Tag Condition","children":{"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["StringValue","StringComparator"],"interactionText":"with tag §StringComparator §StringValue"},"EntityTagManipulation":{"type":"struct","name":"Entity Tag Manipulation","description":"Build a Entity Tag Manipulation","children":{"TagValue":{"$ref":"#/definitions/Tag"},"TagOperator":{"$ref":"#/definitions/StringOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["TagValue","TagOperator"],"interactionText":"It §TagOperator §TagValue.(§Keyword)"},"EntityTargetEffect":{"type":"struct","name":"Entity Target Effect","description":"Build a Entity Target Effect","children":{"EntitySelector":{"$ref":"#/definitions/EntitySelector"},"EntityManipulations":{"$ref":"#/definitions/EntityManipulations"}},"required":["EntitySelector","EntityManipulations"],"interactionText":"§EntitySelector §EntityManipulations"},"EntityZone":{"type":"enum","name":"Entity Zone","enum":["ATTACKLANE","BLOCKLANE","DECK","DUSTPILE","FIELD","HAND","VOID"]},"EntityZoneChange":{"type":"struct","name":"Entity Zone Change","description":"Build a Entity Zone Change","children":{"Zone":{"$ref":"#/definitions/EntityZone"},"Player":{"$ref":"#/definitions/PlayerMode"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["Zone","Player"],"interactionText":"Put it into §Player §Zone.(§Keyword)"},"EventListener":{"type":"interface","name":"Event Listener","description":"Choose a Event Listener","children":{"AttackEventListener":{"$ref":"#/definitions/AttackEventListener"},"BlockEventListener":{"$ref":"#/definitions/BlockEventListener"},"ManipulationEventListener":{"$ref":"#/definitions/ManipulationEventListener"},"ProductionEventListener":{"$ref":"#/definitions/ProductionEventListener"},"TimeEventListener":{"$ref":"#/definitions/TimeEventListener"},"ZoneChangeEventListener":{"$ref":"#/definitions/ZoneChangeEventListener"}}},"ExtractorTargetEffect":{"type":"struct","name":"Extractor Target Effect","description":"Build a Extractor Target Effect","children":{"TargetVariable":{"$ref":"#/definitions/TargetVariableName"},"Manipulations":{"$ref":"#/definitions/Manipulations"}},"required":["TargetVariable","Manipulations"],"interactionText":"Choose §TargetVariable. §Manipulations"},"FlavourText":{"type":"string","name":"Flavour Text","max":1000,"min":1},"GrowthEffect":{"type":"struct","name":"Growth Effect","description":"Build a Growth Effect","children":{"Keyword":{"$ref":"#/definitions/Keyword"},"GrowthAmount":{"$ref":"#/definitions/IntValue"}},"required":["GrowthAmount"],"interactionText":"Gain §GrowthAmount growth. (§Keyword)"},"Headquarter":{"type":"struct","name":"Headquarter","description":"Build a Headquarter","children":{"CardName":{"$ref":"#/definitions/CardName"},"Class":{"$ref":"#/definitions/Class"},"Delay":{"$ref":"#/definitions/Delay"},"Abilities":{"$ref":"#/definitions/Abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["CardName","Class","Delay","Abilities","Health","FlavourText","Tags"],"interactionText":"§CardName §Class §Delay §Abilities §Health §FlavourText §Tags"},"HeadquarterAbilityManipulation":{"type":"struct","name":"Headquarter Ability Manipulation","description":"Build a Headquarter Ability Manipulation","children":{"Ability":{"$ref":"#/definitions/Ability"},"AbilityOperator":{"$ref":"#/definitions/AbilityEffectOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["AbilityOperator"],"interactionText":"It §AbilityOperator §Effect.(§Keyword)"},"HeadquarterCondition":{"type":"interface","name":"Headquarter Condition","description":"Choose a Headquarter Condition","children":{"HeadquarterIntCondition":{"$ref":"#/definitions/HeadquarterIntCondition"},"HeadquarterStringCondition":{"$ref":"#/definitions/HeadquarterStringCondition"},"HeadquarterTagCondition":{"$ref":"#/definitions/HeadquarterTagCondition"}}},"HeadquarterConditions":{"type":"array","name":"Headquarter Conditions","description":"Add some Headquarter Conditions","children":{"HeadquarterCondition":{"$ref":"#/definitions/HeadquarterCondition"}},"max":3},"HeadquarterExtractor":{"type":"interface","name":"Headquarter Extractor","description":"Choose a Headquarter Extractor","children":{"HeadquarterIntExtractor":{"$ref":"#/definitions/HeadquarterIntExtractor"},"HeadquarterStringExtractor":{"$ref":"#/definitions/HeadquarterStringExtractor"},"HeadquarterTargetExtractor":{"$ref":"#/definitions/TargetExtractor"}}},"HeadquarterExtractors":{"type":"array","name":"Headquarter Extractors","description":"Add some Headquarter Extractors","children":{"HeadquarterExtractor":{"$ref":"#/definitions/HeadquarterExtractor"}},"max":3},"HeadquarterIntCondition":{"type":"struct","name":"Headquarter Int Condition","description":"Build a Headquarter Int Condition","children":{"HeadquarterIntProperty":{"$ref":"#/definitions/HeadquarterIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["HeadquarterIntProperty","IntValue","IntComparator"],"interactionText":"with §HeadquarterIntProperty §IntComparator §IntValue"},"HeadquarterIntExtractor":{"type":"struct","name":"Headquarter Int Extractor","description":"Build a Headquarter Int Extractor","children":{"ExtractIntProperty":{"$ref":"#/definitions/HeadquarterIntProperty"},"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["ExtractIntProperty","IntVariableName"],"interactionText":"Set §IntVariableName to the actions §ExtractIntProperty."},"HeadquarterIntManipulation":{"type":"struct","name":"Headquarter Int Manipulation","description":"Build a Headquarter Int Manipulation","children":{"IntProperty":{"$ref":"#/definitions/HeadquarterIntProperty"},"IntOperator":{"$ref":"#/definitions/IntOperator"},"IntValue":{"$ref":"#/definitions/IntValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["IntProperty","IntOperator","IntValue"],"interactionText":"§IntOperator §IntProperty §IntValue.(§Keyword)"},"HeadquarterIntProperty":{"type":"enum","name":"Headquarter Int Property","enum":["BASEHEALTH","HEALTH"]},"HeadquarterManipulation":{"type":"interface","name":"Headquarter Manipulation","description":"Choose a Headquarter Manipulation","children":{"HeadquarterEffectManipulation":{"$ref":"#/definitions/HeadquarterAbilityManipulation"},"HeadquarterIntManipulation":{"$ref":"#/definitions/HeadquarterIntManipulation"},"HeadquarterStringManipulation":{"$ref":"#/definitions/HeadquarterStringManipulation"},"HeadquarterTagManipulation":{"$ref":"#/definitions/HeadquarterTagManipulation"}}},"HeadquarterManipulations":{"type":"array","name":"Headquarter Manipulations","description":"Add some Headquarter Manipulations","children":{"HeadquarterManipulation":{"$ref":"#/definitions/HeadquarterManipulation"}},"max":3},"HeadquarterSelector":{"type":"struct","name":"Headquarter Selector","description":"Build a Headquarter Selector","children":{"PlayerMode":{"$ref":"#/definitions/PlayerMode"},"PlayerCondition":{"$ref":"#/definitions/PlayerCondition"},"CardMode":{"$ref":"#/definitions/CardMode"},"HeadquarterConditions":{"$ref":"#/definitions/HeadquarterConditions"},"HeadquarterExtractors":{"$ref":"#/definitions/HeadquarterExtractors"},"AmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["PlayerMode","CardMode"],"interactionText":"Choose §CardMode action §HeadquarterConditions in the §HeadquarterZone of §PlayerMode player §PlayerCondition. §HeadquarterExtractors §AmountExtractor"},"HeadquarterStringCondition":{"type":"struct","name":"Headquarter String Condition","description":"Build a Headquarter String Condition","children":{"HeadquarterStringProperty":{"$ref":"#/definitions/HeadquarterStringProperty"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["HeadquarterStringProperty","StringValue","StringComparator"],"interactionText":"with §HeadquarterStringProperty §StringComparator §StringValue"},"HeadquarterStringExtractor":{"type":"struct","name":"Headquarter String Extractor","description":"Build a Headquarter String Extractor","children":{"ExtractStringProperty":{"$ref":"#/definitions/HeadquarterStringProperty"},"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["ExtractStringProperty","StringVariableName"],"interactionText":"Set §StringVariableName to the actions §ExtractStringProperty."},"HeadquarterStringManipulation":{"type":"struct","name":"Headquarter String Manipulation","description":"Build a Headquarter String Manipulation","children":{"StringProperty":{"$ref":"#/definitions/HeadquarterStringProperty"},"StringOperator":{"$ref":"#/definitions/StringOperator"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["StringProperty","StringOperator","StringValue"],"interactionText":"§StringOperator §StringProperty §StringValue.(§Keyword)"},"HeadquarterStringProperty":{"type":"enum","name":"Headquarter String Property","enum":["NAME","TEXT"]},"HeadquarterTagCondition":{"type":"struct","name":"Headquarter Tag Condition","description":"Build a Headquarter Tag Condition","children":{"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["StringValue","StringComparator"],"interactionText":"with tag §StringComparator §StringValue"},"HeadquarterTagManipulation":{"type":"struct","name":"Headquarter Tag Manipulation","description":"Build a Headquarter Tag Manipulation","children":{"TagValue":{"$ref":"#/definitions/Tag"},"TagOperator":{"$ref":"#/definitions/StringOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["TagValue","TagOperator"],"interactionText":"§TagOperator tag §TagValue.(§Keyword)"},"HeadquarterTargetEffect":{"type":"struct","name":"Headquarter Target Effect","description":"Build a Headquarter Target Effect","children":{"HeadquarterSelector":{"$ref":"#/definitions/HeadquarterSelector"},"HeadquarterManipulations":{"$ref":"#/definitions/HeadquarterManipulations"}},"required":["HeadquarterSelector","HeadquarterManipulations"],"interactionText":"§HeadquarterSelector §HeadquarterManipulations"},"Health":{"type":"int","name":"Health","max":32},"IntChangeMode":{"type":"enum","name":"Int Change Mode","enum":["INCREASES","DECREASES","CHANGES"]},"IntComparator":{"type":"enum","name":"Int Comparator","enum":["EQUAL","GREATER","LESSER"]},"IntExtractor":{"type":"struct","name":"Int Extractor","description":"Build a Int Extractor","children":{"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["IntVariableName"],"interactionText":"Set §IntVariableName."},"IntManipulationEventListener":{"type":"struct","name":"Int Manipulation Event Listener","description":"Build a Int Manipulation Event Listener","children":{"IntProperty":{"$ref":"#/definitions/CardIntProperty"},"IntChangeMode":{"$ref":"#/definitions/IntChangeMode"},"CardCondition":{"$ref":"#/definitions/CardConditions"},"ManipulatedCardExtractor":{"$ref":"#/definitions/CardExtractors"},"ManipulationValueExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["IntProperty","IntChangeMode"],"interactionText":"Whenever §IntProperty on card §CardCondition §IntChangeMode. §ManipulatedCardExtractors §ManipulationValueExtractor"},"IntOperator":{"type":"enum","name":"Int Operator","enum":["SET","ADD","SUBTRACT"]},"IntValue":{"type":"interface","name":"Int Value","description":"Choose a Int Value","children":{"ComplexIntValue":{"$ref":"#/definitions/ComplexIntValue"},"SimpleIntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntVariable":{"$ref":"#/definitions/IntVariableName"}}},"IntVariableName":{"type":"enum","name":"Int Variable Name","enum":["X","Y","Z"]},"Keyword":{"type":"enum","name":"Keyword","enum":["ANTHEM","ARM","ARRIVAL","BATTLECRY","HARM","KILL","ONCONSTRUCTION","ONDEATH","ONSPAWN","PAY","PERIODIC","PRODUCE","REPAIR","TRIBUTE"]},"ManaCost":{"type":"struct","name":"Mana Cost","description":"Build a Mana Cost","children":{"CostAmount":{"$ref":"#/definitions/BasicAmount"}},"required":["CostAmount"],"interactionText":"§CostAmount mana"},"ManipulationEventListener":{"type":"interface","name":"Manipulation Event Listener","description":"Choose a Manipulation Event Listener","children":{"IntManipulationEventListener":{"$ref":"#/definitions/IntManipulationEventListener"},"StringManipulationEventListener":{"$ref":"#/definitions/StringManipulationEventListener"}}},"Manipulations":{"type":"interface","name":"Manipulations","description":"Choose a Manipulations","children":{"ActionManipulations":{"$ref":"#/definitions/ActionManipulations"},"EntityManipulations":{"$ref":"#/definitions/EntityManipulations"},"HeadquarterManipulations":{"$ref":"#/definitions/HeadquarterManipulations"},"PlaceManipulations":{"$ref":"#/definitions/PlaceManipulations"}}},"Mysticism":{"type":"bool","name":"Mysticism"},"Nature":{"type":"bool","name":"Nature"},"Place":{"type":"struct","name":"Place","description":"Build a Place","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/Abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["CardName","CastingCost","Class","Abilities","Health","FlavourText","Tags"],"interactionText":"§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags"},"PlaceAbilityManipulation":{"type":"struct","name":"Place Ability Manipulation","description":"Build a Place Ability Manipulation","children":{"Ability":{"$ref":"#/definitions/Ability"},"AbilityOperator":{"$ref":"#/definitions/AbilityEffectOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["AbilityOperator"],"interactionText":"It §AbilityOperator §Ability.(§Keyword)"},"PlaceCondition":{"type":"interface","name":"Place Condition","description":"Choose a Place Condition","children":{"PlaceIntCondition":{"$ref":"#/definitions/PlaceIntCondition"},"PlaceStringCondition":{"$ref":"#/definitions/PlaceStringCondition"},"PlaceTagCondition":{"$ref":"#/definitions/PlaceTagCondition"}}},"PlaceConditions":{"type":"array","name":"Place Conditions","description":"Add some Place Conditions","children":{"PlaceCondition":{"$ref":"#/definitions/PlaceCondition"}},"max":3},"PlaceExtractor":{"type":"interface","name":"Place Extractor","description":"Choose a Place Extractor","children":{"PlaceIntExtractor":{"$ref":"#/definitions/PlaceIntExtractor"},"PlaceStringExtractor":{"$ref":"#/definitions/PlaceStringExtractor"},"PlaceTargetExtractor":{"$ref":"#/definitions/TargetExtractor"}}},"PlaceExtractors":{"type":"array","name":"Place Extractors","description":"Add some Place Extractors","children":{"PlaceExtractor":{"$ref":"#/definitions/PlaceExtractor"}},"max":3},"PlaceIntCondition":{"type":"struct","name":"Place Int Condition","description":"Build a Place Int Condition","children":{"PlaceIntProperty":{"$ref":"#/definitions/PlaceIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["PlaceIntProperty","IntValue","IntComparator"],"interactionText":"with §PlaceIntProperty §IntComparator §IntValue"},"PlaceIntExtractor":{"type":"struct","name":"Place Int Extractor","description":"Build a Place Int Extractor","children":{"ExtractIntProperty":{"$ref":"#/definitions/PlaceIntProperty"},"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["ExtractIntProperty","IntVariableName"],"interactionText":"Set §IntVariableName to the places §ExtractIntProperty."},"PlaceIntManipulation":{"type":"struct","name":"Place Int Manipulation","description":"Build a Place Int Manipulation","children":{"IntProperty":{"$ref":"#/definitions/PlaceIntProperty"},"IntOperator":{"$ref":"#/definitions/IntOperator"},"IntValue":{"$ref":"#/definitions/IntValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["IntProperty","IntOperator","IntValue"],"interactionText":"§IntOperator §IntProperty §IntValue.(§Keyword)"},"PlaceIntProperty":{"type":"enum","name":"Place Int Property","enum":["BASECOSTSUM","BASEHEALTH","COSTSUM","HEALTH"]},"PlaceManipulation":{"type":"interface","name":"Place Manipulation","description":"Choose a Place Manipulation","children":{"PlaceAbilityManipulation":{"$ref":"#/definitions/PlaceAbilityManipulation"},"PlaceIntManipulation":{"$ref":"#/definitions/PlaceIntManipulation"},"PlaceStringManipulation":{"$ref":"#/definitions/PlaceStringManipulation"},"PlaceTagManipulation":{"$ref":"#/definitions/PlaceTagManipulation"},"PlaceZoneChange":{"$ref":"#/definitions/PlaceZoneChange"}}},"PlaceManipulations":{"type":"array","name":"Place Manipulations","description":"Add some Place Manipulations","children":{"PlaceManipulation":{"$ref":"#/definitions/PlaceManipulation"}},"max":3},"PlaceSelector":{"type":"struct","name":"Place Selector","description":"Build a Place Selector","children":{"PlayerMode":{"$ref":"#/definitions/PlayerMode"},"PlayerCondition":{"$ref":"#/definitions/PlayerCondition"},"CardMode":{"$ref":"#/definitions/CardMode"},"PlaceConditions":{"$ref":"#/definitions/PlaceConditions"},"PlaceZone":{"$ref":"#/definitions/PlaceZone"},"PlaceExtractors":{"$ref":"#/definitions/PlaceExtractors"},"AmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["PlayerMode","CardMode","PlaceZone"],"interactionText":"Choose §CardMode place §PlaceConditions in the §PlaceZone of §PlayerMode player §PlayerCondition. §PlaceExtractors §AmountExtractor"},"PlaceStringCondition":{"type":"struct","name":"Place String Condition","description":"Build a Place String Condition","children":{"PlaceStringProperty":{"$ref":"#/definitions/PlaceStringProperty"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["PlaceStringProperty","StringValue","StringComparator"],"interactionText":"with §PlaceStringProperty §StringComparator §StringValue"},"PlaceStringExtractor":{"type":"struct","name":"Place String Extractor","description":"Build a Place String Extractor","children":{"ExtractStringProperty":{"$ref":"#/definitions/PlaceStringProperty"},"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["ExtractStringProperty","StringVariableName"],"interactionText":"Set §StringVariableName to the places §ExtractStringProperty."},"PlaceStringManipulation":{"type":"struct","name":"Place String Manipulation","description":"Build a Place String Manipulation","children":{"StringProperty":{"$ref":"#/definitions/PlaceStringProperty"},"StringOperator":{"$ref":"#/definitions/StringOperator"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["StringProperty","StringOperator","StringValue"],"interactionText":"§StringOperator §StringProperty §StringValue.(§Keyword)"},"PlaceStringProperty":{"type":"enum","name":"Place String Property","enum":["NAME","TEXT"]},"PlaceTagCondition":{"type":"struct","name":"Place Tag Condition","description":"Build a Place Tag Condition","children":{"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["StringValue","StringComparator"],"interactionText":"with tag §StringComparator §StringValue"},"PlaceTagManipulation":{"type":"struct","name":"Place Tag Manipulation","description":"Build a Place Tag Manipulation","children":{"TagValue":{"$ref":"#/definitions/Tag"},"TagOperator":{"$ref":"#/definitions/StringOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["TagValue","TagOperator"],"interactionText":"It §TagOperator §TagValue.(§Keyword)"},"PlaceTargetEffect":{"type":"struct","name":"Place Target Effect","description":"Build a Place Target Effect","children":{"PlaceSelector":{"$ref":"#/definitions/PlaceSelector"},"PlaceManipulations":{"$ref":"#/definitions/PlaceManipulations"}},"required":["PlaceSelector","PlaceManipulations"],"interactionText":"§PlaceSelector §PlaceManipulations"},"PlaceZone":{"type":"enum","name":"Place Zone","enum":["DECK","DUSTPILE","FIELD","HAND","VOID"]},"PlaceZoneChange":{"type":"struct","name":"Place Zone Change","description":"Build a Place Zone Change","children":{"Zone":{"$ref":"#/definitions/PlaceZone"},"Player":{"$ref":"#/definitions/PlayerMode"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["Zone","Player"],"interactionText":"Put it into §Player §Zone.(§Keyword)"},"PlayerCondition":{"type":"interface","name":"Player Condition","description":"Choose a Player Condition","children":{"PlayerIntCondition":{"$ref":"#/definitions/PlayerIntCondition"}}},"PlayerIntCondition":{"type":"struct","name":"Player Int Condition","description":"Build a Player Int Condition","children":{"PlayerIntProperty":{"$ref":"#/definitions/PlayerIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["PlayerIntProperty","IntValue","IntComparator"],"interactionText":"with §PlayerIntProperty §IntComparator §IntValue"},"PlayerIntProperty":{"type":"enum","name":"Player Int Property","enum":["HANDSIZE","BOARDSIZE","DECKSIZE"]},"PlayerMode":{"type":"enum","name":"Player Mode","enum":["YOU","OPPONENT"]},"ProductionEffect":{"type":"struct","name":"Production Effect","description":"Build a Production Effect","children":{"Keyword":{"$ref":"#/definitions/Keyword"},"Amount":{"$ref":"#/definitions/IntValue"}},"required":["Amount"],"interactionText":"Produce §Amount. (§Keyword)"},"ProductionEventListener":{"type":"struct","name":"Production Event Listener","description":"Build a Production Event Listener","children":{"ClassCondition":{"$ref":"#/definitions/Class"},"ProductionAmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"interactionText":"Whenever one or more §ClassCondition mana is produced. §ProductionAmountExtractor"},"SacrificeCost":{"type":"struct","name":"Sacrifice Cost","description":"Build a Sacrifice Cost","children":{"Amount":{"$ref":"#/definitions/BasicAmount"},"Conditions":{"$ref":"#/definitions/CardConditions"}},"required":["Amount","Conditions"],"interactionText":"Sacrifice §Amount card §Conditions"},"SimpleIntValue":{"type":"int","name":"Simple Int Value","max":32},"SimpleStringValue":{"type":"string","name":"Simple String Value","max":32,"min":1},"StringChangeMode":{"type":"enum","name":"String Change Mode","enum":["CHANGES"]},"StringComparator":{"type":"enum","name":"String Comparator","enum":["EQUAL","CONTAINS","UNEQUAL","CONTAINSNOT"]},"StringExtractor":{"type":"struct","name":"String Extractor","description":"Build a String Extractor","children":{"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["StringVariableName"],"interactionText":"Set §StringVariableName."},"StringManipulationEventListener":{"type":"struct","name":"String Manipulation Event Listener","description":"Build a String Manipulation Event Listener","children":{"StringProperty":{"$ref":"#/definitions/CardStringProperty"},"StringChangeMode":{"$ref":"#/definitions/StringChangeMode"},"CardCondition":{"$ref":"#/definitions/CardConditions"},"ManipulatedCardExtractor":{"$ref":"#/definitions/CardExtractors"},"ManipulationValueExtractor":{"$ref":"#/definitions/StringExtractor"}},"required":["StringProperty","StringChangeMode"],"interactionText":"Whenever §StringProperty §StringChangeMode on a card §CardCondition. §ManipulatedCardExtractors §ManipulationValueExtractor"},"StringOperator":{"type":"enum","name":"String Operator","enum":["SET"]},"StringVariableName":{"type":"enum","name":"String Variable Name","enum":["A","B","C"]},"Tag":{"type":"enum","name":"Tag","enum":["ANIMAL","BOT","DWARF","ENGINEER","EQUIPMENT","FARM","FIRE","HUMAN","KNIGHT","MAGIC","MILITANT","PRIMITIVE","RANGE","SPIRITUAL","TACTIC","TECHNOCRAT"]},"Tags":{"type":"array","name":"Tags","description":"Add some Tags","children":{"Tag":{"$ref":"#/definitions/Tag"}},"max":3,"min":1},"TargetEffect":{"type":"interface","name":"Target Effect","description":"Choose a Target Effect","children":{"ActionTargetEffect":{"$ref":"#/definitions/ActionTargetEffect"},"EntityTargetEffect":{"$ref":"#/definitions/EntityTargetEffect"},"HeadquarterTargetEffect":{"$ref":"#/definitions/HeadquarterTargetEffect"},"PlaceTargetEffect":{"$ref":"#/definitions/PlaceTargetEffect"},"ExtractorTargetEffect":{"$ref":"#/definitions/ExtractorTargetEffect"}}},"TargetExtractor":{"type":"struct","name":"Target Extractor","description":"Build a Target Extractor","children":{"TargetVariableName":{"$ref":"#/definitions/TargetVariableName"}},"required":["TargetVariableName"],"interactionText":"That card is marked as §TargetVariableName."},"TargetVariableName":{"type":"enum","name":"Target Variable Name","enum":["M","T"]},"Technology":{"type":"bool","name":"Technology"},"ThisCondition":{"type":"struct","name":"This Condition","description":"Build a This Condition","children":{},"interactionText":"this"},"TimeEvent":{"type":"enum","name":"Time Event","enum":["COMBAT","TICKSTART"]},"TimeEventListener":{"type":"struct","name":"Time Event Listener","description":"Build a Time Event Listener","children":{"TimeEvent":{"$ref":"#/definitions/TimeEvent"}},"required":["TimeEvent"],"interactionText":"Every §TimeEvent"},"Token":{"type":"struct","name":"Token","description":"Build a Token","children":{"Name":{"$ref":"#/definitions/CardName"},"Attack":{"$ref":"#/definitions/Attack"},"Health":{"$ref":"#/definitions/Health"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["Attack","Health"],"interactionText":"§Attack / §Health token named §Name tagged §Tags"},"TokenEffect":{"type":"struct","name":"Token Effect","description":"Build a Token Effect","children":{"Keyword":{"$ref":"#/definitions/Keyword"},"TokenAmount":{"$ref":"#/definitions/IntValue"},"Token":{"$ref":"#/definitions/Token"}},"required":["TokenAmount","Token"],"interactionText":"Create §TokenAmount §Token. (§Keyword)"},"TriggeredAbility":{"type":"struct","name":"Triggered Ability","description":"Build a Triggered Ability","children":{"Cause":{"$ref":"#/definitions/EventListener"},"Cost":{"$ref":"#/definitions/Cost"},"Effects":{"$ref":"#/definitions/Effects"}},"required":["Cause","Effects"],"interactionText":"§Cause , §Cost : §Effects \n"},"VoidCost":{"type":"struct","name":"Void Cost","description":"Build a Void Cost","children":{"Amount":{"$ref":"#/definitions/BasicAmount"},"Conditions":{"$ref":"#/definitions/CardConditions"}},"required":["Amount","Conditions"],"interactionText":"Void §Amount card §Conditions"},"WisdomEffect":{"type":"struct","name":"Wisdom Effect","description":"Build a Wisdom Effect","children":{"Keyword":{"$ref":"#/definitions/Keyword"}},"interactionText":"Gain §WisdomAmount wisdom. (§Keyword)"},"Zone":{"type":"enum","name":"Zone","enum":["DECK","DUSTPILE","FIELD","HAND","VOID"]},"ZoneChangeEventListener":{"type":"struct","name":"Zone Change Event Listener","description":"Build a Zone Change Event Listener","children":{"Source":{"$ref":"#/definitions/DynamicZone"},"Destination":{"$ref":"#/definitions/Zone"},"CardCondition":{"$ref":"#/definitions/CardConditions"},"MovedCardExtractors":{"$ref":"#/definitions/CardExtractors"}},"interactionText":"Whenever a card §CardCondition gets put from §Source to §Destination. §MovedCardExtractors"}}} \ No newline at end of file +{"Card":{"$ref":"#/definitions/Card"},"definitions":{"Abilities":{"type":"array","name":"Abilities","description":"Add some Abilities","children":{"Ability":{"$ref":"#/definitions/Ability"}},"max":3},"Ability":{"type":"interface","name":"Ability","description":"Choose a Ability","children":{"ActivatedAbility":{"$ref":"#/definitions/ActivatedAbility"},"TriggeredAbility":{"$ref":"#/definitions/TriggeredAbility"}}},"AbilityEffectOperator":{"type":"enum","name":"Ability Effect Operator","enum":["GAIN"]},"Action":{"type":"struct","name":"Action","description":"Build a Action","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Effects":{"$ref":"#/definitions/Effects"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Effects","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Effects §FlavourText §Tags §Keywords §RulesText"},"ActionCondition":{"type":"interface","name":"Action Condition","description":"Choose a Action Condition","children":{"ActionIntCondition":{"$ref":"#/definitions/ActionIntCondition"},"ActionStringCondition":{"$ref":"#/definitions/ActionStringCondition"},"ActionTagCondition":{"$ref":"#/definitions/ActionTagCondition"}}},"ActionConditions":{"type":"array","name":"Action Conditions","description":"Add some Action Conditions","children":{"ActionCondition":{"$ref":"#/definitions/ActionCondition"}},"max":3},"ActionEffectManipulation":{"type":"struct","name":"Action Effect Manipulation","description":"Build a Action Effect Manipulation","children":{"Effect":{"$ref":"#/definitions/Effect"},"EffectOperator":{"$ref":"#/definitions/AbilityEffectOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["EffectOperator"],"interactionText":"It §EffectOperator §Effect.(§Keyword)"},"ActionExtractor":{"type":"interface","name":"Action Extractor","description":"Choose a Action Extractor","children":{"ActionIntExtractor":{"$ref":"#/definitions/ActionIntExtractor"},"ActionStringExtractor":{"$ref":"#/definitions/ActionStringExtractor"},"ActionTargetExtractor":{"$ref":"#/definitions/TargetExtractor"}}},"ActionExtractors":{"type":"array","name":"Action Extractors","description":"Add some Action Extractors","children":{"ActionExtractor":{"$ref":"#/definitions/ActionExtractor"}},"max":3},"ActionIntCondition":{"type":"struct","name":"Action Int Condition","description":"Build a Action Int Condition","children":{"ActionIntProperty":{"$ref":"#/definitions/ActionIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["ActionIntProperty","IntValue","IntComparator"],"interactionText":"with §ActionIntProperty §IntComparator §IntValue"},"ActionIntExtractor":{"type":"struct","name":"Action Int Extractor","description":"Build a Action Int Extractor","children":{"ExtractIntProperty":{"$ref":"#/definitions/ActionIntProperty"},"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["ExtractIntProperty","IntVariableName"],"interactionText":"Set §IntVariableName to the actions §ExtractIntProperty."},"ActionIntManipulation":{"type":"struct","name":"Action Int Manipulation","description":"Build a Action Int Manipulation","children":{"IntProperty":{"$ref":"#/definitions/ActionIntProperty"},"IntOperator":{"$ref":"#/definitions/IntOperator"},"IntValue":{"$ref":"#/definitions/IntValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["IntProperty","IntOperator","IntValue"],"interactionText":"§IntOperator §IntProperty §IntValue.(§Keyword)"},"ActionIntProperty":{"type":"enum","name":"Action Int Property","enum":["BASECOSTSUM","COSTSUM"]},"ActionManipulation":{"type":"interface","name":"Action Manipulation","description":"Choose a Action Manipulation","children":{"ActionEffectManipulation":{"$ref":"#/definitions/ActionEffectManipulation"},"ActionIntManipulation":{"$ref":"#/definitions/ActionIntManipulation"},"ActionStringManipulation":{"$ref":"#/definitions/ActionStringManipulation"},"ActionTagManipulation":{"$ref":"#/definitions/ActionTagManipulation"},"ActionZoneChange":{"$ref":"#/definitions/ActionZoneChange"}}},"ActionManipulations":{"type":"array","name":"Action Manipulations","description":"Add some Action Manipulations","children":{"ActionManipulation":{"$ref":"#/definitions/ActionManipulation"}},"max":3},"ActionSelector":{"type":"struct","name":"Action Selector","description":"Build a Action Selector","children":{"PlayerMode":{"$ref":"#/definitions/PlayerMode"},"PlayerCondition":{"$ref":"#/definitions/PlayerCondition"},"CardMode":{"$ref":"#/definitions/CardMode"},"ActionConditions":{"$ref":"#/definitions/ActionConditions"},"ActionZone":{"$ref":"#/definitions/ActionZone"},"ActionExtractors":{"$ref":"#/definitions/ActionExtractors"},"AmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["PlayerMode","CardMode","ActionZone"],"interactionText":"Choose §CardMode action §ActionConditions in the §ActionZone of §PlayerMode player §PlayerCondition. §ActionExtractors §AmountExtractor"},"ActionStringCondition":{"type":"struct","name":"Action String Condition","description":"Build a Action String Condition","children":{"ActionStringProperty":{"$ref":"#/definitions/ActionStringProperty"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["ActionStringProperty","StringValue","StringComparator"],"interactionText":"with §ActionStringProperty §StringComparator §StringValue"},"ActionStringExtractor":{"type":"struct","name":"Action String Extractor","description":"Build a Action String Extractor","children":{"ExtractStringProperty":{"$ref":"#/definitions/ActionStringProperty"},"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["ExtractStringProperty","StringVariableName"],"interactionText":"Set §StringVariableName to the actions §ExtractStringProperty."},"ActionStringManipulation":{"type":"struct","name":"Action String Manipulation","description":"Build a Action String Manipulation","children":{"StringProperty":{"$ref":"#/definitions/ActionStringProperty"},"StringOperator":{"$ref":"#/definitions/StringOperator"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["StringProperty","StringOperator","StringValue"],"interactionText":"§StringOperator §StringProperty §StringValue.(§Keyword)"},"ActionStringProperty":{"type":"enum","name":"Action String Property","enum":["NAME","TEXT"]},"ActionTagCondition":{"type":"struct","name":"Action Tag Condition","description":"Build a Action Tag Condition","children":{"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["StringValue","StringComparator"],"interactionText":"with tag §StringComparator §StringValue"},"ActionTagManipulation":{"type":"struct","name":"Action Tag Manipulation","description":"Build a Action Tag Manipulation","children":{"TagValue":{"$ref":"#/definitions/Tag"},"TagOperator":{"$ref":"#/definitions/StringOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["TagValue","TagOperator"],"interactionText":"§TagOperator tag §TagValue.(§Keyword)"},"ActionTargetEffect":{"type":"struct","name":"Action Target Effect","description":"Build a Action Target Effect","children":{"ActionSelector":{"$ref":"#/definitions/ActionSelector"},"ActionManipulations":{"$ref":"#/definitions/ActionManipulations"}},"required":["ActionSelector","ActionManipulations"],"interactionText":"§ActionSelector §ActionManipulations"},"ActionZone":{"type":"enum","name":"Action Zone","enum":["DECK","DUSTPILE","HAND","VOID"]},"ActionZoneChange":{"type":"struct","name":"Action Zone Change","description":"Build a Action Zone Change","children":{"Zone":{"$ref":"#/definitions/ActionZone"},"Player":{"$ref":"#/definitions/PlayerMode"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["Zone","Player"],"interactionText":"Put it into §Player §Zone.(§Keyword)"},"ActivatedAbility":{"type":"struct","name":"Activated Ability","description":"Build a Activated Ability","children":{"AbilityCost":{"$ref":"#/definitions/Cost"},"Effects":{"$ref":"#/definitions/Effects"}},"required":["AbilityCost","Effects"],"interactionText":"Pay §AbilityCost: §Effects \n"},"ArithOperator":{"type":"enum","name":"Arith Operator","enum":["ADD","SUBTRACT"]},"Attack":{"type":"int","name":"Attack","max":32},"AttackEventListener":{"type":"struct","name":"Attack Event Listener","description":"Build a Attack Event Listener","children":{"EntityCondition":{"$ref":"#/definitions/EntityCondition"},"AttackEntityExtractors":{"$ref":"#/definitions/EntityExtractors"}},"interactionText":"Whenever an entity §EntityCondition attacks. §AttackEntityExtractors"},"BasicAmount":{"type":"int","name":"Basic Amount","max":32},"BlockEventListener":{"type":"struct","name":"Block Event Listener","description":"Build a Block Event Listener","children":{"EntityCondition":{"$ref":"#/definitions/EntityCondition"},"BlockingEntityExtractors":{"$ref":"#/definitions/EntityExtractors"},"BlockedEntityExtractors":{"$ref":"#/definitions/EntityExtractors"}},"interactionText":"Whenever an entity §EntityCondition blocks. §BlockingEntityExtractors §BlockedEntityExtractors"},"Card":{"type":"interface","name":"Card","description":"Choose a Card","children":{"Action":{"$ref":"#/definitions/Action"},"Entity":{"$ref":"#/definitions/Entity"},"Place":{"$ref":"#/definitions/Place"},"Headquarter":{"$ref":"#/definitions/Headquarter"}}},"CardConditions":{"type":"interface","name":"Card Conditions","description":"Choose a Card Conditions","children":{"ActionConditions":{"$ref":"#/definitions/ActionConditions"},"EntityConditions":{"$ref":"#/definitions/EntityConditions"},"HeadquarterConditions":{"$ref":"#/definitions/HeadquarterConditions"},"PlaceConditions":{"$ref":"#/definitions/PlaceConditions"},"ThisConditions":{"$ref":"#/definitions/ThisCondition"}}},"CardExtractors":{"type":"interface","name":"Card Extractors","description":"Choose a Card Extractors","children":{"ActionExtractors":{"$ref":"#/definitions/ActionExtractors"},"EntityExtractors":{"$ref":"#/definitions/EntityExtractors"},"HeadquarterExtractors":{"$ref":"#/definitions/HeadquarterExtractors"},"PlaceExtractors":{"$ref":"#/definitions/PlaceExtractors"}}},"CardIntProperty":{"type":"enum","name":"Card Int Property","enum":["ATTACK","COSTSUM","HEALTH"]},"CardMode":{"type":"enum","name":"Card Mode","enum":["ALL","OPPONENTSCHOICE","RANDOM","TARGET"]},"CardName":{"type":"string","name":"Card Name","max":32,"min":1},"CardStringProperty":{"type":"enum","name":"Card String Property","enum":["NAME","TEXT"]},"CastingCost":{"type":"int","name":"Casting Cost","max":32},"ChooseFromEffect":{"type":"struct","name":"Choose From Effect","description":"Build a Choose From Effect","children":{"Effects":{"$ref":"#/definitions/Effects"}},"required":["Effects"],"interactionText":"Do one of §Effects."},"Class":{"type":"struct","name":"Class","description":"Build a Class","children":{"Nature":{"$ref":"#/definitions/Nature"},"Mysticism":{"$ref":"#/definitions/Mysticism"},"Technology":{"$ref":"#/definitions/Technology"},"Culture":{"$ref":"#/definitions/Culture"}},"required":["Nature","Mysticism","Technology","Culture"],"interactionText":"§Nature §Mysticism §Technology §Culture"},"ComplexIntValue":{"type":"struct","name":"Complex Int Value","description":"Build a Complex Int Value","children":{"FirstValue":{"$ref":"#/definitions/IntValue"},"SecondValue":{"$ref":"#/definitions/IntValue"},"ArithOperator":{"$ref":"#/definitions/ArithOperator"}},"required":["FirstValue","SecondValue","ArithOperator"],"interactionText":"§FirstValue §ArithOperator §SecondValue"},"Cost":{"type":"struct","name":"Cost","description":"Build a Cost","children":{"ManaCost":{"$ref":"#/definitions/ManaCost"},"SacrificeCost":{"$ref":"#/definitions/SacrificeCost"},"DiscardCost":{"$ref":"#/definitions/DiscardCost"},"VoidCost":{"$ref":"#/definitions/VoidCost"}},"interactionText":"§ManaCost §SacrificeCost §DiscardCost §VoidCost"},"Culture":{"type":"bool","name":"Culture"},"Delay":{"type":"int","name":"Delay","max":32},"DiscardCost":{"type":"struct","name":"Discard Cost","description":"Build a Discard Cost","children":{"Amount":{"$ref":"#/definitions/BasicAmount"},"Conditions":{"$ref":"#/definitions/CardConditions"}},"required":["Amount","Conditions"],"interactionText":"Discard §Amount card §Conditions"},"DynamicZone":{"type":"enum","name":"Dynamic Zone","enum":["DECK","DUSTPILE","FIELD","HAND"]},"Effect":{"type":"interface","name":"Effect","description":"Choose a Effect","children":{"GrowthEffect":{"$ref":"#/definitions/GrowthEffect"},"ProductionEffect":{"$ref":"#/definitions/ProductionEffect"},"WisdomEffect":{"$ref":"#/definitions/WisdomEffect"},"TokenEffect":{"$ref":"#/definitions/TokenEffect"},"TargetEffect":{"$ref":"#/definitions/TargetEffect"},"ChooseFromEffect":{"$ref":"#/definitions/ChooseFromEffect"}}},"Effects":{"type":"array","name":"Effects","description":"Add some Effects","children":{"Effect":{"$ref":"#/definitions/Effect"}},"max":3},"Entity":{"type":"struct","name":"Entity","description":"Build a Entity","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/Abilities"},"Attack":{"$ref":"#/definitions/Attack"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Abilities","Attack","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags §Keywords §RulesText"},"EntityAbilityManipulation":{"type":"struct","name":"Entity Ability Manipulation","description":"Build a Entity Ability Manipulation","children":{"Ability":{"$ref":"#/definitions/Ability"},"AbilityOperator":{"$ref":"#/definitions/AbilityEffectOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["AbilityOperator"],"interactionText":"It §AbilityOperator §Ability.(§Keyword)"},"EntityCondition":{"type":"interface","name":"Entity Condition","description":"Choose a Entity Condition","children":{"EntityIntCondition":{"$ref":"#/definitions/EntityIntCondition"},"EntityStringCondition":{"$ref":"#/definitions/EntityStringCondition"},"EntityTagCondition":{"$ref":"#/definitions/EntityTagCondition"}}},"EntityConditions":{"type":"array","name":"Entity Conditions","description":"Add some Entity Conditions","children":{"EntityCondition":{"$ref":"#/definitions/EntityCondition"}},"max":3},"EntityExtractor":{"type":"interface","name":"Entity Extractor","description":"Choose a Entity Extractor","children":{"EntityIntExtractor":{"$ref":"#/definitions/EntityIntExtractor"},"EntityStringExtractor":{"$ref":"#/definitions/EntityStringExtractor"},"EntityTargetExtractor":{"$ref":"#/definitions/TargetExtractor"}}},"EntityExtractors":{"type":"array","name":"Entity Extractors","description":"Add some Entity Extractors","children":{"EntityExtractor":{"$ref":"#/definitions/EntityExtractor"}},"max":3},"EntityIntCondition":{"type":"struct","name":"Entity Int Condition","description":"Build a Entity Int Condition","children":{"EntityIntProperty":{"$ref":"#/definitions/EntityIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["EntityIntProperty","IntValue","IntComparator"],"interactionText":"with §EntityIntProperty §IntComparator §IntValue"},"EntityIntExtractor":{"type":"struct","name":"Entity Int Extractor","description":"Build a Entity Int Extractor","children":{"ExtractIntProperty":{"$ref":"#/definitions/EntityIntProperty"},"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["ExtractIntProperty","IntVariableName"],"interactionText":"Set §IntVariableName to the entities §ExtractIntProperty."},"EntityIntManipulation":{"type":"struct","name":"Entity Int Manipulation","description":"Build a Entity Int Manipulation","children":{"IntProperty":{"$ref":"#/definitions/EntityIntProperty"},"IntOperator":{"$ref":"#/definitions/IntOperator"},"IntValue":{"$ref":"#/definitions/IntValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["IntProperty","IntOperator","IntValue"],"interactionText":"§IntOperator §IntProperty §IntValue.(§Keyword)"},"EntityIntProperty":{"type":"enum","name":"Entity Int Property","enum":["ATTACK","BASEATTACK","BASECOSTSUM","BASEHEALTH","COSTSUM","HEALTH"]},"EntityManipulation":{"type":"interface","name":"Entity Manipulation","description":"Choose a Entity Manipulation","children":{"EntityAbilityManipulation":{"$ref":"#/definitions/EntityAbilityManipulation"},"EntityIntManipulation":{"$ref":"#/definitions/EntityIntManipulation"},"EntityStringManipulation":{"$ref":"#/definitions/EntityStringManipulation"},"EntityTagManipulation":{"$ref":"#/definitions/EntityTagManipulation"},"EntityZoneChange":{"$ref":"#/definitions/EntityZoneChange"}}},"EntityManipulations":{"type":"array","name":"Entity Manipulations","description":"Add some Entity Manipulations","children":{"EntityManipulation":{"$ref":"#/definitions/EntityManipulation"}},"max":3},"EntitySelector":{"type":"struct","name":"Entity Selector","description":"Build a Entity Selector","children":{"PlayerMode":{"$ref":"#/definitions/PlayerMode"},"PlayerCondition":{"$ref":"#/definitions/PlayerCondition"},"CardMode":{"$ref":"#/definitions/CardMode"},"EntityConditions":{"$ref":"#/definitions/EntityConditions"},"EntityZone":{"$ref":"#/definitions/EntityZone"},"EntityExtractors":{"$ref":"#/definitions/EntityExtractors"},"AmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["PlayerMode","CardMode","EntityZone"],"interactionText":"Choose §CardMode entity §EntityConditions in the §EntityZone of §PlayerMode player §PlayerCondition. §EntityExtractors §AmountExtractor"},"EntityStringCondition":{"type":"struct","name":"Entity String Condition","description":"Build a Entity String Condition","children":{"EntityStringProperty":{"$ref":"#/definitions/EntityStringProperty"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["EntityStringProperty","StringValue","StringComparator"],"interactionText":"with §EntityStringProperty §StringComparator §StringValue"},"EntityStringExtractor":{"type":"struct","name":"Entity String Extractor","description":"Build a Entity String Extractor","children":{"ExtractStringProperty":{"$ref":"#/definitions/EntityStringProperty"},"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["ExtractStringProperty","StringVariableName"],"interactionText":"Set §StringVariableName to the entities §ExtractStringProperty."},"EntityStringManipulation":{"type":"struct","name":"Entity String Manipulation","description":"Build a Entity String Manipulation","children":{"StringProperty":{"$ref":"#/definitions/EntityStringProperty"},"StringOperator":{"$ref":"#/definitions/StringOperator"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["StringProperty","StringOperator","StringValue"],"interactionText":"§StringOperator §StringProperty §StringValue.(§Keyword)"},"EntityStringProperty":{"type":"enum","name":"Entity String Property","enum":["NAME","TEXT"]},"EntityTagCondition":{"type":"struct","name":"Entity Tag Condition","description":"Build a Entity Tag Condition","children":{"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["StringValue","StringComparator"],"interactionText":"with tag §StringComparator §StringValue"},"EntityTagManipulation":{"type":"struct","name":"Entity Tag Manipulation","description":"Build a Entity Tag Manipulation","children":{"TagValue":{"$ref":"#/definitions/Tag"},"TagOperator":{"$ref":"#/definitions/StringOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["TagValue","TagOperator"],"interactionText":"It §TagOperator §TagValue.(§Keyword)"},"EntityTargetEffect":{"type":"struct","name":"Entity Target Effect","description":"Build a Entity Target Effect","children":{"EntitySelector":{"$ref":"#/definitions/EntitySelector"},"EntityManipulations":{"$ref":"#/definitions/EntityManipulations"}},"required":["EntitySelector","EntityManipulations"],"interactionText":"§EntitySelector §EntityManipulations"},"EntityZone":{"type":"enum","name":"Entity Zone","enum":["ATTACKLANE","BLOCKLANE","DECK","DUSTPILE","FIELD","HAND","VOID"]},"EntityZoneChange":{"type":"struct","name":"Entity Zone Change","description":"Build a Entity Zone Change","children":{"Zone":{"$ref":"#/definitions/EntityZone"},"Player":{"$ref":"#/definitions/PlayerMode"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["Zone","Player"],"interactionText":"Put it into §Player §Zone.(§Keyword)"},"EventListener":{"type":"interface","name":"Event Listener","description":"Choose a Event Listener","children":{"AttackEventListener":{"$ref":"#/definitions/AttackEventListener"},"BlockEventListener":{"$ref":"#/definitions/BlockEventListener"},"ManipulationEventListener":{"$ref":"#/definitions/ManipulationEventListener"},"ProductionEventListener":{"$ref":"#/definitions/ProductionEventListener"},"TimeEventListener":{"$ref":"#/definitions/TimeEventListener"},"ZoneChangeEventListener":{"$ref":"#/definitions/ZoneChangeEventListener"}}},"ExtractorTargetEffect":{"type":"struct","name":"Extractor Target Effect","description":"Build a Extractor Target Effect","children":{"TargetVariable":{"$ref":"#/definitions/TargetVariableName"},"Manipulations":{"$ref":"#/definitions/Manipulations"}},"required":["TargetVariable","Manipulations"],"interactionText":"Choose §TargetVariable. §Manipulations"},"FlavourText":{"type":"string","name":"Flavour Text","max":1000,"min":1},"GrowthEffect":{"type":"struct","name":"Growth Effect","description":"Build a Growth Effect","children":{"Keyword":{"$ref":"#/definitions/Keyword"},"GrowthAmount":{"$ref":"#/definitions/IntValue"}},"required":["GrowthAmount"],"interactionText":"Gain §GrowthAmount growth. (§Keyword)"},"Headquarter":{"type":"struct","name":"Headquarter","description":"Build a Headquarter","children":{"CardName":{"$ref":"#/definitions/CardName"},"Class":{"$ref":"#/definitions/Class"},"Delay":{"$ref":"#/definitions/Delay"},"Abilities":{"$ref":"#/definitions/Abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","Class","Delay","Abilities","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §Class §Delay §Abilities §Health §FlavourText §Tags §Keywords §RulesText"},"HeadquarterAbilityManipulation":{"type":"struct","name":"Headquarter Ability Manipulation","description":"Build a Headquarter Ability Manipulation","children":{"Ability":{"$ref":"#/definitions/Ability"},"AbilityOperator":{"$ref":"#/definitions/AbilityEffectOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["AbilityOperator"],"interactionText":"It §AbilityOperator §Effect.(§Keyword)"},"HeadquarterCondition":{"type":"interface","name":"Headquarter Condition","description":"Choose a Headquarter Condition","children":{"HeadquarterIntCondition":{"$ref":"#/definitions/HeadquarterIntCondition"},"HeadquarterStringCondition":{"$ref":"#/definitions/HeadquarterStringCondition"},"HeadquarterTagCondition":{"$ref":"#/definitions/HeadquarterTagCondition"}}},"HeadquarterConditions":{"type":"array","name":"Headquarter Conditions","description":"Add some Headquarter Conditions","children":{"HeadquarterCondition":{"$ref":"#/definitions/HeadquarterCondition"}},"max":3},"HeadquarterExtractor":{"type":"interface","name":"Headquarter Extractor","description":"Choose a Headquarter Extractor","children":{"HeadquarterIntExtractor":{"$ref":"#/definitions/HeadquarterIntExtractor"},"HeadquarterStringExtractor":{"$ref":"#/definitions/HeadquarterStringExtractor"},"HeadquarterTargetExtractor":{"$ref":"#/definitions/TargetExtractor"}}},"HeadquarterExtractors":{"type":"array","name":"Headquarter Extractors","description":"Add some Headquarter Extractors","children":{"HeadquarterExtractor":{"$ref":"#/definitions/HeadquarterExtractor"}},"max":3},"HeadquarterIntCondition":{"type":"struct","name":"Headquarter Int Condition","description":"Build a Headquarter Int Condition","children":{"HeadquarterIntProperty":{"$ref":"#/definitions/HeadquarterIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["HeadquarterIntProperty","IntValue","IntComparator"],"interactionText":"with §HeadquarterIntProperty §IntComparator §IntValue"},"HeadquarterIntExtractor":{"type":"struct","name":"Headquarter Int Extractor","description":"Build a Headquarter Int Extractor","children":{"ExtractIntProperty":{"$ref":"#/definitions/HeadquarterIntProperty"},"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["ExtractIntProperty","IntVariableName"],"interactionText":"Set §IntVariableName to the actions §ExtractIntProperty."},"HeadquarterIntManipulation":{"type":"struct","name":"Headquarter Int Manipulation","description":"Build a Headquarter Int Manipulation","children":{"IntProperty":{"$ref":"#/definitions/HeadquarterIntProperty"},"IntOperator":{"$ref":"#/definitions/IntOperator"},"IntValue":{"$ref":"#/definitions/IntValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["IntProperty","IntOperator","IntValue"],"interactionText":"§IntOperator §IntProperty §IntValue.(§Keyword)"},"HeadquarterIntProperty":{"type":"enum","name":"Headquarter Int Property","enum":["BASEHEALTH","HEALTH"]},"HeadquarterManipulation":{"type":"interface","name":"Headquarter Manipulation","description":"Choose a Headquarter Manipulation","children":{"HeadquarterEffectManipulation":{"$ref":"#/definitions/HeadquarterAbilityManipulation"},"HeadquarterIntManipulation":{"$ref":"#/definitions/HeadquarterIntManipulation"},"HeadquarterStringManipulation":{"$ref":"#/definitions/HeadquarterStringManipulation"},"HeadquarterTagManipulation":{"$ref":"#/definitions/HeadquarterTagManipulation"}}},"HeadquarterManipulations":{"type":"array","name":"Headquarter Manipulations","description":"Add some Headquarter Manipulations","children":{"HeadquarterManipulation":{"$ref":"#/definitions/HeadquarterManipulation"}},"max":3},"HeadquarterSelector":{"type":"struct","name":"Headquarter Selector","description":"Build a Headquarter Selector","children":{"PlayerMode":{"$ref":"#/definitions/PlayerMode"},"PlayerCondition":{"$ref":"#/definitions/PlayerCondition"},"CardMode":{"$ref":"#/definitions/CardMode"},"HeadquarterConditions":{"$ref":"#/definitions/HeadquarterConditions"},"HeadquarterExtractors":{"$ref":"#/definitions/HeadquarterExtractors"},"AmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["PlayerMode","CardMode"],"interactionText":"Choose §CardMode action §HeadquarterConditions in the §HeadquarterZone of §PlayerMode player §PlayerCondition. §HeadquarterExtractors §AmountExtractor"},"HeadquarterStringCondition":{"type":"struct","name":"Headquarter String Condition","description":"Build a Headquarter String Condition","children":{"HeadquarterStringProperty":{"$ref":"#/definitions/HeadquarterStringProperty"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["HeadquarterStringProperty","StringValue","StringComparator"],"interactionText":"with §HeadquarterStringProperty §StringComparator §StringValue"},"HeadquarterStringExtractor":{"type":"struct","name":"Headquarter String Extractor","description":"Build a Headquarter String Extractor","children":{"ExtractStringProperty":{"$ref":"#/definitions/HeadquarterStringProperty"},"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["ExtractStringProperty","StringVariableName"],"interactionText":"Set §StringVariableName to the actions §ExtractStringProperty."},"HeadquarterStringManipulation":{"type":"struct","name":"Headquarter String Manipulation","description":"Build a Headquarter String Manipulation","children":{"StringProperty":{"$ref":"#/definitions/HeadquarterStringProperty"},"StringOperator":{"$ref":"#/definitions/StringOperator"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["StringProperty","StringOperator","StringValue"],"interactionText":"§StringOperator §StringProperty §StringValue.(§Keyword)"},"HeadquarterStringProperty":{"type":"enum","name":"Headquarter String Property","enum":["NAME","TEXT"]},"HeadquarterTagCondition":{"type":"struct","name":"Headquarter Tag Condition","description":"Build a Headquarter Tag Condition","children":{"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["StringValue","StringComparator"],"interactionText":"with tag §StringComparator §StringValue"},"HeadquarterTagManipulation":{"type":"struct","name":"Headquarter Tag Manipulation","description":"Build a Headquarter Tag Manipulation","children":{"TagValue":{"$ref":"#/definitions/Tag"},"TagOperator":{"$ref":"#/definitions/StringOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["TagValue","TagOperator"],"interactionText":"§TagOperator tag §TagValue.(§Keyword)"},"HeadquarterTargetEffect":{"type":"struct","name":"Headquarter Target Effect","description":"Build a Headquarter Target Effect","children":{"HeadquarterSelector":{"$ref":"#/definitions/HeadquarterSelector"},"HeadquarterManipulations":{"$ref":"#/definitions/HeadquarterManipulations"}},"required":["HeadquarterSelector","HeadquarterManipulations"],"interactionText":"§HeadquarterSelector §HeadquarterManipulations"},"Health":{"type":"int","name":"Health","max":32},"IntChangeMode":{"type":"enum","name":"Int Change Mode","enum":["INCREASES","DECREASES","CHANGES"]},"IntComparator":{"type":"enum","name":"Int Comparator","enum":["EQUAL","GREATER","LESSER"]},"IntExtractor":{"type":"struct","name":"Int Extractor","description":"Build a Int Extractor","children":{"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["IntVariableName"],"interactionText":"Set §IntVariableName."},"IntManipulationEventListener":{"type":"struct","name":"Int Manipulation Event Listener","description":"Build a Int Manipulation Event Listener","children":{"IntProperty":{"$ref":"#/definitions/CardIntProperty"},"IntChangeMode":{"$ref":"#/definitions/IntChangeMode"},"CardCondition":{"$ref":"#/definitions/CardConditions"},"ManipulatedCardExtractor":{"$ref":"#/definitions/CardExtractors"},"ManipulationValueExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["IntProperty","IntChangeMode"],"interactionText":"Whenever §IntProperty on card §CardCondition §IntChangeMode. §ManipulatedCardExtractors §ManipulationValueExtractor"},"IntOperator":{"type":"enum","name":"Int Operator","enum":["SET","ADD","SUBTRACT"]},"IntValue":{"type":"interface","name":"Int Value","description":"Choose a Int Value","children":{"ComplexIntValue":{"$ref":"#/definitions/ComplexIntValue"},"SimpleIntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntVariable":{"$ref":"#/definitions/IntVariableName"}}},"IntVariableName":{"type":"enum","name":"Int Variable Name","enum":["X","Y","Z"]},"Keyword":{"type":"enum","name":"Keyword","enum":["ANTHEM","ARM","ARRIVAL","BATTLECRY","HARM","KILL","ONCONSTRUCTION","ONDEATH","ONSPAWN","PAY","PERIODIC","PRODUCE","REPAIR","TRIBUTE"]},"Keywords":{"type":"array","name":"Keywords","description":"Add some Keywords","children":{"Keyword":{"$ref":"#/definitions/Keyword"}},"max":3,"min":1},"ManaCost":{"type":"struct","name":"Mana Cost","description":"Build a Mana Cost","children":{"CostAmount":{"$ref":"#/definitions/BasicAmount"}},"required":["CostAmount"],"interactionText":"§CostAmount mana"},"ManipulationEventListener":{"type":"interface","name":"Manipulation Event Listener","description":"Choose a Manipulation Event Listener","children":{"IntManipulationEventListener":{"$ref":"#/definitions/IntManipulationEventListener"},"StringManipulationEventListener":{"$ref":"#/definitions/StringManipulationEventListener"}}},"Manipulations":{"type":"interface","name":"Manipulations","description":"Choose a Manipulations","children":{"ActionManipulations":{"$ref":"#/definitions/ActionManipulations"},"EntityManipulations":{"$ref":"#/definitions/EntityManipulations"},"HeadquarterManipulations":{"$ref":"#/definitions/HeadquarterManipulations"},"PlaceManipulations":{"$ref":"#/definitions/PlaceManipulations"}}},"Mysticism":{"type":"bool","name":"Mysticism"},"Nature":{"type":"bool","name":"Nature"},"Place":{"type":"struct","name":"Place","description":"Build a Place","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/Abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Abilities","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags §Keywords §RulesText"},"PlaceAbilityManipulation":{"type":"struct","name":"Place Ability Manipulation","description":"Build a Place Ability Manipulation","children":{"Ability":{"$ref":"#/definitions/Ability"},"AbilityOperator":{"$ref":"#/definitions/AbilityEffectOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["AbilityOperator"],"interactionText":"It §AbilityOperator §Ability.(§Keyword)"},"PlaceCondition":{"type":"interface","name":"Place Condition","description":"Choose a Place Condition","children":{"PlaceIntCondition":{"$ref":"#/definitions/PlaceIntCondition"},"PlaceStringCondition":{"$ref":"#/definitions/PlaceStringCondition"},"PlaceTagCondition":{"$ref":"#/definitions/PlaceTagCondition"}}},"PlaceConditions":{"type":"array","name":"Place Conditions","description":"Add some Place Conditions","children":{"PlaceCondition":{"$ref":"#/definitions/PlaceCondition"}},"max":3},"PlaceExtractor":{"type":"interface","name":"Place Extractor","description":"Choose a Place Extractor","children":{"PlaceIntExtractor":{"$ref":"#/definitions/PlaceIntExtractor"},"PlaceStringExtractor":{"$ref":"#/definitions/PlaceStringExtractor"},"PlaceTargetExtractor":{"$ref":"#/definitions/TargetExtractor"}}},"PlaceExtractors":{"type":"array","name":"Place Extractors","description":"Add some Place Extractors","children":{"PlaceExtractor":{"$ref":"#/definitions/PlaceExtractor"}},"max":3},"PlaceIntCondition":{"type":"struct","name":"Place Int Condition","description":"Build a Place Int Condition","children":{"PlaceIntProperty":{"$ref":"#/definitions/PlaceIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["PlaceIntProperty","IntValue","IntComparator"],"interactionText":"with §PlaceIntProperty §IntComparator §IntValue"},"PlaceIntExtractor":{"type":"struct","name":"Place Int Extractor","description":"Build a Place Int Extractor","children":{"ExtractIntProperty":{"$ref":"#/definitions/PlaceIntProperty"},"IntVariableName":{"$ref":"#/definitions/IntVariableName"}},"required":["ExtractIntProperty","IntVariableName"],"interactionText":"Set §IntVariableName to the places §ExtractIntProperty."},"PlaceIntManipulation":{"type":"struct","name":"Place Int Manipulation","description":"Build a Place Int Manipulation","children":{"IntProperty":{"$ref":"#/definitions/PlaceIntProperty"},"IntOperator":{"$ref":"#/definitions/IntOperator"},"IntValue":{"$ref":"#/definitions/IntValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["IntProperty","IntOperator","IntValue"],"interactionText":"§IntOperator §IntProperty §IntValue.(§Keyword)"},"PlaceIntProperty":{"type":"enum","name":"Place Int Property","enum":["BASECOSTSUM","BASEHEALTH","COSTSUM","HEALTH"]},"PlaceManipulation":{"type":"interface","name":"Place Manipulation","description":"Choose a Place Manipulation","children":{"PlaceAbilityManipulation":{"$ref":"#/definitions/PlaceAbilityManipulation"},"PlaceIntManipulation":{"$ref":"#/definitions/PlaceIntManipulation"},"PlaceStringManipulation":{"$ref":"#/definitions/PlaceStringManipulation"},"PlaceTagManipulation":{"$ref":"#/definitions/PlaceTagManipulation"},"PlaceZoneChange":{"$ref":"#/definitions/PlaceZoneChange"}}},"PlaceManipulations":{"type":"array","name":"Place Manipulations","description":"Add some Place Manipulations","children":{"PlaceManipulation":{"$ref":"#/definitions/PlaceManipulation"}},"max":3},"PlaceSelector":{"type":"struct","name":"Place Selector","description":"Build a Place Selector","children":{"PlayerMode":{"$ref":"#/definitions/PlayerMode"},"PlayerCondition":{"$ref":"#/definitions/PlayerCondition"},"CardMode":{"$ref":"#/definitions/CardMode"},"PlaceConditions":{"$ref":"#/definitions/PlaceConditions"},"PlaceZone":{"$ref":"#/definitions/PlaceZone"},"PlaceExtractors":{"$ref":"#/definitions/PlaceExtractors"},"AmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"required":["PlayerMode","CardMode","PlaceZone"],"interactionText":"Choose §CardMode place §PlaceConditions in the §PlaceZone of §PlayerMode player §PlayerCondition. §PlaceExtractors §AmountExtractor"},"PlaceStringCondition":{"type":"struct","name":"Place String Condition","description":"Build a Place String Condition","children":{"PlaceStringProperty":{"$ref":"#/definitions/PlaceStringProperty"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["PlaceStringProperty","StringValue","StringComparator"],"interactionText":"with §PlaceStringProperty §StringComparator §StringValue"},"PlaceStringExtractor":{"type":"struct","name":"Place String Extractor","description":"Build a Place String Extractor","children":{"ExtractStringProperty":{"$ref":"#/definitions/PlaceStringProperty"},"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["ExtractStringProperty","StringVariableName"],"interactionText":"Set §StringVariableName to the places §ExtractStringProperty."},"PlaceStringManipulation":{"type":"struct","name":"Place String Manipulation","description":"Build a Place String Manipulation","children":{"StringProperty":{"$ref":"#/definitions/PlaceStringProperty"},"StringOperator":{"$ref":"#/definitions/StringOperator"},"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["StringProperty","StringOperator","StringValue"],"interactionText":"§StringOperator §StringProperty §StringValue.(§Keyword)"},"PlaceStringProperty":{"type":"enum","name":"Place String Property","enum":["NAME","TEXT"]},"PlaceTagCondition":{"type":"struct","name":"Place Tag Condition","description":"Build a Place Tag Condition","children":{"StringValue":{"$ref":"#/definitions/SimpleStringValue"},"StringComparator":{"$ref":"#/definitions/StringComparator"}},"required":["StringValue","StringComparator"],"interactionText":"with tag §StringComparator §StringValue"},"PlaceTagManipulation":{"type":"struct","name":"Place Tag Manipulation","description":"Build a Place Tag Manipulation","children":{"TagValue":{"$ref":"#/definitions/Tag"},"TagOperator":{"$ref":"#/definitions/StringOperator"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["TagValue","TagOperator"],"interactionText":"It §TagOperator §TagValue.(§Keyword)"},"PlaceTargetEffect":{"type":"struct","name":"Place Target Effect","description":"Build a Place Target Effect","children":{"PlaceSelector":{"$ref":"#/definitions/PlaceSelector"},"PlaceManipulations":{"$ref":"#/definitions/PlaceManipulations"}},"required":["PlaceSelector","PlaceManipulations"],"interactionText":"§PlaceSelector §PlaceManipulations"},"PlaceZone":{"type":"enum","name":"Place Zone","enum":["DECK","DUSTPILE","FIELD","HAND","VOID"]},"PlaceZoneChange":{"type":"struct","name":"Place Zone Change","description":"Build a Place Zone Change","children":{"Zone":{"$ref":"#/definitions/PlaceZone"},"Player":{"$ref":"#/definitions/PlayerMode"},"Keyword":{"$ref":"#/definitions/Keyword"}},"required":["Zone","Player"],"interactionText":"Put it into §Player §Zone.(§Keyword)"},"PlayerCondition":{"type":"interface","name":"Player Condition","description":"Choose a Player Condition","children":{"PlayerIntCondition":{"$ref":"#/definitions/PlayerIntCondition"}}},"PlayerIntCondition":{"type":"struct","name":"Player Int Condition","description":"Build a Player Int Condition","children":{"PlayerIntProperty":{"$ref":"#/definitions/PlayerIntProperty"},"IntValue":{"$ref":"#/definitions/SimpleIntValue"},"IntComparator":{"$ref":"#/definitions/IntComparator"}},"required":["PlayerIntProperty","IntValue","IntComparator"],"interactionText":"with §PlayerIntProperty §IntComparator §IntValue"},"PlayerIntProperty":{"type":"enum","name":"Player Int Property","enum":["HANDSIZE","BOARDSIZE","DECKSIZE"]},"PlayerMode":{"type":"enum","name":"Player Mode","enum":["YOU","OPPONENT"]},"ProductionEffect":{"type":"struct","name":"Production Effect","description":"Build a Production Effect","children":{"Keyword":{"$ref":"#/definitions/Keyword"},"Amount":{"$ref":"#/definitions/IntValue"}},"required":["Amount"],"interactionText":"Produce §Amount. (§Keyword)"},"ProductionEventListener":{"type":"struct","name":"Production Event Listener","description":"Build a Production Event Listener","children":{"ClassCondition":{"$ref":"#/definitions/Class"},"ProductionAmountExtractor":{"$ref":"#/definitions/IntExtractor"}},"interactionText":"Whenever one or more §ClassCondition mana is produced. §ProductionAmountExtractor"},"RulesText":{"type":"string","name":"Rules Text","max":1000,"min":1},"SacrificeCost":{"type":"struct","name":"Sacrifice Cost","description":"Build a Sacrifice Cost","children":{"Amount":{"$ref":"#/definitions/BasicAmount"},"Conditions":{"$ref":"#/definitions/CardConditions"}},"required":["Amount","Conditions"],"interactionText":"Sacrifice §Amount card §Conditions"},"SimpleIntValue":{"type":"int","name":"Simple Int Value","max":32},"SimpleStringValue":{"type":"string","name":"Simple String Value","max":32,"min":1},"StringChangeMode":{"type":"enum","name":"String Change Mode","enum":["CHANGES"]},"StringComparator":{"type":"enum","name":"String Comparator","enum":["EQUAL","CONTAINS","UNEQUAL","CONTAINSNOT"]},"StringExtractor":{"type":"struct","name":"String Extractor","description":"Build a String Extractor","children":{"StringVariableName":{"$ref":"#/definitions/StringVariableName"}},"required":["StringVariableName"],"interactionText":"Set §StringVariableName."},"StringManipulationEventListener":{"type":"struct","name":"String Manipulation Event Listener","description":"Build a String Manipulation Event Listener","children":{"StringProperty":{"$ref":"#/definitions/CardStringProperty"},"StringChangeMode":{"$ref":"#/definitions/StringChangeMode"},"CardCondition":{"$ref":"#/definitions/CardConditions"},"ManipulatedCardExtractor":{"$ref":"#/definitions/CardExtractors"},"ManipulationValueExtractor":{"$ref":"#/definitions/StringExtractor"}},"required":["StringProperty","StringChangeMode"],"interactionText":"Whenever §StringProperty §StringChangeMode on a card §CardCondition. §ManipulatedCardExtractors §ManipulationValueExtractor"},"StringOperator":{"type":"enum","name":"String Operator","enum":["SET"]},"StringVariableName":{"type":"enum","name":"String Variable Name","enum":["A","B","C"]},"Tag":{"type":"enum","name":"Tag","enum":["ANIMAL","BOT","DWARF","ENGINEER","EQUIPMENT","FARM","FIRE","HUMAN","KNIGHT","MAGIC","MILITANT","PRIMITIVE","RANGE","SPIRITUAL","TACTIC","TECHNOCRAT"]},"Tags":{"type":"array","name":"Tags","description":"Add some Tags","children":{"Tag":{"$ref":"#/definitions/Tag"}},"max":3,"min":1},"TargetEffect":{"type":"interface","name":"Target Effect","description":"Choose a Target Effect","children":{"ActionTargetEffect":{"$ref":"#/definitions/ActionTargetEffect"},"EntityTargetEffect":{"$ref":"#/definitions/EntityTargetEffect"},"HeadquarterTargetEffect":{"$ref":"#/definitions/HeadquarterTargetEffect"},"PlaceTargetEffect":{"$ref":"#/definitions/PlaceTargetEffect"},"ExtractorTargetEffect":{"$ref":"#/definitions/ExtractorTargetEffect"}}},"TargetExtractor":{"type":"struct","name":"Target Extractor","description":"Build a Target Extractor","children":{"TargetVariableName":{"$ref":"#/definitions/TargetVariableName"}},"required":["TargetVariableName"],"interactionText":"That card is marked as §TargetVariableName."},"TargetVariableName":{"type":"enum","name":"Target Variable Name","enum":["M","T"]},"Technology":{"type":"bool","name":"Technology"},"ThisCondition":{"type":"struct","name":"This Condition","description":"Build a This Condition","children":{},"interactionText":"this"},"TimeEvent":{"type":"enum","name":"Time Event","enum":["COMBAT","TICKSTART"]},"TimeEventListener":{"type":"struct","name":"Time Event Listener","description":"Build a Time Event Listener","children":{"TimeEvent":{"$ref":"#/definitions/TimeEvent"}},"required":["TimeEvent"],"interactionText":"Every §TimeEvent"},"Token":{"type":"struct","name":"Token","description":"Build a Token","children":{"Name":{"$ref":"#/definitions/CardName"},"Attack":{"$ref":"#/definitions/Attack"},"Health":{"$ref":"#/definitions/Health"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["Attack","Health"],"interactionText":"§Attack / §Health token named §Name tagged §Tags"},"TokenEffect":{"type":"struct","name":"Token Effect","description":"Build a Token Effect","children":{"Keyword":{"$ref":"#/definitions/Keyword"},"TokenAmount":{"$ref":"#/definitions/IntValue"},"Token":{"$ref":"#/definitions/Token"}},"required":["TokenAmount","Token"],"interactionText":"Create §TokenAmount §Token. (§Keyword)"},"TriggeredAbility":{"type":"struct","name":"Triggered Ability","description":"Build a Triggered Ability","children":{"Cause":{"$ref":"#/definitions/EventListener"},"Cost":{"$ref":"#/definitions/Cost"},"Effects":{"$ref":"#/definitions/Effects"}},"required":["Cause","Effects"],"interactionText":"§Cause , §Cost : §Effects \n"},"VoidCost":{"type":"struct","name":"Void Cost","description":"Build a Void Cost","children":{"Amount":{"$ref":"#/definitions/BasicAmount"},"Conditions":{"$ref":"#/definitions/CardConditions"}},"required":["Amount","Conditions"],"interactionText":"Void §Amount card §Conditions"},"WisdomEffect":{"type":"struct","name":"Wisdom Effect","description":"Build a Wisdom Effect","children":{"Keyword":{"$ref":"#/definitions/Keyword"}},"interactionText":"Gain §WisdomAmount wisdom. (§Keyword)"},"Zone":{"type":"enum","name":"Zone","enum":["DECK","DUSTPILE","FIELD","HAND","VOID"]},"ZoneChangeEventListener":{"type":"struct","name":"Zone Change Event Listener","description":"Build a Zone Change Event Listener","children":{"Source":{"$ref":"#/definitions/DynamicZone"},"Destination":{"$ref":"#/definitions/Zone"},"CardCondition":{"$ref":"#/definitions/CardConditions"},"MovedCardExtractors":{"$ref":"#/definitions/CardExtractors"}},"interactionText":"Whenever a card §CardCondition gets put from §Source to §Destination. §MovedCardExtractors"}}} \ No newline at end of file diff --git a/cardobject/card.go b/cardobject/card.go index 31c254c..18b4ecb 100644 --- a/cardobject/card.go +++ b/cardobject/card.go @@ -26,6 +26,8 @@ type Action struct { Effects Effects FlavourText FlavourText Tags Tags + Keywords Keywords + RulesText RulesText } func (a Action) Validate() error { @@ -37,7 +39,7 @@ func (a Action) ValidateStruct() error { } func (a Action) InteractionText() string { - return "§CardName §CastingCost §Class §Effects §FlavourText §Tags" + return "§CardName §CastingCost §Class §Effects §FlavourText §Tags §Keywords §RulesText" } type Entity struct { @@ -49,6 +51,8 @@ type Entity struct { Health Health FlavourText FlavourText Tags Tags + Keywords Keywords + RulesText RulesText } func (e Entity) Validate() error { @@ -60,7 +64,7 @@ func (e Entity) ValidateStruct() error { } func (a Entity) InteractionText() string { - return "§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags" + return "§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags §Keywords §RulesText" } type Place struct { @@ -71,6 +75,8 @@ type Place struct { Health Health FlavourText FlavourText Tags Tags + Keywords Keywords + RulesText RulesText } func (p Place) Validate() error { @@ -82,7 +88,7 @@ func (p Place) ValidateStruct() error { } func (a Place) InteractionText() string { - return "§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags" + return "§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags §Keywords §RulesText" } type Headquarter struct { @@ -93,6 +99,8 @@ type Headquarter struct { Health Health FlavourText FlavourText Tags Tags + Keywords Keywords + RulesText RulesText } func (h Headquarter) Validate() error { @@ -104,5 +112,5 @@ func (h Headquarter) ValidateStruct() error { } func (a Headquarter) InteractionText() string { - return "§CardName §Class §Delay §Abilities §Health §FlavourText §Tags" + return "§CardName §Class §Delay §Abilities §Health §FlavourText §Tags §Keywords §RulesText" } diff --git a/cardobject/keyword.go b/cardobject/keyword.go index 226dd49..644fc9d 100644 --- a/cardobject/keyword.go +++ b/cardobject/keyword.go @@ -52,6 +52,31 @@ const Tribute = "TRIBUTE" var possibleKeywords []string = []string{ Anthem, Arm, Arrival, Battlecry, Harm, Kill, OnConstruction, OnDeath, OnSpawn, Pay, Periodic, Produce, Repair, Tribute} +type Keywords []Keyword + +func (k Keywords) Validate() error { + return k.ValidateArray() +} + +func (k Keywords) ValidateArray() error { + errorRange := []error{} + for _, v := range k { + err := v.Validate() + if err != nil { + errorRange = append(errorRange, err) + } + } + return jsonschema.CombineErrors(errorRange) +} + +func (k Keywords) MinMaxItems() (int, int) { + return 1, 3 +} + +func (k Keywords) ItemName() string { + return jsonschema.ItemNameFromArray(k) +} + type Keyword jsonschema.BasicString func (k Keyword) Validate() error { diff --git a/cardobject/testJsons/actionTest1.json b/cardobject/testJsons/actionTest1.json index 26911a7..3804733 100644 --- a/cardobject/testJsons/actionTest1.json +++ b/cardobject/testJsons/actionTest1.json @@ -10,6 +10,7 @@ "Culture":false }, "CastingCost":13, + "RulesText": "This could be your RulesText", "Effects":[ { "TargetEffect":{ diff --git a/cardobject/testJsons/entityTest1.json b/cardobject/testJsons/entityTest1.json index 19c4dcb..da8610b 100644 --- a/cardobject/testJsons/entityTest1.json +++ b/cardobject/testJsons/entityTest1.json @@ -1 +1 @@ -{"Entity":{"CardName":"Name","Tags":["TECHNOCRAT"],"FlavourText":"asdf","Class":{"Technology":false,"Nature":false,"Mysticism":false,"Culture":true},"CastingCost":15,"Abilities":[{"ActivatedAbility":{"path":["children","Entity","children","Abilities","children","Ability","children"],"AbilityCost":{"RessourceCost":{"RessourceCostType":{"Nature":true},"CostAmount":2}}}}],"Health":0,"Attack":0}} \ No newline at end of file +{"Entity":{"CardName":"Name","Tags":["TECHNOCRAT"],"FlavourText":"asdf","Class":{"Technology":false,"Nature":false,"Mysticism":false,"Culture":true},"CastingCost":15,"RulesText": "This could be your RulesText","Abilities":[{"ActivatedAbility":{"path":["children","Entity","children","Abilities","children","Ability","children"],"AbilityCost":{"RessourceCost":{"RessourceCostType":{"Nature":true},"CostAmount":2}}}}],"Health":0,"Attack":0}} \ No newline at end of file diff --git a/cardobject/testJsons/place1Test.json b/cardobject/testJsons/place1Test.json index 033e036..7cc045f 100644 --- a/cardobject/testJsons/place1Test.json +++ b/cardobject/testJsons/place1Test.json @@ -1 +1 @@ -{"Place":{"CardName":"Mühle","CastingCost":2,"Class":{"Nature":false,"Mysticism":false,"Technology":true,"Culture":false},"Abilities":[],"Health":3,"FlavourText":"lulul","Tags":["PRIMITIVE"]}} \ No newline at end of file +{"Place":{"CardName":"Mühle","CastingCost":2,"RulesText": "This could be your RulesText","Class":{"Nature":false,"Mysticism":false,"Technology":true,"Culture":false},"Abilities":[],"Health":3,"FlavourText":"lulul","Tags":["PRIMITIVE"]}} \ No newline at end of file diff --git a/cardobject/validatePrimitives.go b/cardobject/validatePrimitives.go index d31da9b..521756a 100644 --- a/cardobject/validatePrimitives.go +++ b/cardobject/validatePrimitives.go @@ -27,6 +27,8 @@ const maxGrowth = 32 const minGrowth = 0 const maxHealth int = 32 const minHealth int = 0 +const maxRulesTextLength int = 1000 +const minRulesTextLength int = 1 const maxSimpleInt int = 32 const minSimpleInt int = 0 const maxSimpleStringLength = 32 @@ -184,6 +186,25 @@ func (h Health) MinMax() (int, int) { return minHealth, maxHealth } +type RulesText jsonschema.BasicString + +func (r RulesText) Validate() error { + return r.ValidateString() +} + +func (r RulesText) ValidateString() error { + minLength, maxLength := r.MinMaxLength() + length := len(string(r)) + if length < minLength || length > maxLength { + return errors.New("RulesText must be between " + strconv.Itoa(minLength) + " and " + strconv.Itoa(maxLength) + " characters long") + } + return nil +} + +func (r RulesText) MinMaxLength() (int, int) { + return minRulesTextLength, maxRulesTextLength +} + type StartingHandsize jsonschema.BasicInt func (s StartingHandsize) Validate() error { diff --git a/keywordedSchema.json b/keywordedSchema.json index b6829e9..c425413 100644 --- a/keywordedSchema.json +++ b/keywordedSchema.json @@ -1 +1 @@ -{"Card":{"$ref":"#/definitions/card"},"definitions":{"Attack":{"type":"int","name":"Attack","max":32},"CardName":{"type":"string","name":"Card Name","max":32,"min":1},"CastingCost":{"type":"int","name":"Casting Cost","max":32},"Class":{"type":"struct","name":"Class","description":"Build a Class","children":{"Nature":{"$ref":"#/definitions/Nature"},"Mysticism":{"$ref":"#/definitions/Mysticism"},"Technology":{"$ref":"#/definitions/Technology"},"Culture":{"$ref":"#/definitions/Culture"}},"required":["Nature","Mysticism","Technology","Culture"],"interactionText":"§Nature §Mysticism §Technology §Culture"},"Culture":{"type":"bool","name":"Culture"},"Delay":{"type":"int","name":"Delay","max":32},"FlavourText":{"type":"string","name":"Flavour Text","max":1000,"min":1},"Health":{"type":"int","name":"Health","max":32},"Mysticism":{"type":"bool","name":"Mysticism"},"Nature":{"type":"bool","name":"Nature"},"SimpleIntValue":{"type":"int","name":"Simple Int Value","max":32},"Tag":{"type":"enum","name":"Tag","enum":["ANIMAL","BOT","DWARF","ENGINEER","EQUIPMENT","FARM","FIRE","HUMAN","KNIGHT","MAGIC","MILITANT","PRIMITIVE","RANGE","SPIRITUAL","TACTIC","TECHNOCRAT"]},"Tags":{"type":"array","name":"Tags","description":"Add some Tags","children":{"Tag":{"$ref":"#/definitions/Tag"}},"max":3,"min":1},"Technology":{"type":"bool","name":"Technology"},"abilities":{"type":"array","name":"Abilities","description":"Add some Abilities","children":{"Ability":{"$ref":"#/definitions/ability"}},"max":3},"ability":{"type":"interface","name":"Ability","description":"Choose a Ability","children":{"Arrival":{"$ref":"#/definitions/arrival"},"Battlecry":{"$ref":"#/definitions/battlecry"},"OnConstruction":{"$ref":"#/definitions/onConstruction"},"OnDeath":{"$ref":"#/definitions/onDeath"},"OnSpawn":{"$ref":"#/definitions/onSpawn"},"Pay":{"$ref":"#/definitions/pay"},"Periodic":{"$ref":"#/definitions/periodic"},"Tribute":{"$ref":"#/definitions/tribute"}}},"action":{"type":"struct","name":"Action","description":"Build a Action","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Effects":{"$ref":"#/definitions/effects"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["CardName","CastingCost","Class","Effects","FlavourText","Tags"],"interactionText":"§CardName §CastingCost §Class §Effects §FlavourText §Tags"},"anthem":{"type":"struct","name":"Anthem","description":"Build a Anthem","children":{"Tag":{"$ref":"#/definitions/Tag"}},"required":["Tag"],"interactionText":"Anthem §Tag."},"arm":{"type":"struct","name":"Arm","description":"Build a Arm","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Arm §Amount."},"arrival":{"type":"struct","name":"Arrival","description":"Build a Arrival","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When another entity spawns activate: §Effects."},"battlecry":{"type":"struct","name":"Battlecry","description":"Build a Battlecry","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"At the beginning of each combat activate: §Effects."},"card":{"type":"interface","name":"Card","description":"Choose a Card","children":{"Action":{"$ref":"#/definitions/action"},"Entity":{"$ref":"#/definitions/entity"},"Place":{"$ref":"#/definitions/place"},"Headquarter":{"$ref":"#/definitions/headquarter"}}},"effect":{"type":"interface","name":"Effect","description":"Choose a Effect","children":{"Anthem":{"$ref":"#/definitions/anthem"},"Arm":{"$ref":"#/definitions/arm"},"Harm":{"$ref":"#/definitions/harm"},"Kill":{"$ref":"#/definitions/kill"},"Produce":{"$ref":"#/definitions/produce"},"Repair":{"$ref":"#/definitions/repair"}}},"effects":{"type":"array","name":"Effects","description":"Add some Effects","children":{"Effect":{"$ref":"#/definitions/effect"}},"max":3},"entity":{"type":"struct","name":"Entity","description":"Build a Entity","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/abilities"},"Attack":{"$ref":"#/definitions/Attack"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["CardName","CastingCost","Class","Abilities","Attack","Health","FlavourText","Tags"],"interactionText":"§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags"},"harm":{"type":"struct","name":"Harm","description":"Build a Harm","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Harm §Amount."},"headquarter":{"type":"struct","name":"Headquarter","description":"Build a Headquarter","children":{"CardName":{"$ref":"#/definitions/CardName"},"Class":{"$ref":"#/definitions/Class"},"Delay":{"$ref":"#/definitions/Delay"},"Abilities":{"$ref":"#/definitions/abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["CardName","Class","Delay","Abilities","Health","FlavourText","Tags"],"interactionText":"§CardName §Class §Delay §Abilities §Health §Growth §StartingHandSize §Wisdom §FlavourText §Tags"},"kill":{"type":"struct","name":"Kill","description":"Build a Kill","children":{},"interactionText":"Kill an entity."},"onConstruction":{"type":"struct","name":"On Construction","description":"Build a On Construction","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When another places spawns activate: §Effects."},"onDeath":{"type":"struct","name":"On Death","description":"Build a On Death","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When this dies activate: §Effects."},"onSpawn":{"type":"struct","name":"On Spawn","description":"Build a On Spawn","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When this spawns activate: §Effects."},"pay":{"type":"struct","name":"Pay","description":"Build a Pay","children":{"ManaAmount":{"$ref":"#/definitions/SimpleIntValue"},"Effects":{"$ref":"#/definitions/effects"}},"required":["ManaAmount","Effects"],"interactionText":"Pay §ManaAmount to activate: §Effects."},"periodic":{"type":"struct","name":"Periodic","description":"Build a Periodic","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"At the beginning of each tick activate: §Effects."},"place":{"type":"struct","name":"Place","description":"Build a Place","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"}},"required":["CardName","CastingCost","Class","Abilities","Health","FlavourText","Tags"],"interactionText":"§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags"},"produce":{"type":"struct","name":"Produce","description":"Build a Produce","children":{"ManaAmount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["ManaAmount"],"interactionText":"Produce §ManaAmount mana."},"repair":{"type":"struct","name":"Repair","description":"Build a Repair","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Repair §Amount."},"tribute":{"type":"struct","name":"Tribute","description":"Build a Tribute","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"Sacrifice an entity to activate: §Effects."}}} \ No newline at end of file +{"Card":{"$ref":"#/definitions/card"},"definitions":{"Attack":{"type":"int","name":"Attack","max":32},"CardName":{"type":"string","name":"Card Name","max":32,"min":1},"CastingCost":{"type":"int","name":"Casting Cost","max":32},"Class":{"type":"struct","name":"Class","description":"Build a Class","children":{"Nature":{"$ref":"#/definitions/Nature"},"Mysticism":{"$ref":"#/definitions/Mysticism"},"Technology":{"$ref":"#/definitions/Technology"},"Culture":{"$ref":"#/definitions/Culture"}},"required":["Nature","Mysticism","Technology","Culture"],"interactionText":"§Nature §Mysticism §Technology §Culture"},"Culture":{"type":"bool","name":"Culture"},"Delay":{"type":"int","name":"Delay","max":32},"FlavourText":{"type":"string","name":"Flavour Text","max":1000,"min":1},"Health":{"type":"int","name":"Health","max":32},"Keyword":{"type":"enum","name":"Keyword","enum":["ANTHEM","ARM","ARRIVAL","BATTLECRY","HARM","KILL","ONCONSTRUCTION","ONDEATH","ONSPAWN","PAY","PERIODIC","PRODUCE","REPAIR","TRIBUTE"]},"Keywords":{"type":"array","name":"Keywords","description":"Add some Keywords","children":{"Keyword":{"$ref":"#/definitions/Keyword"}},"max":3,"min":1},"Mysticism":{"type":"bool","name":"Mysticism"},"Nature":{"type":"bool","name":"Nature"},"RulesText":{"type":"string","name":"Rules Text","max":1000,"min":1},"SimpleIntValue":{"type":"int","name":"Simple Int Value","max":32},"Tag":{"type":"enum","name":"Tag","enum":["ANIMAL","BOT","DWARF","ENGINEER","EQUIPMENT","FARM","FIRE","HUMAN","KNIGHT","MAGIC","MILITANT","PRIMITIVE","RANGE","SPIRITUAL","TACTIC","TECHNOCRAT"]},"Tags":{"type":"array","name":"Tags","description":"Add some Tags","children":{"Tag":{"$ref":"#/definitions/Tag"}},"max":3,"min":1},"Technology":{"type":"bool","name":"Technology"},"abilities":{"type":"array","name":"Abilities","description":"Add some Abilities","children":{"Ability":{"$ref":"#/definitions/ability"}},"max":3},"ability":{"type":"interface","name":"Ability","description":"Choose a Ability","children":{"Arrival":{"$ref":"#/definitions/arrival"},"Battlecry":{"$ref":"#/definitions/battlecry"},"OnConstruction":{"$ref":"#/definitions/onConstruction"},"OnDeath":{"$ref":"#/definitions/onDeath"},"OnSpawn":{"$ref":"#/definitions/onSpawn"},"Pay":{"$ref":"#/definitions/pay"},"Periodic":{"$ref":"#/definitions/periodic"},"Tribute":{"$ref":"#/definitions/tribute"}}},"action":{"type":"struct","name":"Action","description":"Build a Action","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Effects":{"$ref":"#/definitions/effects"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Effects","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Effects §FlavourText §Tags §Keywords §RulesText"},"anthem":{"type":"struct","name":"Anthem","description":"Build a Anthem","children":{"Tag":{"$ref":"#/definitions/Tag"}},"required":["Tag"],"interactionText":"Anthem §Tag."},"arm":{"type":"struct","name":"Arm","description":"Build a Arm","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Arm §Amount."},"arrival":{"type":"struct","name":"Arrival","description":"Build a Arrival","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When another entity spawns activate: §Effects."},"battlecry":{"type":"struct","name":"Battlecry","description":"Build a Battlecry","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"At the beginning of each combat activate: §Effects."},"card":{"type":"interface","name":"Card","description":"Choose a Card","children":{"Action":{"$ref":"#/definitions/action"},"Entity":{"$ref":"#/definitions/entity"},"Place":{"$ref":"#/definitions/place"},"Headquarter":{"$ref":"#/definitions/headquarter"}}},"effect":{"type":"interface","name":"Effect","description":"Choose a Effect","children":{"Anthem":{"$ref":"#/definitions/anthem"},"Arm":{"$ref":"#/definitions/arm"},"Harm":{"$ref":"#/definitions/harm"},"Kill":{"$ref":"#/definitions/kill"},"Produce":{"$ref":"#/definitions/produce"},"Repair":{"$ref":"#/definitions/repair"}}},"effects":{"type":"array","name":"Effects","description":"Add some Effects","children":{"Effect":{"$ref":"#/definitions/effect"}},"max":3},"entity":{"type":"struct","name":"Entity","description":"Build a Entity","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/abilities"},"Attack":{"$ref":"#/definitions/Attack"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Abilities","Attack","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags §Keywords §RulesText"},"harm":{"type":"struct","name":"Harm","description":"Build a Harm","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Harm §Amount."},"headquarter":{"type":"struct","name":"Headquarter","description":"Build a Headquarter","children":{"CardName":{"$ref":"#/definitions/CardName"},"Class":{"$ref":"#/definitions/Class"},"Delay":{"$ref":"#/definitions/Delay"},"Abilities":{"$ref":"#/definitions/abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","Class","Delay","Abilities","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §Class §Delay §Abilities §Health §Growth §StartingHandSize §Wisdom §FlavourText §Tags §Keywords §RulesText"},"kill":{"type":"struct","name":"Kill","description":"Build a Kill","children":{},"interactionText":"Kill an entity."},"onConstruction":{"type":"struct","name":"On Construction","description":"Build a On Construction","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When another places spawns activate: §Effects."},"onDeath":{"type":"struct","name":"On Death","description":"Build a On Death","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When this dies activate: §Effects."},"onSpawn":{"type":"struct","name":"On Spawn","description":"Build a On Spawn","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When this spawns activate: §Effects."},"pay":{"type":"struct","name":"Pay","description":"Build a Pay","children":{"ManaAmount":{"$ref":"#/definitions/SimpleIntValue"},"Effects":{"$ref":"#/definitions/effects"}},"required":["ManaAmount","Effects"],"interactionText":"Pay §ManaAmount to activate: §Effects."},"periodic":{"type":"struct","name":"Periodic","description":"Build a Periodic","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"At the beginning of each tick activate: §Effects."},"place":{"type":"struct","name":"Place","description":"Build a Place","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Abilities","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags §Keywords §RulesText"},"produce":{"type":"struct","name":"Produce","description":"Build a Produce","children":{"ManaAmount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["ManaAmount"],"interactionText":"Produce §ManaAmount mana."},"repair":{"type":"struct","name":"Repair","description":"Build a Repair","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Repair §Amount."},"tribute":{"type":"struct","name":"Tribute","description":"Build a Tribute","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"Sacrifice an entity to activate: §Effects."}}} \ No newline at end of file diff --git a/keywords/card.go b/keywords/card.go index 7d34a33..69f63fb 100644 --- a/keywords/card.go +++ b/keywords/card.go @@ -52,6 +52,8 @@ type action struct { Effects effects FlavourText cardobject.FlavourText Tags cardobject.Tags + Keywords cardobject.Keywords + RulesText cardobject.RulesText } func (a action) Resolve() cardobject.Card { @@ -63,7 +65,9 @@ func (a action) Resolve() cardobject.Card { Class: a.Class, Effects: effects, FlavourText: a.FlavourText, - Tags: a.Tags}} + Tags: a.Tags, + Keywords: a.Keywords, + RulesText: a.RulesText}} return card } @@ -76,7 +80,7 @@ func (a action) ValidateStruct() error { } func (a action) InteractionText() string { - return "§CardName §CastingCost §Class §Effects §FlavourText §Tags" + return "§CardName §CastingCost §Class §Effects §FlavourText §Tags §Keywords §RulesText" } type entity struct { @@ -88,6 +92,8 @@ type entity struct { Health cardobject.Health FlavourText cardobject.FlavourText Tags cardobject.Tags + Keywords cardobject.Keywords + RulesText cardobject.RulesText } func (e entity) Resolve() cardobject.Card { @@ -101,7 +107,9 @@ func (e entity) Resolve() cardobject.Card { Attack: e.Attack, Health: e.Health, FlavourText: e.FlavourText, - Tags: e.Tags}} + Tags: e.Tags, + Keywords: e.Keywords, + RulesText: e.RulesText}} return card } @@ -114,7 +122,7 @@ func (e entity) ValidateStruct() error { } func (e entity) InteractionText() string { - return "§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags" + return "§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags §Keywords §RulesText" } type place struct { @@ -125,6 +133,8 @@ type place struct { Health cardobject.Health FlavourText cardobject.FlavourText Tags cardobject.Tags + Keywords cardobject.Keywords + RulesText cardobject.RulesText } func (p place) Resolve() cardobject.Card { @@ -137,7 +147,9 @@ func (p place) Resolve() cardobject.Card { Abilities: abilities, Health: p.Health, FlavourText: p.FlavourText, - Tags: p.Tags}} + Tags: p.Tags, + Keywords: p.Keywords, + RulesText: p.RulesText}} return card } @@ -150,7 +162,7 @@ func (p place) ValidateStruct() error { } func (p place) InteractionText() string { - return "§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags" + return "§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags §Keywords §RulesText" } type headquarter struct { @@ -161,6 +173,8 @@ type headquarter struct { Health cardobject.Health FlavourText cardobject.FlavourText Tags cardobject.Tags + Keywords cardobject.Keywords + RulesText cardobject.RulesText } func (h headquarter) Resolve() cardobject.Card { @@ -173,7 +187,9 @@ func (h headquarter) Resolve() cardobject.Card { Abilities: abilities, Health: h.Health, FlavourText: h.FlavourText, - Tags: h.Tags}} + Tags: h.Tags, + Keywords: h.Keywords, + RulesText: h.RulesText}} return card } @@ -186,5 +202,5 @@ func (h headquarter) ValidateStruct() error { } func (h headquarter) InteractionText() string { - return "§CardName §Class §Delay §Abilities §Health §Growth §StartingHandSize §Wisdom §FlavourText §Tags" + return "§CardName §Class §Delay §Abilities §Health §Growth §StartingHandSize §Wisdom §FlavourText §Tags §Keywords §RulesText" } diff --git a/keywords/testJsons/keywordedCard.json b/keywords/testJsons/keywordedCard.json index e9c8c76..6a6ca25 100644 --- a/keywords/testJsons/keywordedCard.json +++ b/keywords/testJsons/keywordedCard.json @@ -13,6 +13,8 @@ "CastingCost":13, "Attack":10, "Health":10, + "Keywords":["ARM", "PAY"], + "RulesText":"This could be your RulesText", "Abilities":[ { "Pay":{ diff --git a/keywords/testJsons/resolvedGroundTruth.json b/keywords/testJsons/resolvedGroundTruth.json index 26b4bef..ef5a3d2 100644 --- a/keywords/testJsons/resolvedGroundTruth.json +++ b/keywords/testJsons/resolvedGroundTruth.json @@ -1 +1 @@ -{"Entity":{"CardName":"Name","CastingCost":13,"Class":{"Nature":false,"Mysticism":false,"Technology":true,"Culture":false},"Abilities":[{"ActivatedAbility":{"AbilityCost":{"ManaCost":{"CostAmount":2}},"Effects":[{"TargetEffect":{"EntityTargetEffect":{"EntitySelector":{"PlayerMode":"YOU","CardMode":"TARGET","EntityZone":"FIELD"},"EntityManipulations":[{"EntityIntManipulation":{"IntProperty":"HEALTH","IntOperator":"ADD","IntValue":{"SimpleIntValue":2},"Keyword":"ARM"}},{"EntityIntManipulation":{"IntProperty":"ATTACK","IntOperator":"ADD","IntValue":{"SimpleIntValue":2},"Keyword":"ARM"}}]}}}]}}],"Attack":10,"Health":10,"FlavourText":"-.-","Tags":["SPIRITUAL"]}} \ No newline at end of file +{"Entity":{"CardName":"Name","CastingCost":13,"Class":{"Nature":false,"Mysticism":false,"Technology":true,"Culture":false},"Abilities":[{"ActivatedAbility":{"AbilityCost":{"ManaCost":{"CostAmount":2}},"Effects":[{"TargetEffect":{"EntityTargetEffect":{"EntitySelector":{"PlayerMode":"YOU","CardMode":"TARGET","EntityZone":"FIELD"},"EntityManipulations":[{"EntityIntManipulation":{"IntProperty":"HEALTH","IntOperator":"ADD","IntValue":{"SimpleIntValue":2},"Keyword":"ARM"}},{"EntityIntManipulation":{"IntProperty":"ATTACK","IntOperator":"ADD","IntValue":{"SimpleIntValue":2},"Keyword":"ARM"}}]}}}]}}],"Attack":10,"Health":10,"FlavourText":"-.-","Tags":["SPIRITUAL"],"Keywords":["ARM","PAY"],"RulesText":"This could be your RulesText"}} \ No newline at end of file