Introduction Last updated: 2021-10-20

Gloomhaven is a data-driven game where all the properties and values for the game come from YML files that are defined in the ruleset. Modding in Gloomhaven allows you to alter, remove, or create new YML files in order to change how the game works. This allows you to make customised characters, enemies, cards, items, perks, scenarios, etc.

This document will guide you through what is possible and provide some examples of the types of mods you can make. There is a more detailed YML Parsers section that describes every type of YML file that is supported, what properties can be set on them, and what values those properties can have.

There is also an FAQ at the bottom of this document which we will update over time based on what questions the community asks most commonly.

If you have any questions or suggestions, please join the Discord group and post in the #modding channel.

Overview

Modding in Gloomhaven involves using Mods and Rulesets. Mods alter the game’s standard functionality in some way. Rulesets combine together a collection of mods to create a new set of rules to use for either Campaign or Guildmaster mode.

When you click the Modding button from the main menu, there are three options:

  • Custom Rulesets

    This menu is used to create, manage, and play modded rulesets for either Campaign or Guildmaster mode.

  • Manage Mods

    This menu is used to create or manage mods. You can create new mods here, or view any mods that have been subscribed to in the Steam Workshop (link). You can also see the validity of all mods currently loaded in the game.

  • Export YML

    This button is used to Export all the YML files used by the game. The files will be exported to:

    C:\Users\[USERNAME]\AppData\LocalLow\FlamingFowlStudios\Gloomhaven\ModdingExport

    You can use the files exported here to create your own mods for the game.

To create your first mod, click the Export YML button to get all the YML files on your machine. Navigate the menu to Manage Mods and create a new mod. You will be asked to select a name and one of the mod types which are detailed in the next section. When you click edit, you will be taken to the mod's directory. Place all edited and created YML files in the ModdedYML folder.

To start a game with your mod, you need to create a new ruleset in the Custom Rulesets menu first. Select either Guildmaster or Campaign and add your and any other mods to the ruleset. You will need to compile the ruleset before you start playing.

Mods

There are 5 different types of mods that can be created in Gloomhaven:

  • Global Mod

    Global mods must only alter Global YML files. These files are shared between both Guildmaster and Campaign modes and can be used in any ruleset. Global mods do not impact the game outside of rulesets which include them.

    In the Export directory, Global YML files are located in the Global and Shared folders.

  • Campaign Mod

    Campaign mods alter YML files specific to the Campaign mode for Gloomhaven. Campaign mods do not impact the game outside of rulesets which include them.

  • Guildmaster Mod

    Guildmaster mods alter YML files specific to the Guildmaster mode for Gloomhaven. Guildmaster mods do not impact the game outside of rulesets which include them.

  • Language Mod

    Language mods add a customised language setting in the Options menu. If a valid language mod is present, this language will be selectable and the game will use the text from that mod. This mod will affect the entire game, including the standard game modes, as well as any rulesets that are played.

  • Custom Level Mod

    Custom Level mods will add single scenarios that can be played via the Level Editor menu.

Note

Global Mods must only use Global YML files. Any other YML files will cause the mod to fail validation.

Rulesets

Rulesets are collections of mods. They can be created and managed in the Custom Rulesets menu. Custom rulesets can be played in both Campaign and Guildmaster modes. The modded game can only be accessed in this menu - the existing games from Guildmaster and Campaign modes cannot be modded.

Any number of mods can compose a ruleset, but a large number may increase compatibility risk. When all mods are ready, the ruleset needs to be compiled. Multiple adventures can be created from the same ruleset.

Mod Guides

This section demonstrates how to create several different mods with examples.

Difficulty Mod

This section demonstrates how to change Difficulty through a mod.

Create a Difficulty YML

It is not possible to create a new difficulty level through a mod, but all existing ones (Easy, Normal, Hard, Insane) can be modified.

Difficulty YML adds additional rules to selected difficulty levels. It can modify gold, XP gains of mercenaries as well as their health. The number of monsters can be changed indirectly through ThreatModifier. Overall Scenario Level can be changed as well. Finally, the players may be forced to start the scenario with a number of Bless of Curse cards.

Difficulties can affect both Guildmaster and Campaign rulesets.

In Guildmaster ruleset on Easy difficulty, players start each scenario with 2 Bless cards in their attack modifier deck. In this example, the same will be true for Insane difficulty, but with curses instead.


Parser: Difficulty
Guildmaster:
    Cursed:
        Text: $DIFFICULTY_CURSED$
        CurseCards: 2
        ActiveOn: [Insane]
        PositiveEffect: False					
													
Download

Create LangUpdate CSV

Need localisations for the new difficulty rule.

LangUpdate.csv

Key,English [en-GB]
DIFFICULTY_CURSED,Cursed: Heroes start each scenario with +2 Curses in their deck
Download

Character Mod

This section demonstrates how to create a new character from scratch.

Getting Started

Creating a new character requires creating several YML files.

  • Character YML

    Define character's name, description and model.

  • LangUpdate CSV

    Add localisations for the new character's name and descriptions.

  • AbilityCard YML

    Define abilities for each of the character's cards.

  • HeroSummon YML

    Define every summon and companion for the character.

  • AttackModifier YML

    Define new attack modifier cards that the character will be able to unlock.

  • Perk YML

    Link the new attack modifiers to the character through perks.

  • TresureTable YML

    Modify the starting treasure table to unlock the character from the beginning of the game.

Create a Character YML

Choose a name for the character.

Specify the number of hit points on every level.

Decide how many cards can the character take to battle.

Choose one of the existing character models to represent the new character.

If you choose Brute, Scoundrel, Cragheart, Spellweaver, Mindthief or Tinkerer, you can choose an alternative skin.

Modify the character's looks with colour and thickness.

Choose if the character will have a companion.

Describe the character and detail its role, difficulty, strengths and weaknesses.

Necromancer.yml

Uses a skinnier Plagueherald's model modified with black colour. He can take 10 ability cards to battle and has a skeleton companion that he starts the game with. He has low health defined within the table. His name, description, role, difficulty, strengths and weaknesses are defined within LangUpdate CSV, indicated by $$.


Parser: Character
ID: NecromancerID
LocKey: $Necromancer$
Model: Plagueherald
DefaultSkin: 1
Colour: 000000
Vertex: -0.2
HealthTable: [ 6, 7, 8, 9, 10, 11, 12, 13, 14]
NumberAbilityCardsInBattle: 10
AttackModifierDeck: Standard
CompanionSummonData: NecromancerSkeletonID
Role: $Necromancer_ROLE$
Description: $Necromancer_DESCRIPTION$
Difficulty: $DIFFICULTY_HIGH$
Strengths: $Necromancer_STRENGTHS$
Weaknesses: $Necromancer_WEAKNESSES$
Adventure_Description:$Necromancer_ADVENTURE_DESCRIPTION$						
						
Download

Create an AbilityCard YML for each available ability card.

Characters in Gloomhaven usually have around 30 ability cards - the number they can take to a battle of 1 level cards, 2 for each level after and 3 X level cards. Necromancer will need a total of 29 ability cards. To start a game, a character would need a number of cards it can take to battle (at least 2).

Choose a name and a unique ID for the card.

Determine its initiative and the discard type.

Specify top and bottom abilities.

Modify the card's appearance through the Layout property.

2001_Necromancer_RayOfDecay.yml

Top ability is a range, single target attack that applies 2 conditions on the enemy. Bottom ability is a move that muddles an enemy on a range. The card has a unique ID of 2001 and an initiative of 45. Both top and bottom parts are discarded normally.

Text within $$ references localisations in LangUpdate CSV. Text within ** references an amount specified in the attack, while text within @@ specifies enhancements.


Parser: AbilityCard
Name: $ABILITY_CARD_RayOfDecay$
Character: NecromancerID
ID: 2001
Level: 1
Initiative: 45
Discard: [Discard, Discard]
Data:
	Top:
		Abilities:
			TAttack:
				Attack:
					Amount: 2
					Enhancements: 1
				Range: 4
				Target: 1
				Conditions: [Poison, Muddle]
	Bottom:
		Abilities:
			BMove:
				Move:
					Amount: 2
					Enhancements: 1
			BMuddle:
				Muddle: True
				Filter: Enemy
				Range: 3
Layout:
Top:
  - Row: "<b><size=130%>$Attack$ <sprite name=Attack> *TAttack* <size=100%><voffset=1>@TAttack@"
  - Row: "<size=20%>"
  - Row: "$Poison$ <sprite name=Poison>"
  - Row: "$Muddle$ <sprite name=Muddle>"
Bottom:
  - Row: "<b><size=130%>$Move$ <sprite name=Move> *BMove* <size=100%><voffset=1>@BMove@"
  - Row: "<size=20%> "
  - Row: "$Muddle$ <sprite name=Muddle>"
  - Row: "$Range$ <sprite name=Range *BMuddle.Range*"					
						
Download

Create AttackModifiers YML.

This step can be omitted, the character can use already existing attack modifiers for its perks.

Choose a unique name for the modifier.

Select a math modifier. If you do not want it to affect an attack, choose "+0".

You can opt for the card not to be shuffled back to the deck.

Setting Rolling to true will draw another card after that one.

Choose if the card is a Bless or a Curse.

The attack modifier may add an additional target to the attack.

Add any abilities or override the current attack ability.

AMC_Dark_P2.yml

The card adds +2 to the attack and infuses the dark element.


Parser: AttackModifier
Name: AMC_Dark_P2
MathModifier: "+2"
Abilities:
    InfuseAbility:
		Infuse: [Dark]					
						
Download

Create Perks YML.

Perks will allow the character to unlock new attack modifiers or remove negative ones from its deck.

Give it a name, description and a unique identifier.

Link it with a character through its ID.

Choose how many perks of this type can the character unlock.

Select cards that will be added to the deck and removed from it.

The perk may also make the character ignore the negative effects of items or scenarios.

Perk_Necromancer_1.yml

The perk unlocks the previously made attack modifier card. It can be taken twice.


Parser: Perk
ID: Necromancer1
Name: Shade
Description: Add one <color="orange">+2</color> <sprite name=Dark> card
CharacterId: NecromancerID
Available: 2
CardsToAdd: [AMC_Dark_P2]					
						
Download

Create TresureTable YML.

It is the easiest way to unlock and play your new character.

You could choose another way to unlock the character, for example in the campaign, they are unlocked through personal quests.

Modify starting treasure and you will be able to start the game with the character.

StartingTreasureTable.yml

Unlocks the character from the beginning of the game.


Parser: TreasureTable
StartingTreasureTable:
  UnlockCharacter: NecromancerID				
						
Download

Edit LangUpdate CSV.

Need localisations for names, descriptions, ability cards etc.

LangUpdate.csv
Key English [en-GB]
Necromancer

Necromancer

Necromancer_ROLE

Ranged Damage/Summoner

Necromancer_DESCRIPTION

With their innate ability to comprehend the cycle of life some Necromancers enjoy companionship of the dead more than that of the living.

Necromancer_STRENGTHS

"-<indent=%15>Has a strong start with his Skeleton companion</indent>

-<indent=%15>Decent damage capabilities utilizing long range abilities and summons </indent>

-<indent=%15>A wide range of debuffs</indent>"

Necromancer_WEAKNESSES

"-<indent=%15>Highly vulnerable</indent>

-<indent=%15>Low mobility</indent>

-<indent=%15>Doesn't use any perfume</indent>"

Necromancer_ADVENTURE_DESCRIPTION

With their innate ability to comprehend the cycle of life some Necromancers enjoy companionship of the dead more than that of the living.

ABILITY_CARD_RayOfDecay

Ray of Decay

Download

Enemy Mod

Create a mod to add a new enemy

Getting Started

Creating a new Monster requires several modified YML files.

  • Enemy YML

    Define the Normal enemy and the base stats. Define the Elite enemy and the base stats.

  • LangUpdate CSV

    Add localisations for the new enemy name.

  • EnemyCard YML

    Define the enemy ability cards for the new enemy.

  • Monsters YML

    Define the threat, grouping and spawn amounts for the new enemy.

  • Scenario YML

    Define a Scenario to use the new enemy.

  • Quest YML

    Define a Quest to access the new Scenario.

  • Headquarters YML

    Update Headquarters to include the new Quest.

Create two Enemy YML

First, choose an existing model to represent the new enemy from the available models.

Second, decide if this enemy should be considered a mostly melee enemy.

Then, choose a name that will be displayed for your new enemy type.

Generally, monsters have 8 ability cards. Choose unique IDs for these 8 cards.

Create the base stats for the new enemy at levels 0-7. At a minimum, decide values for Health, Move, Attack, Range, and Target

Soldier.yml

Uses the Bandit Guard model. Mostly melee. The Name is Soldier. 8 ability cards 468793211 thru 468793218


Parser: Enemy
ID: SoldierID
LocKey: $Soldier$
Model: Bandit Guard
MonsterType: Monster
StandeeLimit: 16
PredominantlyMelee: True
AbilityCards: [468793211,468793212,468793213,468793214,468793215,468793216,468793217,468793218]
# Base Stats
Level0:
    Health: 5
    Move: 2
    Attack: 2
    Range: 1
    Target: 1
Level1:
    Health: 6
    Move: 3
    Attack: 2
    Range: 1
    Target: 1
Level2:
    Health: 6
    Move: 3
    Attack: 3
    Range: 1
    Target: 1
Level3:
    Health: 9
    Move: 3
    Attack: 3
    Range: 1
    Target: 1
Level4:
    Health: 10
    Move: 4
    Attack: 3
    Range: 1
    Target: 1
Level5:
    Health: 11
    Move: 4
    Attack: 4
    Range: 1
    Target: 1
Level6:
    Health: 14
    Move: 4
    Attack: 4
    Range: 1
    Target: 1
Level7:
    Health: 16
    Move: 5
    Attack: 4
    Range: 1
    Target: 1						
						
Download
SoldierElite.yml

The Elite version of a Soldier. Updated Base Stats


Parser: Enemy
ID: SoldierEliteID
LocKey: $SoldierElite$
Model: Bandit Guard Elite
MonsterType: Monster
StandeeLimit: 16
NonEliteVariant: SoldierID
PredominantlyMelee: True
AbilityCards: [468793211,468793212,468793213,468793214,468793215,468793216,468793217,468793218]
# Base Stats
Level0:
    Health: 9
    Move: 2
    Attack: 3
    Range: 1
    Target: 1
    Shield: 0
Level1:
    Health: 9
    Move: 2
    Attack: 3
    Range: 1
    Target: 1
    Shield: 1
Level2:
    Health: 10
    Move: 2
    Attack: 4
    Range: 1
    Target: 1
    Shield: 1
Level3:
    Health: 10
    Move: 3
    Attack: 4
    Range: 1
    Target: 1
    Shield: 2
Level4:
    Health: 11
    Move: 3
    Attack: 4
    Range: 1
    Target: 1
    Shield: 2
    Conditions: [Muddle]
Level5:
    Health: 12
    Move: 3
    Attack: 5
    Range: 1
    Target: 1
    Shield: 2
    Conditions: [Muddle]
Level6:
    Health: 14
    Move: 3
    Attack: 5
    Range: 1
    Target: 1
    Shield: 2    
    Conditions: [Muddle]
Level7:
    Health: 14
    Move: 3
    Attack: 5
    Range: 1
    Target: 1
    Shield: 3
    Conditions: [Muddle]
						
Download

Create LangUpdate CSV

Need localisations for the new enemy ID and new enemy name.

LangUpdate.csv

Localisation for new enemy ID (SoldierID,EliteSoldierID) and enemy name (Soldier,EliteSoldier).

Localisation for new quest to include the new enemy.


Key,English [en-GB]
Soldier,Soldier
SoldierID,Soldier
SoldierElite,Elite Soldier
SoldierEliteID,Elite Soldier
quest_job_soldiers46879321_desc,"Stops Soldiers from a foreign land from invading Demonsgate."
quest_job_soldiers46879321_intro,"A troop of unknown soldiers have entered Demonsgate with conquest on their minds.  Take on an army?  Why not, there must be a reward!"
quest_job_soldiers46879321_list,Clear out the Soldiers
quest_job_soldiers46879321_name,Stop the Invasion
Download

Create EnemyCard YMLs

The enemy needs 8 ability cards. Create 8 ymls to define the 8 enemy abilities.

The ability IDs must match the AbilityCards IDs listed in the just created Enemy YML.

Soldier468793211.yml

Initiative 15, Shield and Attack. Shuffle the ability deck at end of round.

Parser: EnemyCard
ID: 468793211
Initiative: 15
Shuffle: True
Data:
    Abilities: 
        Shield1:
            Shield: 1
            Filter: Self
            AnimOverload: PowerUp            
            ActiveBonusDuration: Round
            SkipAnim: True
        Attack1:
            Attack: 0
            Filter: Enemy						
Download
Soldier468793212.yml

Initiative 30, Move and Attack.

Parser: EnemyCard
ID: 468793212
Initiative: 30
Shuffle: False
Data:
    Abilities: 
        Move1:
            Move: 1
        Attack1:
            Attack: -1
            Filter: Enemy						
Download
Soldier468793213.yml

Initiative 35, Move and Ranged Attack.

Parser: EnemyCard
ID: 468793213
Initiative: 35
Shuffle: False
Data:
    Abilities: 
        Move1:
            Move: -1
        Attack1:
            Attack: 0
            Range: 2
            RangeIsBase: True
            Filter: Enemy
            AnimOverload: KnifeThrow						
Download
Soldier468793214.yml

Initiative 50, Move and Attack.

Parser: EnemyCard
ID: 468793214
Initiative: 50
Shuffle: False
Data:
    Abilities: 
        Move1:
            Move: 0
        Attack1:
            Attack: 0
            Filter: Enemy						
Download
Soldier468793215.yml

Initiative 50, Move and Attack.

Parser: EnemyCard
ID: 468793215
Initiative: 50
Shuffle: False
Data:
    Abilities: 
        Move1:
            Move: 0
        Attack1:
            Attack: 0
            Filter: Enemy						
Download
Soldier468793216.yml

Initiative 70, Move and Attack.

Parser: EnemyCard
ID: 468793216
Initiative: 70
Shuffle: False
Data:
    Abilities: 
        Move1:
            Move: -1
        Attack1:
            Attack: 1
            Filter: Enemy						
Download
Soldier468793217.yml

Initiative 55, Move, Attack and Strengthen.

Parser: EnemyCard
ID: 468793217
Initiative: 55
Shuffle: False
Data:
    Abilities: 
        Move1:
            Move: -1
        Attack1:
            Attack: 0
            Filter: Enemy
        Strengthen1:
            Strengthen: True
            Filter: Self
            AnimOverload: PowerUp						
Download
Soldier468793218.yml

Initiative 15, Shield and Attack+Poison. Shuffle the ability deck at end of round.

Parser: EnemyCard
ID: 468793218
Initiative: 15
Shuffle: True
Data:
    Abilities: 
        Shield1:
            Shield: 1
            Filter: Self
            AnimOverload: PowerUp
            ActiveBonusDuration: Round
        Attack1:
            Attack: 0
            Conditions: Poison
            Filter: Enemy						
Download

Create Monsters YML

First, decide the threat of the new enemy Normal and Elite. Higher threat means fewer monsters spawned. Generally 25 and 50 are good for most monsters.

Second, create some short, thematic descriptions of the new enemy.

Add a MonsterFamily for the new enemy. Create a DefaultMonsterGroup. Does this enemy usually appear with another enemy?

Create one or more MonsterGroups for the new enemy. In general, MonsterGroup is used more often than MonsterFamily

For MonsterGroup, decide the minimum and maximum chance the enemy will spawn, also how often the enemy will spawn as an Elite.

Monsters.yml

Parser: MonsterData
# Elite IDs do not need to be used in this file.  Only the non-elite IDs for monsters should be used
Threats:
#   Monster Name           [Normal threat value, Elite threat value]
    SoldierID:             [25,50]
#--------------------------------------------------------------------------------
MonsterFamilies:
    Soldier:
        Descriptions:
            Generic: ["Invaders from a distant land", "A well equipped militia group has set up camp", "The area is overrun by soldiers trying to establish a foothold" ]
            Crypt: ["A dusty crypt home to armed men", "Soldiers are making a last stand in this crypt", "Soldiers are searching this tomb for provisions" ] 
        DefaultMonsterGroup:
        #   Monster Name:      [Min%, Max%]
            SoldierID:         [50, 75, 12, 25, 50, 75]
#--------------------------------------------------------------------------------
MonsterGroups:
    Soldiers_WithTheirHounds:
        SoldierID:          [50, 75, 12, 25, 50, 75]
        HoundID:            [25, 75, 12, 25, 50, 75]					
					
Download

Create Scenario YML

The enemy has been created and the spawning rules are in place. Now, the enemy has to be placed into a scenario. Create a new scenario and use the new MonsterFamily and MonsterGroup just defined.

Scenario_Job_Soldiers46879321.yml

This is a new Job scenario with Soldiers and Hounds


Parser: Scenario
ID: Scenario_Job_Soldiers46879321
BaseBiome: Forest
BaseSubTheme: Bandit
BaseTone: ForestDefault
MonsterFamily: Soldier
ScenarioMeshes: [DGN_Forest_01_MAT, DGN_Forest_02_MAT, DGN_Forest_03_MAT, DGN_Forest_06_MAT, DGN_Forest_09_MAT, DGN_Forest_16_MAT, DGN_Forest_17_MAT, DGN_Forest_19_MAT, DGN_Forest_20_MAT]
#RewardTreasureTables: [Boots, SmallGold, SmallGold]
ChestTreasureTables: [TT_Chapter_1_1_Chest]

ScenarioStartMessage:
    MessageLayoutType: 4
    DialogueLines:
        - Text: SCENARIO_JOB_1_1_BANDIT_FOREST_START_1
          Character: Trainer
ScenarioCompleteMessage:
    MessageLayoutType: 4
    DialogueLines:
        - Text: SCENARIO_JOB_1_1_BANDIT_FOREST_SUCCESS
          Character: Trainer

ScenarioLayout:
    Objectives:
        KillAllEnemies: Win
    Rooms:
        Room1:
            Threat: 150
            PossibleRooms:
                - HugeEmptyRoom:
                    Theme: StillWaters
                    MonsterGroup: Soldiers_WithTheirHounds
                    OneHexObstacles: [100, 50]
                    TwoHexObstacles: [100, 50]
                    Traps: [30, 30, 30]
        Room2:
            Threat: 150
            PossibleRooms:
                - LargeEmptyRoom:
                    MonsterGroup: Soldiers_WithTheirHounds
                    Theme: StillWaters
                    OneHexObstacles: [100,50] 
                    TwoHexObstacles: [100, 50]
                    Traps: [100,50,50]
                    GoldPiles: [40,40,40]
                    TreasureChestChance: [33]
					
Download

Create Quest YML

A Quest is required to reach the scenario. Create a new Quest that has the new scenario in the ScenarioPool

Quest_Job_Soldiers46879321.yml

This is a new Job Quest to reach the new scenario.


Parser: Quest
ID: Quest_Job_Soldiers46879321
Chapter: 1
QuestType: Job
CompletionRewards: TT_Quest_Job_Chapter_1_1
LoadoutImageId: FO_DF_03_Bandit
UnlockCondition:
    - Chapter: [1,1]    
Scenario:
    MapLocation: [300, 300]
    ScenarioPool: [Scenario_Job_Soldiers46879321, 100]
					
Download

Create Headquarters YML

Finally, Headquarters needs to be updated to provide the new Quest.

Headquarters.yml

Update the list of quests by adding the new quest.


Parser: Headquarters
GameMode: Guildmaster
ID: Demonsgate
Quests: 
#TRAVEL
    - Quest_Job_Soldiers46879321
					
Download

YML Scenario Mod

Create a mod to add a new YML Scenario.

Getting Started

Creating a new Scenario requires several modified YML files.

Create a Scenario YML

Define Scenario's appearance through Apparance Properties. Choose a valid combination of biomes, themes and tones.

Set Scenario's Objectives. Those will be required to complete the Scenario.

Optionally, add Scenario Modifiers to change the rules of the Scenario.

Plan out the rooms. Use existing layouts from Rooms.yml or define own as per Rooms.

Optionally, add Spawners to your rooms.

All text will be added through the localisation sheet so place keys in the required places instead.

Scenario_Job_SampleDungeon.yml

It is a dungeon filled with Skeletons and Cultists that are summoning Demons through a Spawner. The Objective is to kill all enemies. Additionally, the party discards 2 cards at the beginning of the scenario through a ScenarioAbility triggered by a Scenario Modifier.

Scenario_Job_SampleDungeon.yml

Parser: Scenario
ID: Scenario_Job_SampleDungeon
BaseBiome: Dungeon
BaseTheme: Torture
BaseTone: Evil
MonsterFamily: Undead
ScenarioMeshes: [DGN_Bones_01_MAT,DGN_Bones_02_MAT,DGN_Bones_03_MAT,DGN_Bones_04_MAT,DGN_Bones_05_MAT,DGN_Bones_06_MAT]
ChestTreasureTables: [TT_SampleDungeon_Chest]

ScenarioStartMessage:
    MessageLayoutType: 4
    DialogueLines:
        - Text: Scenario_Job_SampleDungeon_Intro
          Character: Narrator
ScenarioCompleteMessage:
    MessageLayoutType: 4
    DialogueLines:
        - Text: Scenario_Job_SampleDungeon_Outro
          Character: Narrator

ScenarioLayout:
    Objectives:
        KillAllEnemies: Win
    ScenarioModifiers:
        SM1:
            Type: TriggerAbility
            TriggerPhase: StartScenario
            ScenarioAbilityID: ScenarioAbility_Discard2Self
            ApplyToEachActorOnce: True
            Filter:
                ActorType: [Player]
    Rooms:
        Room1:
            Threat: 100
            PossibleRooms:
                - MediumEntrance:
                    MonsterGroup: Undead_CultistsSkellies
        Room2:
            Threat: 100
            PossibleRooms:
                - EmptyRandomCorridor:
                    MonsterGroup: Undead_CultistsSkellies
        Room3: 
            Threat: 100
            PossibleRooms:
                - OldSummoningCircle:
                    SubTheme: Demon
                    Tone: Demonic
                    MonsterGroup: Demon_Night_PlusCultists
                    TreasureChestChance: [100]
                    Spawners:
                      - SpawnerTriggerType: StartRound
                        ScenarioActivationType: RoomRevealed
                        SpawnStartRound: 2
                        LoopSpawnPattern: True
                        SpawnRoundInterval: [1,1,1,1]
                        SpawnRoundEntries: 
                          Default:
                            - SpawnClasses: [NightDemonID, NightDemonID, NightDemonID, NightDemonID]
                            - SpawnClasses: [Empty, Empty, NightDemonID, NightDemonEliteID]
                            - SpawnClasses: [Empty, NightDemonID, NightDemonID, NightDemonEliteID]
                            - SpawnClasses: [NightDemonID, NightDemonEliteID, NightDemonEliteID, NightDemonEliteID]
						
Download

Create a Chest TreasureTable YML.

There is a single NightBlade item in the chest.

TT_SampleDungeon_Chest.yml

Parser: TreasureTable
TT_SampleDungeon_Chest:
    Item: NightBladeID
						
Download

Create a ScenarioAbility YML. (OPTIONAL)

This ScenarioAbility forces everyone to discard 2 cards.

ScenarioAbility_Discard2Self.yml

Parser: ScenarioAbility
ID: ScenarioAbility_Discard2Self
ScenarioAbility:
    TDiscardCard:
        DiscardCards: 2
        Filter: Self
        AutoTrigger: True
						
Download

Create a Quest YML.

It is the simplest way to access the new Scenario.

Quest_Job_SampleDungeon.yml

Parser: Quest
ID: Quest_Job_SampleDungeon
Chapter: 1
QuestType: Job
CompletionRewards: TT_Quest_Job_Chapter_1_1
LoadoutImageId: DU_DF_01
UnlockCondition:
    - Chapter: [1,1]    
Scenario:
    MapLocation: [300, 300]
    ScenarioPool: [Scenario_Job_SampleDungeon, 100]
						
Download

Update the Headquarters YML.

The quest to be added to Headquarters.yml.

Headquarters.yml

Parser: Headquarters
GameMode: Guildmaster
ID: Demonsgate
Quests: 
    - Quest_Job_SampleDungeon
						
Download

Edit LangUpdate CSV.

All text in the Scenario and Quest has to be filled up.

LangUpdate.csv
Key English [en-GB]
Scenario_Job_SampleDungeon_Intro You entered the dungeon.
Scenario_Job_SampleDungeon_Outro The cult has been defeated!
quest_job_sampledungeon_desc Stop the cultists from summoning Demons.
quest_job_sampledungeon_desc Stop the Cult
quest_job_sampledungeon_desc Clear out the Cultists
quest_job_sampledungeon_desc Stop the Cult
scenario_job_sampledungeon_sm1_desc All Mercenaries start with 3 discarded cards.
Download

Custom Scenario Mod

Create a mod to add a new Level Editor Scenario

Getting Started

Creating a new Level Editor Scenario requires several steps.

Lay out the rooms

Place all rooms on the map. It will not be possible to edit the layout later so choose carefully.

Connect all rooms with doors. Thin doors connect hex's vertices while thick doors connect hex's edges. It will not be possible to edit doors later so choose carefully.

Rooms Doors

Define Scenario's Appearance

Scenario's visuals can be changed at three levels - Scenario, Room and Prop. By default, props inherit their appearance from rooms that inherit theirs from the scenario. All of those can be overridden though.

Visuals can be affected through five properties - Biome, SubBiome, Theme, SubTheme and Tone. All possible values are present in Apparance Properties table.

This scenario is set up to be a cult's ritual place. It's a dungeon that's last room serves as a demon summoning place. It should be reflected through visuals.

Scenario Level Room Level

Define Objectives

Completing win Objectives is necessary to win the scenario, while lose Objectives end the scenario in a failure.

There are various types of Objectives that can be chosen from the list and further modified by simply changing their values or defining Objective filters.

In this scenario, the Win Objective is to simply kill all enemies.

Objectives

Optionally, define Scenario Modifiers

Scenario Modifiers change the rules of the scenario.

There are various types of Scenario Modifiers that can be chosen from the list and further modified by simply changing their values or defining filters.

In this scenario, there is a Scenario Modifier that triggers a Scenario Ability at the start of the scenario. The Ability forces each player to discard a card.

Scenario Modifier

Add Monsters

The main challenge for the players is enemies. Add any number of Monsters to the rooms.

Select them from the list and optionally modify them to suit the scenario.

In this scenario, there are some Cultists accompanied by Living Bones and Bone Rangers.

Monsters

Optionally, add Spawners

Spawners constantly spawn Monsters.

Define what Monsters are spawned for each of the party sizes. It can be a one-off spawn or a loop pattern.

In this scenario, there is one Spawner in the final room, where Cultists summon Night Demons.

Spawner

Modify Basic Data and Save.

Define how the party is spawned - is there an entrance door or are there spawn tiles?

Define if the characters are pre-selected or the user can load their own party.

Set what icons are shown on the world map.

In this case, there is a few starting tiles and the user can load their own party.

Basic Data
Download

Road Event Mod

Create a mod to add a new Road Event.

Getting Started

Creating a new Event requires several modified YML files.

Create a RoadEvent YML

Plan out the structure of the event. Usually, it goes something like this: Players are presented with 2 options on the first screen after which they are taken to one of 2 other screens depending on their choice.

Decide if every option of the event is reachable for every party. Some may require specific characters, items or enough gold. If that is the case, see OptionConditions.

Some Screens may be displayed only if the party gains or loses something from a TreasureTable on a Screen prior. If that is the case, see Event Treasure Conditions.

All text will be added through the localisation sheet so place keys in the required places instead.

Event_Road_100.yml

In this event, the party encounters a wounded man on the side of the road. They are presented with options to either help the man with a health potion or leave the man. To choose the first option they must have the healing potion in their inventory. The man blesses them after their help. In the second option, the man dies and rises as an undead. The party fights the monster and are wounded and damaged but receive some XP.


Parser: RoadEvent
ID: Event_Road_100ID
LocKey: $RoadEvent$
Screens:
	Decision:
		Text: "EVENT_ROAD_100_INTRO"
			Options:
				A:
					Text: "EVENT_ROAD_100_OPTION_A"
					Next: EVENT_ROAD_100_OPTION_A
					OptionConditions:
						HaveItem: MinorHealingPotionID
					UnavailableText: "EVENT_ROAD_100_OPTION_A_UNAVAILABLE"
				B:
					Text: "EVENT_ROAD_100_OPTION_B"
					Next: EVENT_ROAD_100_OPTION_B
	EVENT_ROAD_100_OPTION_A:
		Text: "EVENT_ROAD_100_RESULT_A"
		TreasureTables: TT_EVENT_ROAD_100_OPTION_A
		End: True
	EVENT_ROAD_100_OPTION_B:
		Text: "EVENT_ROAD_100_RESULT_B"
		TreasureTables: TT_EVENT_ROAD_100_OPTION_B
		End: True					
						
Download

Create a TreasureTable YML

Decide what are the rewards or punishment for each chosen option. Those are optional though.

Road Events usually award gold or small items while punishing by dealing damage or applying negative conditions at the start of the scenario.

Event_Road_TreasureTables.yml

As the party offers a healing potion in Option A, the potion is lost. In return, the man awards them with a Bless Condition. In Option B, the party is attacked, the undead deal damage and apply Wound Condition while awarding them with some XP.


Parser: TreasureTable
TT_EVENT_ROAD_100_OPTION_A:
	Condition: Bless
	LoseItem:
		TreasureDistributionType: Combined
		Name: MinorHealingPotionID
						
TT_EVENT_ROAD_100_OPTION_B:
	Condition: Wound
	Damage: 2
	XP: 3
					
Download

Update the InitialEvents YML

As the event is ready it needs to be placed in the Road Event deck somehow. There are two main ways of doing that. It can be unlocked through a TreasureTable placed anywhere in the game or it can be put into the deck at the start of the adventure through InitialEvents YML.

Initial_Events.yml

Parser: InitialEvents
RoadEvents:
	- Event_Road_100ID
				
Download

Edit LangUpdate CSV.

Finally, all text on each of the Screens needs to be filled up. All the keys present in the RoadEvent YML need to be put in the localisation sheet along with a corresponding value.

LangUpdate.csv
Key English [en-GB]
EVENT_ROAD_100_INTRO You see a man lying on the side of the road, blood pouring out of his mouth, with a vile wound on his neck. He tries to crawl his way to you not being able to utter a word.
EVENT_ROAD_100_OPTION_A Offer the man a health potion.
EVENT_ROAD_100_OPTION_A_UNAVAILABLE Requires: 1 Minor Healing Potion
EVENT_ROAD_100_OPTION_B Ignore the man and move on your way.
EVENT_ROAD_100_RESULT_A You helped the man drink the potion, and as he sat up after a while, he told you of the undead he fought. When he finally could move on his own, he muttered something under his breath and took off.
EVENT_ROAD_100_RESULT_B As you moved along your way, you sensed a brief touch down on your leg after which claws pierced through your skin. When you looked back, you saw the man standing up with a blank stare. He has turned into undead and you have to deal with the aftermath.
Download

YML Parsers

When writing a YML file you must first include the Parser: property to specify the type of YML Parser you wish to use. This section contains details on each YML Parser available.

If for example, you wish to add a new Quest then you need to use the Quest Parser. Simply add the Parser property and define Quest at the top of the YML file.

Parser: Quest

HeroSummon

This section details the parser properties available for the HeroSummon YML parser.

Property Name Data Type Description
ID Unique String

Unique Identifier for the HeroSummon.

LocKey String

HeroSummon's name represented in the User Interface. References a key in the localisation sheet.

Model String

Determines the appearance of the HeroSummon. Any model used by existing HeroSummons or Enemies is valid.

Attack Integer or Mapping

Attack action. Draws an attack modifier if applicable and deals damage. Melee by default.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Attack: DAMAGE

#OR

Attack:
	#ENHANCED ABILITY PROPERTIES
											
Range Integer or Mapping

Gives the HeroSummon a specified amount of range in tiles.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Range: TILES

#OR

Range:
	#ENHANCED ABILITY PROPERTIES
Move Integer or Mapping

Determines the number of hexes the summon moves.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Move: HEX_NUMBER

#OR

Move:
	#ENHANCED ABILITY PROPERTIES
Health

Determines the maximum amount of hit points the summon has.

If there is any additional information that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Health: AMOUNT

#OR

Health:
	#ENHANCED ABILITY PROPERTIES
HealthTable List of 9 Integers

Used for companions to specify their hit points on each of the character levels.

The following format is valid:

[HP_LVL_1,HP_LVL_2,HP_LVL_3,HP_LVL_4,HP_LVL_5,HP_LVL_6,HP_LVL_7,HP_LVL_8,HP_LVL_9

Shield Integer or Mapping

Determines how much damage should be shielded.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Shield: AMOUNT

#OR

Shield:
	#ENHANCED ABILITY PROPERTIES
Retaliate Integer or Mapping

Any actor attacking the summon is dealt damage equal to the value.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Retaliate: AMOUNT

#OR

Retaliate:
	#ENHANCED ABILITY PROPERTIES
RetaliateRange Integer

Limits the range that the attacks are being retaliated from.

Pierce Integer

Determines how much shield should be pierced with an attack.

Flying Boolean

Determines if the move has Flying property.

The following values are valid:

  • True
  • False
AttackAnimOverload String

Changes the attack animation.

For all valid values, see AnimOverload.

AttackOnDeathAnimOverload String

Changes the attack animation when killing an enemy.

For all valid values, see AnimOverload.

AdjacentAttackOnDeath Integer

Attacks all adjacent actors when it dies.

Determines the values of the attack.

StatIsBasedOnX Mapping or Scalar

For further information, see StatIsBasedOnX.

OnAttackCondition
OnAttackConditions
List of Strings

Summon's attacks apply a list of specified Conditions.

The following format is valid:

[CONDITION_1,CONDITION_2]

OnSummonAbilities Mapping

Triggers specified Abilities when summoned.

OnDeathAbilities Mapping

Triggers specified Abilities when dies.

SpecialAbilities Mapping

Triggers specified Abilities on the end of its turn.

AttackOverride Mapping

Overrides the summon's attack action with specified AbilityOverrides.

MoveOverride Mapping

Overrides the summon's move action with specified AbilityOverrides.

Colour Hex

Hex RGB colour to tint the model.

Example Purple - Colour: 913CC1

Not required. Default setting is no tint.

ChunkModifier Float

A value from 0.0 to 1.0 used to scale the thickness of the model.

Not required. Default setting is no modifier.

Vertex Float

A value from -0.5 to 0.5.

Not required. Default setting is no vertex.

Examples


Parser: HeroSummon
ID: PlagueRatID
LocKey: $PlagueRat$
Model: PlagueRat
Health:
	Amount: 6
	Enhancements: 1
Move:
	Amount: 1
	Enhancements: 1
Attack:
	Amount: 2
	Enhancements: 1
Range: 1
OnAttackCondition: Poison
AttackAnimOverload: PoisonAttack
					
Download

Character

This section details the parser properties available for the Character YML parser.

Property Name Data Type Description
ID Unique String

The Unique Identifier for Characters. This must be unique to all other Character IDs available.

LocKey Unique String

Represents the Character's name in the localisation sheet.

Model String

Model determines the Character's model as well as the look of the ability cards.

Any mercenary name without a space is valid.

DefaultSkin Integer

Represents the skin of the Character's model.

The following values are valid:

  • 0 - Not Set
  • 1 - Default
  • 2 - Alternate

Currently alternate skins are supported only for Brute, Cragheart, Mindthief, Scoundrel, Spellweaver and Tinkerer.

HealthTable List of Integers

Determines the Character's base hit points at each of the 9 levels.

NumberAbilityCardsInBattle List of Integers

Affects the number of cards the Character can take to battle. The Character has to have at least that amount of cards available to be valid.

AttackModifierDeck String

Sets the default Attack Modifier Deck. In most cases, this will be Standard unless a custom deck is used.

CompanionSummonData String

If included, it should reference a Hero Summon's ID. That companion will be summoned at the beginning of a battle.

Description String

A brief description of the Character.

Role String

Represents the Character's role in the game, for example, Damage or Support.

Difficulty String

Represents difficulty in the mercenary selection. It could be anything, but the standard is Low -> Medium -> High -> Very High.

Strengths String

Outlines the Character's strengths within the mercenary selection. To make a nice bullet list use

- <indent=%15>[STRENGTH]</indent> for each entry.

Weaknesses String

Outlines the Character's weaknesses within the mercenary selection. To make a nice bullet list use

- <indent=%15>[WEAKNESS]</indent> for each entry.

Adventure_Description String

Represents the description entry, within the mercenary selection.

Examples

Necromancer

Parser: Character
ID: NecromancerID
LocKey: $Necromancer$
Model: Plagueherald
DefaultSkin: 1
HealthTable: [  6,  7,  8,  9, 10, 11, 12, 13, 14]
NumberAbilityCardsInBattle: 10
AttackModifierDeck: Standard
CompanionSummonData: NecromancerSkeletonID
Role: $Necromancer_ROLE$
Description: $Necromancer_DESCRIPTION$ 
Difficulty: $DIFFICULTY_HIGH$
Strengths: $Necromancer_STRENGTHS$
Weaknesses: $Necromancer_WEAKNESSES$
Adventure_Description: $Necromancer_ADVENTURE_DESCRIPTION$
					
Download
LangUpdates
Key English [en-GB]
Necromancer

Necromancer

Necromancer_ROLE

Ranged Damage/Summoner

Necromancer_DESCRIPTION

With their innate ability to comprehend the cycle of life some Necromancers enjoy companionship of the dead more than that of the living.

Necromancer_STRENGTHS

"-<indent=%15>Has a strong start with his Skeleton companion</indent>

-<indent=%15>Decent damage capabilities utilizing long range abilities and summons </indent>

-<indent=%15>A wide range of debuffs</indent>"

Necromancer_WEAKNESSES

"-<indent=%15>Highly vulnerable</indent>

-<indent=%15>Low mobility</indent>

-<indent=%15>Doesn't use any perfume</indent>"

Necromancer_ADVENTURE_DESCRIPTION

With their innate ability to comprehend the cycle of life some Necromancers enjoy companionship of the dead more than that of the living.

Download

AttackModifier

This section details the parser properties available for the AttackModifier YML parser.

Property Name Data Type Description
Name Unique Name

The Unique Name for AttackModifier will be referenced by AttackModifierDecks and Perks.

MathModifier String

Modifies the attack with a set value.

A valid string would be "-1", "+2" or "*3".

Shuffle Boolean

Determines if the card will be shuffled back to deck.

The following values are valid:

  • True
  • False
Rolling Boolean

Determines if another card will be drawn after this one.

The following values are valid:

  • True
  • False
IsBless Boolean

Determines if the card is a Bless card.

The following values are valid:

  • True
  • False
IsCurse Boolean

Determines if the card is a Curse card.

The following values are valid:

  • True
  • False
AddTarget Boolean

Adds an additional target to the attack.

The following values are valid:

  • True
  • False
Abilities Mapping

Adds Abilities to the attack.

For example, it might infuse an element.

AbilityOverrides Mapping

Overrides the original attack ability.

For example, the attack may disarm the target.

Detailed further in the Abilities section.

UseGenericIcon Boolean

Sets the icon in the User Interface to a generic modifier icon.

The following values are valid:

  • True
  • False
Examples

Infuse Dark +2 Card

Parser: AttackModifier
Name: AMC_Dark_P2
MathModifier: "+2"
Abilities:
	InfuseAbility:
		Infuse: [Dark]
					
Download

AttackModifierDeck

This section details the parser properties available for the AttackModifierDeck YML parser.

Property Name Data Type Description
Name Unique Name

The Unique Name for AttackModifierDeck will be referenced by enemies or characters using this deck./p>

IsMonsterDeck Boolean

Determines if the deck is used by enemies.

The following values are valid:

  • True
  • False
AttackModifierCards Dictionary

Pairs AttackModifier cards with their amount in the deck.

The following format is valid:

  • [ATTACK_MODIFIER_NAME1, NUMBER]
  • [ATTACK_MODIFIER_NAME2, NUMBER]
  • [ATTACK_MODIFIER_NAME3, NUMBER]
Examples

Monster Deck with only +0, +1, +2 and *2 cards

Parser: AttackModifierDeck
Name: MonsterDeck
IsMonsterDeck: True
AttackModifierCards:
    - [AMC_Basic_P0, 6]     #Existing +0 modifier card
    - [AMC_Basic_P1, 10]    #Existing +1 modifier card
    - [AMC_Basic_P2, 2]     #Existing +2 modifier card
    - [AMC_Basic_T2, 2]     #Existing *2 modifier card
					
Download

AbilityCard

This section details the parser properties available for the AbilityCard YML parser.

Property Name Data Type Description
Name String

Name of the Ability Card.

Character String

Determines which character has access to the Ability Card.

Has to reference Character's ID.

ID Unique String

Unique Identifier for the Ability Card.

Level Character

Determines level, at which the card is unlocked.

The following values are valid:

Numbers 1-9 and X

SupplyCard Boolean

Determines if the card is a Supply card.

Supply cards are only acquired through the abilities of other cards.

The following values are valid:

  • True
  • False
Initiative Integer

Sets the initiative of the Ability Card.

The following values are valid:

Integer value 1-99

Discard List of Two Strings

Determines if the card is discarded, lost or permanently lost after use.

The first string represents the top ability and the second represents the bottom ability.

The following values are valid:

  • [Discard,Lost]
  • [Lost,Lost]
  • [Discard, PermanentlyLost]
Data Mapping

Maps Abilities to the top or bottom of the card.

The following format is valid:

Data:
	Top:
		Abilities:
			##########
	Bottom:
		Abilities:
			##########
Layout Mapping

Determines how the card looks in the User Interface.

See Layout.

Examples

Ray Of Decay - Modded Necromancer ability from Character Mod Guide.

Parser: AbilityCard
Name: $ABILITY_CARD_RayOfDecay$
Character: NecromancerID
ID: 2001
Level: 1
Initiative: 45
Discard: [Discard, Discard]
Data:
	Top:
		Abilities:
			TAttack:
				Attack:
					Amount: 2
					Enhancements: 1
				Range: 4
				Target: 1
				Conditions: [Poison, Muddle]
	Bottom:
		Abilities:
			BMove:
				Move:
					Amount: 2
					Enhancements: 1
			BMuddle:
				Muddle: True
				Filter: Enemy
				Range: 3
Layout:
	Top:
	  - Row: "<b><size=130%>$Attack$ <sprite name=Attack> *TAttack* <size=100%><voffset=1>@TAttack@"
	  - Row: "<size=20%>"
	  - Row: "$Poison$ <sprite name=Poison>"
	  - Row: "$Muddle$ <sprite name=Muddle>"
	Bottom:
	  - Row: "<b><size=130%>$Move$ <sprite name=Move> *BMove* <size=100%><voffset=1>@BMove@"
	  - Row: "<size=20%> "
	  - Row: "$Muddle$ <sprite name=Muddle>"
	  - Row: "$Range$ <sprite name=Range *BMuddle.Range*"					
													
Download

ItemCard

This section details the parser properties available for the Perk YML parser.

Property Name Data Type Description
ID Unique Integer

Unique identifier for the ItemCard.

StringID Unique String

Unique identifier for the ItemCard.

Name String

Name for the item. References a key in the LangUpdates.csv.

Art String

Represents the sprite that will be used for the item in the game.

Any existing item's art is a valid value.

TotalInGame Integer

Determines the number of items present in the game.

Cost Integer

Determines the price of the item in the shop.

Slot String

Represents an equipment slot that the item belongs to.

The following values are valid:

  • Head
  • Body
  • Legs
  • OneHand
  • TwoHand
  • SmallItem
  • QuestItem
Usage String

Determines how many times the item card may be used.

The following values are valid:

  • Spent
  • Consumed
  • Unrestricted

Unrestricted does not limit the number of usees.

Consumed can only be used once.

Spent limits the number of uses using XPTracker within the Data property.

UsedWhenEquipped Boolean

If True, the item is automatically used.

The following values are valid:

  • True
  • False
Rarity String

Determines the item's rarity.

The following values are valid:

  • Common
  • Rare
  • Relic
ProsperityRequirement Integer

Determines required prosperity level for the item to show up in the shop.

Values between 0-9 are valid.

Trigger String

Determines when the item's effect is active.

The following values are valid:

  • PassiveEffect
  • AtStartOfRound
  • DuringOwnTurn
  • SingleTarget
  • SingleAbility
  • EntireAction
  • OnAttacked
  • AtEndOfTurn
Consumes String

Determines if the item requires to consume any elements to use.

The following values are valid:

  • Fire
  • Ice
  • Earth
  • Air
  • Dark
  • Light
  • Any
Data Mapping

Determines what the item does.

For further information, see Abilities.

Layout Mapping

Determines how the text on the card is laid out.

For further information, see Layout.

Examples

Chainmail

Parser: ItemCard
ID: 23
StringID: ChainmailID
Name: $ITEM_NAME_Chainmail$
Art: Chainmail
TotalInGame: 2
Cost: 20
Slot: Body 
Rarity: Rare
Usage: Spent
Trigger: PassiveEffect
ProsperityRequirement: 3
							
Data: 
	ShieldValue: 1
	Abilities:
		AShield:
			Shield: 1
			Filter: Self
			ActiveBonus:
				Duration: Persistent
				Behaviour: ShieldIncomingAttacks
				XPTracker: [0,0,0]
				IsToggleBonus: True
				ValidAbilityType: Attack
	CompareAbility:
		AbilityType: Attack
	AddModifiers:
		- [AMC_Basic_M1, 3]
Layout: 
	- Active:
		Ability: AShield
		ListLayout: "$Item_Chainmail$"
		Layout: "$Item_Chainmail$"
		Icon: "Shield"
	- Row: "<size=50%> "
	- XPTracker: AShield
					
Download

Perk

This section details the parser properties available for the Perk YML parser.

Property Name Data Type Description
ID Unique String

Unique Identifier for the perk.

Name String

Name used to distinguish a perk.

Description String

Describes what the perk does.

CharacterID String

References the character that has the perk available.

Available Integer

Determines how many times can a character unlock this perk.

CardsToAdd List of Strings

References AttackModifier cards that will be added to the deck

The following format is valid:

[ATTACK_MODIFIER_NAME1, ATTACK_MODIFIER_NAME1]

CardsToRemove List of Strings

References AttackModifier cards that will be removed form the deck

The following format is valid:

[ATTACK_MODIFIER_NAME1, ATTACK_MODIFIER_NAME1]

IgnoreNegativeItemEffects Boolean

Character with this perk will ignore negative item effects.

The following values are valid:

  • True
  • False
IgnoreNegativeScenarioEffects Boolean

Character with this perk will ignore negative scenario effects.

The following values are valid:

  • True
  • False
Examples

Perk that adds Infuse Dark +2

Parser: Perk
ID: Necromancer1
Name: Shade
Description: Add one <color="orange">+2</color> <sprite name=Dark> card
CharacterId: NecromancerID
Available: 2
CardsToAdd: [AMC_Dark_P2]
					
Download

Enhancements

This section details the parser properties available for the Enhancements YML parser.

Property Name Data Type Description
Enhancements Mapping

Maps an enhancement to its cost.

The following format is valid:

Enhancement: Cost

LevelOfAbilityCardCost List of Integers

Modifies the price depending on the ability card's level.

The following format is valid:

[Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9]

NumberOfPreviousEnhancementsCost List of Integers

Modifies the cost based on the number of previously applied enhancements.

The following format is valid:

[Enhancement0, Enhancement1, Enhancement2, Enhancement3]

MultiTargetMultiplier Integer

Multiplies the cost of enhancement if the ability targets more enemies.

Examples

Change base costs to 0, but make additional enhancements more expensive

Parser: Enhancements
Enhancements:
	# Name: BaseCost
	Poison: 0
	Wound: 0
	Muddle: 0
	Immobilize: 0
	Disarm: 0
	Curse: 0
	Strengthen: 0
	Bless: 0
	Jump: 0
	Fire: 0
	Ice: 0
	Air: 0
	Earth: 0
	Light: 0
	Dark: 0
	AnyElement: 0
	Area: 0  # This value is divided by the number of hexes on the ability
	SummonMove: 0
	SummonAttack: 0
	SummonRange: 0
	SummonHP: 0
	PlusMove: 0
	PlusAttack: 0
	PlusRange: 0
	PlusShield: 0
	PlusPush: 0
	PlusPull: 0
	PlusPierce: 0
	PlusRetaliate: 0
	PlusHeal: 0
	PlusTarget: 0
	PlusRetaliateRange: 0
LevelOfAbilityCardCost: [0, 25, 50, 75, 100, 125, 150, 175, 200]
NumberOfPreviousEnhancementsCost: [0, 200, 400, 600]
MultiTargetMultiplier: 3							
					
Download

EnemyCard

This section details the parser properties available for the EnemyCard YML parser.

Property Name Data Type Description
ID Unique Integer

The Unique Identifier for Enemy Ability Cards. This must be unique to all other Enemy Ability Card IDs available.

This ID is referenced AbilityCards in Enemy by ID.

Initiative Unsigned Integer

The turn Initiative assigned to this ability.

Shuffle Boolean

Shuffle determines if the Enemy Ability deck is shuffled at the end of the round the ability card is drawn.

The following values are valid:

  • True
  • False
Data Mapping

Data uses the Shared YML Property Abilities.

This defines the function of this ability.

Examples

Bandit Guard Card

Parser: EnemyCard
ID: 524
Initiative: 15
Shuffle: True
Data:
    Abilities: 
        Shield1:
            Shield: 1
            Filter: Self
            AnimOverload: PowerUp            
            ActiveBonusDuration: Round
        Retaliate1:
            Retaliate: 2
            Filter: Self
            AnimOverload: PowerUp            
            ActiveBonusDuration: Round
            SkipAnim: True
						
Download

Enemy

This section details the parser properties available for the Enemy YML parser.

Property Name Data Type Description
ID Unique String

The Unique Identifier for Enemies. This must be unique to all other Enemy IDs available.

Localisation must exist for ID

LocKey String

String identifying the localization for the Name displayed for this Enemy.

Localisation must exist for LocKey

Model Enum

The Model defines which graphics model and animations are used for this Enemy.

The following values are valid:

Colour Hex

Hex RGB colour to tint the model.

Example Purple- Colour: 913CC1

Not required. Default setting is no tint.

ChunkModifier Float

A value from 0.0 to 1.0 used to scale the thickness of the model.

Not required. Default setting is no modifier.

Vertex Float

A value from -0.5 to 0.5.

Not required. Default setting is no vertex.

MonsterType Enum

Type of Monster for this Enemy.

The following values are valid:

  • Monster
  • Boss
  • Object
StandeeLimit Unsigned Integer

The maximum number of this monster type that can be in play at one time.

NonEliteVariant String

If this monster is Elite, this is the Enemy ID of the non elite variant.

Not required. Default setting is empty (monster is not Elite).

PredominantlyMelee Boolean

PredominantlyMelee is used during monster spawning to spawn melee closer than ranged.

Not required. Default setting is False.

The following values are valid:

  • True
  • False
AbilityCards Unsigned Integer List

The list of IDs that reference EnemyCard by ID. These are added to the Enemy Ability Deck.

AddNumberOfPlayersTo Enum List

Will increase the listed base Enemy stats by the number of characters in the party.

Not required. Default setting is empty.

The following values are valid:

  • Health
  • Attack
  • Move
  • Range
  • Target
Level0 Mapping

Level0 uses the Shared YML Property BaseStats.

Defines the base stats of the Enemy at level 0.

Level1 Mapping

Level1 uses the Shared YML Property BaseStats.

Defines the base stats of the Enemy at level 1.

Level2 Mapping

Level2 uses the Shared YML Property BaseStats.

Defines the base stats of the Enemy at level 2.

Level3 Mapping

Level3 uses the Shared YML Property BaseStats.

Defines the base stats of the Enemy at level 3.

Level4 Mapping

Level4 uses the Shared YML Property BaseStats.

Defines the base stats of the Enemy at level 4.

Level5 Mapping

Level5 uses the Shared YML Property BaseStats.

Defines the base stats of the Enemy at level 5.

Level6 Mapping

Level6 uses the Shared YML Property BaseStats.

Defines the base stats of the Enemy at level 6.

Level7 Mapping

Level7 uses the Shared YML Property BaseStats.

Defines the base stats of the Enemy at level 7.

Examples

Bandit Guard Elite

Parser: Enemy
ID: BanditGuardEliteID
LocKey: $BanditGuardElite$
Model: Bandit Guard Elite
NonEliteVariant: BanditGuardID
PredominantlyMelee: True
AbilityCards: [524,525,526,527,528,529,530,531]
# Base Stats
Level0:
    Health: 9
    Move: 2
    Attack: 3
    Range: 1
    Target: 1
    Shield: 0
Level1:
    Health: 9
    Move: 2
    Attack: 3
    Range: 1
    Target: 1
    Shield: 1
Level2:
    Health: 10
    Move: 2
    Attack: 4
    Range: 1
    Target: 1
    Shield: 1
Level3:
    Health: 10
    Move: 3
    Attack: 4
    Range: 1
    Target: 1
    Shield: 2
Level4:
    Health: 11
    Move: 3
    Attack: 4
    Range: 1
    Target: 1
    Shield: 2
    Conditions: [Muddle]
Level5:
    Health: 12
    Move: 3
    Attack: 5
    Range: 1
    Target: 1
    Shield: 2
    Conditions: [Muddle]
Level6:
    Health: 14
    Move: 3
    Attack: 5
    Range: 1
    Target: 1
    Shield: 2    
    Conditions: [Muddle]
Level7:
    Health: 14
    Move: 3
    Attack: 5
    Range: 1
    Target: 1
    Shield: 3
    Conditions: [Muddle]
					
Download

MonsterData

This section details the parser properties available for the MonsterData YML parser.

Property Name Data Type Description
Threats Mapping

A mapping of Enemy IDs.

Each Enemy ID has a list of two integers

The first integer is the threat value of a Normal monster of this Enemy ID

The second integer is the threat value of an Elite monster of this Enemy ID

MonsterFamilies Mapping

.

UnlockDialogueLines uses the Shared YML Property MapDialogueLines.

The following localisations must exist for each ID (replace [ID] with the new ID value):

The following values are valid:

  • [ID]_NAME
  • [ID]_DESC
  • [ID]_LIST
  • [ID]_INTRO
MonsterGroups Mapping

A mapping of MonsterGroup Names.

Each MonsterGroup Name has a mapping of Enemy IDs.

Each Enemy ID has a list of six integers

The first integer is the minimum chance to spawn a Normal monster of this Enemy ID

The second integer is the maximum chance to spawn a Normal monster of this Enemy ID

The third integer is the chance to spawn an Elite monster of this Enemy ID for a one player scenario

The fourth integer is the chance to spawn an Elite monster of this Enemy ID for a two player scenario

The fifth integer is the chance to spawn an Elite monster of this Enemy ID for a three player scenario

The sixth integer is the chance to spawn an Elite monster of this Enemy ID for a four player scenario

Examples

Monster Data

Parser: MonsterData
# Elite IDs do not need to be used in this file.  Only the non-elite IDs for monsters should be used
Threats:
#   Monster Name           [Normal threat value, Elite threat value]
    BanditArcherID:        [25,50]
    LivingBonesID:         [25,50]
#Bosses
    BanditCommanderID:     [75,50]
    UndeadCommanderID:     [75,50]
#--------------------------------------------------------------------------------
MonsterFamilies:
    Bandit:
        Descriptions:
            Generic: ["A hive of villainy", "A group of outlaws have made this area their home", "The local region has been pillaged by Bandits" ]
            Crypt: ["A crypt defiled by Bandits", "Bandits have taken this crypt as their hideout", "Tomb robbers have pillaged this vault" ] 
        DefaultMonsterGroup:
        #   Monster Name:      [Min%, Max%]
            BanditGuardID:      [50, 75, 12, 25, 50, 75]
            BanditArcherID:     [25, 50, 12, 25, 50, 75]
    Demon_SunNight:
        Descriptions:
            Generic: ["Demons from another realm walk the land", "Strange creatures have been seen in this area", "Demons blight the land"]
            Crypt: ["A crypt full of Demons, surely treasures await?", "This tomb could hold a portal to another realm", "This crypt must be purged of the demonic hordes" ]
        DefaultMonsterGroup:
            SunDemonID:         [0, 100, 12, 25, 50, 75]
            NightDemonID:       [0, 100, 12, 25, 50, 75]
#--------------------------------------------------------------------------------
MonsterGroups:
#   Monster Group Name:
#       Monster Name:      [Min%, Max%]
    Bandit_WithSomeUndead:
        BanditGuardID:      [50, 75, 12, 25, 50, 75]
        BanditArcherID:     [25, 50, 12, 25, 50, 75]
        LivingBonesID:      [0, 25, 12, 25, 50, 75]
        LivingCorpseID:     [0, 25, 12, 25, 50, 75]
    Bandit_MainlyArchers:
        BanditGuardID:      [0, 25, 12, 25, 50, 75]
        BanditArcherID:     [75, 100, 12, 25, 50, 75]
    Bandit_Forest:
        BanditGuardID:      [25, 75, 12, 25, 50, 75]
        BanditArcherID:     [0,  50, 12, 25, 50, 75]
        HoundID:            [25, 75, 12, 25, 50, 75]
						
Download

TreasureTable

This section details the parser properties available for the TreasureTable YML parser.

Property Name Data Type Description
GiveToCharacter String

Determines if the rewards are given only to a specific character.

References Character's ID.

Group Mapping

The player is awarded a random entry out of the Group.

For further information, see Group Entries.

Item
UnlockProsperityItem
List of Strings

Adds a copy of an item to the player's equipment.

References Item's StringID.

The following format is valid:

[ITEM_1,ITEM_2]

ItemStocks
UnlockProsperityItemStocks
List of Strings

Adds a copy of an item to the city's available supply of items.

References Item's StringID.

The following format is valid:

[ITEM_1,ITEM_2]

Enhancements List of Strings

Unlocks a list of enhancements to buy.

References enhancements by their name.

The following format is valid:

[ENHANCEMENT_1,ENHANCEMENT_2]

Reference to an Item's StringID List of 8 Integers

The key is a reference to any Item's StringID.

Each of the numbers represents the chance for each of the scenario levels.

The following format is valid:

[CHANCE_1,CHANCE_2,CHANCE_3,CHANCE_4,CHANCE_5,CHANCE_6,CHANCE_7,CHANCE_8]

Any of the Treasure Types Mapping or Scalar

It is a single reward. Represents an entry in the treasure table.

Depending on the key, different properties may be available.

For further information, see Treasure Table Entries.

The following keys are valid:

  • Gold
  • Item
  • XP
  • Condition
  • Enhancement
  • Perk
  • Infuse
  • Damage
  • Prosperity
  • UnlockLocation
  • UnlockMerchant
  • UnlockEnhancer
  • UnlockTrainer
  • UnlockTemple
  • UnlockQuest
  • UnlockAchievement
  • UnlockChapter
  • UnlockCharacter
  • ItemStock
  • EnhancementSlots
  • UnlockPartyUI
  • PerkPoint
  • UnlockProsperityItem
  • UnlockProsperityItemStock
  • UnlockMultiplayer
  • EnemyCondition
  • Reputation
  • PerkCheck
  • Discard
  • CityEvent
  • RoadEvent
  • ConsumeItem
  • LoseItem
  • AddModifiers
  • ItemDesign
  • LockAchievement

Treasure Table Entries
Mapping Properties
Property Name Data Type Description
Name String

Represents a reference to a treasure.

Available for the following treasure types:

  • Item
  • ItemStock
  • UnlockProsperityItem
  • UnlockProsperityItemStock
  • LoseItem
  • Condition
  • EnemyCondition
  • Infuse
  • Enhancement
  • Perk
  • UnlockCharacter
  • LockAchievement
  • UnlockAchievement
  • UnlockLocation
  • UnlockQuest
  • CityEvent
  • RoadEvent
Slot String

Determines equipment slot of an Item.

The following values are valid:

  • Head
  • Body
  • Legs
  • OneHand
  • TwoHands
  • SmallItem
  • QuestItem

Available for the following treasure types:

  • ConsumeItem
  • LoseItem
Chance List of 8 Integers

Each of the numbers represents the chance for each of the scenario levels.

By default, each number is 100.

The following format is valid:

[CHANCE_1,CHANCE_2,CHANCE_3,CHANCE_4,CHANCE_5,CHANCE_6,CHANCE_7,CHANCE_8]

Available for each of the treasure types.

MinAmount List of 8 Integers

Represents a minimum amount of the specified entry that is rewarded for each of the scenario levels.

The following format is valid:

[AMOUNT_1,AMOUNT_2,AMOUNT_3,AMOUNT_4,AMOUNT_5,AMOUNT_6,AMOUNT_7,AMOUNT_8]

Available for each of the treasure types.

MaxAmount List of 8 Integers

Represents a maximum amount of the specified entry that is rewarded for each of the scenario levels.

The following format is valid:

[AMOUNT_1,AMOUNT_2,AMOUNT_3,AMOUNT_4,AMOUNT_5,AMOUNT_6,AMOUNT_7,AMOUNT_8]

Available for each of the treasure types.

Amount List of 8 Integers

Represent an exact amount of the specified entry that is rewarded for each of the scenario levels.

The following format is valid:

[AMOUNT_1,AMOUNT_2,AMOUNT_3,AMOUNT_4,AMOUNT_5,AMOUNT_6,AMOUNT_7,AMOUNT_8]

Available for each of the treasure types.

Duration TreasureDistributionType

Determines how the treasure is split between the party members.

The following values are valid:

  • Combined
  • PerMercenaryInParty
ChapterFilter Integer

Treasure of with a specified ChapterFilter are rewarded only in those chapters.

SubChapterFilter Integer

Treasure of with a specified SubChapterFilter is rewarded only in those subchapters.

Modifiers Sequence

Adds a specified number of selected attack modifiers to the deck.

The following format is valid:

- [MODIFIER_1,AMOUNT_1]


Scalar Values

Scalar values can be used if only one of the mapping properties is used. Depending on their data type and treasure type, they replace one of the mapping properties.

Available For Data Type Replaces
Gold
XP
Damage
Prosperity
EnhancementSlots
PerkPoint
Reputation
PerkCheck
Discard
List of 8 Integers MinAmount
None
Item
ItemStock
UnlockProsperityItem
UnlockProsperityItemStock
List of 8 Integers Chance
Item
ItemStock
UnlockProsperityItemStock
UnlockProsperityItem
LoseItem
Condition
EnemyCondition
Infuse
Enhancement
Perk
UnlockCharacter
UnlockAchievement
LockAchievement
UnlockLocation
UnlockQuest
CityEvent
RoadEvent
ConsumeItem
String Name
UnlockEnhancer
UnlockMerchant
UnlockTemple
UnlockTrainer
UnlockPartyUI
UnlockMultiplayer
ItemDesign
None Counts as True
Group Entries
Property Name Data Type Description
GiveToCharacter String

Determines if the rewards are given only to a specific character.

References Character's ID.

Group Mapping

The player is awarded a random entry out of the Group.

For further information, see Group Entries.

Item
UnlockProsperityItem
List of Strings

Adds a copy of an item to the player's equipment.

References Item's StringID.

The following format is valid:

[ITEM_1,ITEM_2]

ItemStocks
UnlockProsperityItemStocks
List of Strings

Adds a copy of an item to the city's available supply of items.

References Item's StringID.

The following format is valid:

[ITEM_1,ITEM_2]

Enhancements List of Strings

Unlocks a list of enhancements to buy.

References enhancements by their name.

The following format is valid:

[ENHANCEMENT_1,ENHANCEMENT_2]

Chance List of 8 Integers

Each of the numbers represents the chance for each of the scenario levels.

By default, each number is 100.

The following format is valid:

[CHANCE_1,CHANCE_2,CHANCE_3,CHANCE_4,CHANCE_5,CHANCE_6,CHANCE_7,CHANCE_8]

RepeatCount Integer

Determines how many entries are awarded from the group.

And Boolean

If True, both entries are awarded instead.

The following values are valid:

  • True
  • False
GiveToCharacterType String

If an item is given to a specific character, it can be equipped straight away instead.

The following values are valid:

  • Give
  • Equip
GiveToCharacterRequirementType String

The entry is awarded only if the character fulfils the requirements.

The following values are valid:

  • CharacterHasPersonalQuest
GiveToCharacterRequirementCheckID String

Specifies what personal quest does the character need for the requirement.

References Personal Quest's ID.

Reference to an Item's StringID List of 8 Integers

The key is a reference to any Item's StringID.

Each of the numbers represents the chance for each of the scenario levels.

The following format is valid:

[CHANCE_1,CHANCE_2,CHANCE_3,CHANCE_4,CHANCE_5,CHANCE_6,CHANCE_7,CHANCE_8]

Examples

Guildmaster's Broken Cart Road Event TreasureTables

BrokenCart_Help:
    Group:
        Gold: 10
        Condition: Strengthen
					

BrokenCart_Drink:
Gold:
	MinAmount: 2
	MaxAmount: 12
Group:
	Condition:
		Chance: 50
		Name: Strengthen
	Condition:
		Chance: 30
		Name: Muddle
	Nothing: 20
				
Download

Rooms

This section details the parser properties available for the Rooms YML parser.

Property Name Data Type Description
MapTiles List of Strings

Determines the shape of the room.

Room Shape Guide

The following values are valid:

  • A
  • B
  • C
  • D
  • E
  • F
  • G
  • H
  • I
  • J
  • K
  • M
  • N
  • LL
  • AB
  • AA
  • LN
  • ABCHL
  • ABHM
  • AD
  • BM
  • AG
  • AH
  • BI
  • CBG
  • CCN
  • CD
  • CL
  • CM
  • DDM
  • DKK
  • DN
  • GI
  • GN
  • GN2
  • JLJ
  • LM
  • LML
  • LN2
  • AL
  • DD
  • D21
  • Z
  • E21
  • C82
  • D82
  • M521
  • M522
  • BI356
  • L356
  • H76
  • G76
  • DC
  • B76

The following format is valid:

[SHAPE_1,SHAPE_2]

OneHexObstacles List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

TwoHexObstacles List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

ThreeHexObstacles List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

TerrainHotCoals List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

TerrainWater List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

TerrainRubble List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

TerrainThorns List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

GoldPiles List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

TreasureChestChance List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

PressurePlates List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

Traps List of Integers

Represents the chance of spawning the props.

Each entry in the list determines the chance of a single prop.

The following format is valid:

[PROP_1_CHANCE,PROP_2_CHANCE]

Examples

A medium/Large room with a high % of obstacles for ranged creatures to stand behind

Parser: Rooms
EmptyDefensiveBulwark:
	MapTiles: [H,I,L,M]
	OneHexObstacles: [40, 20]
	TwoHexObstacles: [100, 100]
	Traps: [50,30, 10]
	GoldPiles: [80,60,40,20]
	TreasureChestChance: [80]
							
Download

ScenarioAbility

This section details the parser properties available for the ScenarioAbility YML parser.

Property Name Data Type Description
ID String

Unique identifier for the ScenarioAbility.

ScenarioAbility Mapping

Determines what the ScenarioAbility does.

For further information, see Ability.

Examples

Ability summoning a Frost Demon

Parser: ScenarioAbility
ID: ScenarioAbility_Summon_FrostDemon
ScenarioAbility:
	Summon1:
		Summon: FrostDemonID
		Target: 1
		TargetIsBase: True
		AnimOverload: Summon
							
Download

Scenario

This section details the parser properties available for the Scenario YML parser.

Property Name Data Type Description
ID Unique String

A unique identifier for the scenario.

Description String

A description of the scenario that will be displayed in the UI.

BaseBiome String

Changes visuals at scenario level.

For all valid values, see Apparance Properties.

BaseSubBiome String

Changes visuals at scenario level.

For all valid values, see Apparance Properties.

BaseTheme String

Changes visuals at scenario level.

For all valid values, see Apparance Properties.

BaseSubTheme String

Changes visuals at scenario level.

For all valid values, see Apparance Properties.

BaseTone String

Changes visuals at scenario level.

For all valid values, see Apparance Properties.

MonsterFamily String

The name of the base monster family present in the scenario.

Boss String

References the Boss's ID.

BossCount Integer

Determines the number of bosses in the scenario.

RewardTreasureTables List of Strings

Represents rewards for completing the scenario.

References identifiers of treasure tables.

The following format is valid:

[TREASURE_TABLE_ID_1, TREASURE_TABLE_ID_2]

ChestTreasureTables List of Strings

Represents rewards for looting chests.

References identifiers of treasure tables.

The following format is valid:

[TREASURE_TABLE_ID_1, TREASURE_TABLE_ID_2]

ScenarioMeshes List of Strings

List of icon names that are displayed on the map.

The following format is valid:

[SCENARIO_MESH_1, SCENARIO_MESH_2]

ScenarioStartMessage Mapping

A message displayed at the start of the scenario.

The message has to have a layout and dialogue lines.

For further details, see Message

ScenarioEndMessage Mapping

A message displayed at the end of the scenario.

The message has to have a layout and dialogue lines.

For further details, see Message

ScenarioLayout Mapping

Represents all possible rooms along with their appearance, monsters, obstacles, etc.

See Scenario Layout.

Scenario Layout

Property Name Data Type Description
Objectives Mapping

An objective type mapped to either Win or Lose objective. Some objective types require additional information. See Objectives.

Possible objective types include:

  • KillAllEnemies
  • KillAllBosses
  • ReachRound
  • ActorReachPosition
  • LootX
  • XCharactersDie
  • DestroyXObjects
  • ActivateXPressurePlates
  • RevealAllRooms
  • AllCharactersMustLoot
  • AnyActorReachPosition
  • DeactivateXSpawners
  • ActorsEscaped
  • DealXDamage

Example valid formats:

  • Objectives:
    	KillAllEnemies: Win
  • Objectives:
    	ReachRound:
    		ReachRound: 10
    		Result: Lose
ScenarioModifiers Mapping

A single Scenario Modifier must include its type, when it is triggered as well as any additional information dependant on the type.

See Scenario Modifiers.

Rooms Mapping

Maps information about rooms with a list of possible rooms.

See Rooms.

Objectives

Property Name Data Type Description
Result String

Determines if it is a win or a lose objective.

The following values are valid:

  • Win
  • Lose
Filter Mapping

Some objectives may concern only specific actors or groups of actors. In that case, a filter is necessary.

See Objective Filters.

ActivationRound Integer

Represents the round when the objective becomes active. It starts from the beginning of the scenario on default.

ReachRound Integer

Necessary to specify for objective type ReachRound.

Sets the round to be reached to complete the objective.

KillAmount List of Integers

Necessary to specify for objective type XCharactersDie.

Determines how many actors should die for each of the party sizes.

The following format is correct:

[NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]

LootAmount List of Integers

Necessary to specify for objective type LootX.

Determines how many tiles should be looted for each of the party sizes.

The following format is correct:

[NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]

DestroyAmount List of Integers

Necessary to specify for objective type DestroyXObjects.

Determines how many objects should be destroyed for each of the party sizes.

The following format is correct:

[NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]

ActivateAmount List of Integers

Necessary to specify for objective type ActivateXPressurePlates.

Determines how many pressure plates should be activated for each of the party sizes.

The following format is correct:

[NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]

ActorAmount List of Integers

Necessary to specify for objective type ActorReachPosition.

Determines how many actors should reach the exit room for each of the party sizes.

The following format is correct:

[NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]

DamageAmount List of Integers

Necessary to specify for objective type DealXDamage.

Determines how much damage should be dealt for each of the party sizes.

The following format is correct:

[NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]

Scenario Modifiers

Property Name Data Type Description
Type String

Determines what the modifier does.

The following values are valid:

  • SetElements
  • TriggerAbility
  • AddConditionsToAbilities
  • ApplyConditionToActor
  • ApplyActiveBonusToActor
  • AddModifierCards
  • PhaseOut
  • PhaseInAndTeleport
TriggerPhase String

Determines when the modifier is triggered.

The following values are valid:

  • StartRound
  • EndRound
  • StartScenario
  • AfterAbility
  • OnActorSpawned
Filter String

Some scenario modifiers may concern only specific actors or groups of actors. In that case, a filter is necessary.

See Objective Filters.

StrongElements List of Strings

Optional to specify for scenario modifier type SetElements.

Sets specified elements to strong.

The following values are valid within the list:

  • Fire
  • Ice
  • Earth
  • Air
  • Dark
  • Light

The following format is valid:

[ELEMENT_1, ELEMENT_2]

WaningElements List of Strings

Optional to specify for scenario modifier type SetElements.

Sets specified elements to waning.

The following values are valid within the list:

  • Fire
  • Ice
  • Earth
  • Air
  • Dark
  • Light

The following format is valid:

[ELEMENT_1, ELEMENT_2]

InertElements List of Strings

Optional to specify for scenario modifier type SetElements.

Sets specified elements to inert.

The following values are valid within the list:

  • Fire
  • Ice
  • Earth
  • Air
  • Dark
  • Light

The following format is valid:

[ELEMENT_1, ELEMENT_2]

ScenarioAbilityID String

Necessary to specify for scenario modifier types TriggerAbility and ApplyActiveBonusToActor.

Sets ability to be triggered or applied continuously.

References a ScenarioAbility.

Conditions List of Strings

Necessary to specify for scenario modifier types ApplyConditionToActor and AddConditionsToAbilities.

Lists all conditions that should be applied.

The following format is correct:

[CONDITION_1, CONDITION_2]

ConditionDecrementTrigger String

Necessary to specify for scenario modifier types ApplyConditionToActor and AddConditionsToAbilities.

Determines when the condition should be removed.

The following values are valid:

  • Abilities
  • Actions
  • Turns
  • Rounds
  • Never
  • ConditionalCondition
ApplyToEachActorOnce Boolean

Determines if the scenario modifier should only be applied once.

The following values is correct:

  • True
  • False
IsPositive Boolean

It should be set to True if the scenario modifier brings a positive effect, such as buff or positive condition.

The following values are valid:

  • True
  • False
DamageAmount List of Integers

Necessary to specify for objective type DealXDamage.

Determines how much damage should be dealt for each of the party sizes.

The following format is correct:

[NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]

Rooms

Property Name Data Type Description
Threat Integer

Determines threat level of the room. Monsters are spawned using the threat level.

ParentRoom String

It is a reference to the Parent Room's name. It can be left out most of the time.

BossInHere Boolean

Indicates if it is the boss room.

The following values are valid:

  • True
  • False
RoomRevealMessage Mapping

A message displayed when the room is revealed.

The message has to have a layout and dialogue lines.

For further details, see Message

IsDungeonExitRoom Boolean

If the objective is to escape the scenario, it requires a specific room to be the escape route. It is determined by this property

The following values are valid:

  • True
  • False
IsAdditionalDungeonEntrance Boolean

Determines if it is possible to enter the scenario from this room.

The following values are valid:

  • True
  • False
PossibleRooms Mapping

One of the possible rooms is chosen when generating the scenario.

If one wants it to always be the same room, put only one possible room.

See Possible Rooms.

Possible Rooms

Property Name Data Type Description
MonsterGroup String

Represents one of the monster groups available for the monster family selected at scenario level.

Those will be the actual monsters faced in the room.

Biome String

Overrides BaseBiome of the scenario level.

Changes visuals at room level.

For all valid values, see Apparance Properties.

SubBiome String

Overrides BaseSubBiome of the scenario level.

Changes visuals at room level.

For all valid values, see Apparance Properties.

Theme String

Overrides BaseTheme of the scenario level.

Changes visuals at room level.

For all valid values, see Apparance Properties.

SubTheme String

Overrides BaseSubTheme of the scenario level.

Changes visuals at room level.

For all valid values, see Apparance Properties.

Tone String

Overrides BaseTone of the scenario level.

Changes visuals at room level.

For all valid values, see Apparance Properties.

OneHexObstacles List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

TwoHexObstacles List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

ThreeHexObstacles List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

Traps List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

PressurePlates List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

TerrainHotCoals List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

TerrainWater List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

TerrainThorns List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

TerrainRubble List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

GoldPiles List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

TreasureChestChance List of Integers

Each entry within the list represents the chance of spawning. If the list contains two entries, only two have a chance to be spawned.

The following format is valid:

[NUMBER0-100, NUMBER0-100]

ChestTreasureTables List of Strings

Overrides treasure tables defined at scenario level.

Represents rewards for looting chests.

References identifiers of treasure tables.

The following format is valid:

[TREASURE_TABLE_ID_1, TREASURE_TABLE_ID_2]

GoalChest List of Strings

Overrides treasure tables defined at room and scenario level.

Represents loot included within the goal chest if the scenario objectives include looting a single chest.

References identifiers of treasure tables.

The following format is valid:

[TREASURE_TABLE_ID_1, TREASURE_TABLE_ID_2]

GoalChests Mapping

Overrides treasure tables defined at room and scenario level.

Represents loot included within goal chests if the scenario objectives include looting multiple chests.

References identifiers of treasure tables.

The following format is valid:

GoalChest1: [TREASURE_TABLE_ID_1, TREASURE_TABLE_ID_2]
GoalChest2: [TREASURE_TABLE_ID_1, TREASURE_TABLE_ID_2]
GoalChest3: [TREASURE_TABLE_ID_1, TREASURE_TABLE_ID_2]
											
AllyMonsters Tuple of String and List of Integers

Represents all ally monsters present in the room.

Requires the ID of the monster and a number of monsters spawned for each party size.

The following format is valid:

AllyMonsters:
	- [Monster1, NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]
	- [Monster2, NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]
											
Enemy2Monsters Tuple of String and List of Integers

Represents all monsters with a separate attack modifier deck present in the room.

Requires the ID of the monster and a number of monsters spawned for each party size.

The following format is valid:

Enemy2Monsters:
	- [Monster1, NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]
	- [Monster2, NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]
											
Objects Tuple of String and List of Integers

Represents all objects present in the room.

Requires the ID of the object and the number of objects spawned for each party size.

The following format is valid:

Objects:
	- [Object1, NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]
	- [Object2, NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]
											
Spawners Mapping

Holds information about all possible spawners in the room, when they are activated, what enemies are spawned etc.

See Spawners.

Spawners

Property Name Data Type Description
SpawnerTriggerType String

Determines when enemies are spawned from the spawner.

The following values are valid:

  • StartRound
  • EndRound
  • Both
SpawnerActivationType String

Determines when the spawner becomes active.

The following values are valid:

  • ScenarioStart
  • RoomOpen
  • RoomRevealed
SpawnStartRound Integer

Determines the first round of spawning.

LoopSpawnPattern Boolean

Determines if the spawner is a one-off or spawns continuously.

The following values are valid:

  • True
  • False
SpawnRoundInterval List of Integers

Determines spawning frequency based on the party size.

The following format is valid:

[NUMBER_SIZE_1, NUMBER_SIZE_2, NUMBER_SIZE_3, NUMBER_SIZE_4]

SpawnRoundEntries Mapping

Determines the order of spawning for each of the party sizes and selected difficulties.

References monster identifiers. If it should not spawn on a specific interval or party size, put 'Empty' instead.

The following format is valid:

SpawnRoundEntries:
  Default:
    - SpawnClasses: [MONSTER_ID_1, MONSTER_ID_2, MONSTER_ID_3, MONSTER_ID_4]
    - SpawnClasses: [MONSTER_ID_1, MONSTER_ID_2, MONSTER_ID_3, MONSTER_ID_4]
    - SpawnClasses: [MONSTER_ID_1, MONSTER_ID_2, MONSTER_ID_3, MONSTER_ID_4]
  Easy:
    - SpawnClasses: [MONSTER_ID_1, MONSTER_ID_2, MONSTER_ID_3, MONSTER_ID_4]
    - SpawnClasses: [MONSTER_ID_1, MONSTER_ID_2, MONSTER_ID_3, MONSTER_ID_4]
    - SpawnClasses: [MONSTER_ID_1, MONSTER_ID_2, MONSTER_ID_3, MONSTER_ID_4]
											
Apparance Properties

Biome SubBiome Theme SubTheme Tone
  • Inherit
  • Default
  • Crypt
  • Dungeon
  • Cave
  • Forest
  • City
  • Inherit
  • Default
  • Necropolis
  • Ruined
  • Sewers
  • Corpsewood
  • Marsh
  • StoneRooms
  • CityWalls
  • StoneWoodenRooms
  • Shack
  • Rot
  • Inherit
  • Default
  • Torture (Catacombs)
  • Library (Crypt, Ruined)
  • Treasure (Crypt, Ruined, Catacombs)
  • Kitchen (Crypt, Ruined)
  • AlchemyLab (Crypt, Ruined, Catacombs)
  • Chapel (Crypt, Ruined)
  • GeneralStore (Crypt, Ruined, Catacombs)
  • KitchenStore (Crypt, Ruined, Sewers)
  • TombStore (Crypt, Necropolis, Ruined)
  • TortureStore (Catacombs)
  • SculptorStudio (Crypt, Ruined)
  • BurialChamber (Necropolis)
  • Mausoleum (Necropolis)
  • Shrine (Necropolis)
  • Temple (Necropolis)
  • AncientLibrary (Necropolis)
  • Study (Necropolis)
  • Well (Ruined, Sewers)
  • DruidTemple (Ruined)
  • GuardRoom (Catacombs)
  • Prison (Catacombs)
  • CharnalHouse (Sewers)
  • CessPool (Sewers)
  • Armoury (General)
  • AncientTemple (Forest)
  • DeepForestGlade (Forest)
  • DruidGrove (Forest)
  • InoxBurialGround (Forest)
  • InoxCamp (Forest)
  • MagicGrotto (Forest)
  • MushroomLand (Forest)
  • StillWaters (Forest)
  • WoodcutterCottage (Forest)
  • VermlingVillage (Forest)
  • Volcanic (Cave)
  • Ice (Cave)
  • RockTemple (Cave)
  • OldMine (Cave)
  • Storeroom (City)
  • BanquetHall (City)
  • Tavern (City)
  • Church (City)
  • DruidStore (City)
  • Bedroom (City)
  • Pantry (City)
  • Apothecary (City)
  • Hallway (City)
  • Gallery (City)
  • Bordello (City)
  • PsychoHut (City)
  • HermitHut (City)
  • HuntersCabin (City)
  • TownStreet (City)
  • TownWalls (City)
  • Inherit
  • Default
  • Bandit
  • Undead
  • Demon
  • Cultist
  • Animal
  • FireDemon
  • IceDemon
  • TownMilitia
  • Inherit
  • Default
  • Dark
  • Natural
  • Spectral
  • Demonic
  • Toxic
  • Evil
  • Crystal
  • ForestDefault (Forest)
  • ForestEerie (Forest)
  • ForestMoonlight (Forest)
  • ForestFairy (Forest)
  • Bioluminescence (Cave)
  • LavaLamp (Cave)
  • GasLight (City)
  • CandleLight (Town)
Objective Filters

Property Name Data Type Description
ActorType List of Strings

Filters objectives/scenario modifiers to include actors only of those types.

The following values are valid:

  • Player
  • Enemy
  • Summon
  • Ally
  • Enemy2
  • Neutral

The following format is valid:

[TYPE_1, TYPE_2]

EnemyType List of Strings

Filters objectives/scenario modifiers to include enemies only of those types.

The following values are valid:

  • Normal
  • Elite
  • Boss
  • Object

The following format is valid:

[TYPE_1, TYPE_2]

LootType List of Strings

Filters objectives/scenario modifiers to include loot only of those types.

The following values are valid:

  • Gold
  • Chest
  • GoalChest

The following format is valid:

[TYPE_1, TYPE_2]

AbilityType List of Strings

Filters objectives/scenario modifiers to include abilities only of those types.

For all possible ability types, see Ability Types.

The following format is valid:

[TYPE_1, TYPE_2]

PlayerClasses List of Strings

Filters objectives/scenario modifiers to include only specific player characters. References IDs of actors.

The following format is valid:

[PLAYER_ID_1, PLAYER_ID_2]

EnemyClasses List of Strings

Filters objectives/scenario modifiers to include only specific enemies. References IDs of actors.

The following format is valid:

[ENEMY_ID_1, ENEMY_ID_2]

HeroSummonClasses List of Strings

Filters objectives/scenario modifiers to include only specific hero summons. References IDs of actors.

The following format is valid:

[HERO_SUMMON_ID_1, HERO_SUMMON_ID_2]

PlayerClasses List of Strings

Filters objectives/scenario modifiers to include only specific objects. References IDs of actors.

The following format is valid:

[OBJECT_ID_1, OBJECT_ID_2]

Examples

Bandits Job - Edited from Enemy Mod Guide to include only base game.

Parser: Scenario
ID: Scenario_Job_Bandits0001
BaseBiome: Forest
BaseSubTheme: Bandit
BaseTone: ForestDefault
MonsterFamily: Bandit
ScenarioMeshes: [DGN_Forest_01_MAT, DGN_Forest_02_MAT, DGN_Forest_03_MAT, DGN_Forest_06_MAT, DGN_Forest_09_MAT, DGN_Forest_16_MAT, DGN_Forest_17_MAT, DGN_Forest_19_MAT, DGN_Forest_20_MAT]
#RewardTreasureTables: [Boots, SmallGold, SmallGold]
ChestTreasureTables: [TT_Chapter_1_1_Chest]
							
ScenarioStartMessage:
	MessageLayoutType: 4
	DialogueLines:
		- Text: SCENARIO_JOB_1_1_BANDIT_FOREST_START_1
		  Character: Trainer
ScenarioCompleteMessage:
	MessageLayoutType: 4
	DialogueLines:
		- Text: SCENARIO_JOB_1_1_BANDIT_FOREST_SUCCESS
		  Character: Trainer
							
ScenarioLayout:
	Objectives:
		KillAllEnemies: Win
	Rooms:
		Room1:
			Threat: 150
			PossibleRooms:
				- HugeEmptyRoom:
					Theme: StillWaters
					MonsterGroup: Bandit_Forest
					OneHexObstacles: [100, 50]
					TwoHexObstacles: [100, 50]
					Traps: [30, 30, 30]
		Room2:
			Threat: 150
			PossibleRooms:
				- LargeEmptyRoom:
					MonsterGroup: Bandit_MainlyArchers
					Theme: StillWaters
					OneHexObstacles: [100,50] 
					TwoHexObstacles: [100, 50]
					Traps: [100,50,50]
					GoldPiles: [40,40,40]
					TreasureChestChance: [33]
						
Download

Difficulty

This section details the parser properties available for the Difficulty YML parser.

Property Name Data Type Description
Text String

Description shown while selecting difficulty.

ActiveOn List of Strings

Represents all difficulties that are affected.

The following formats are valid:

  • [Easy]
  • [Normal,Hard,Insane]
ThreatModifier Float

Modifies the threat level that is used for spawning monsters.

HeroHealthModifier Float

Modifies hit points of all heroes.

XPModifier Float

Modifies experience points gained on affected difficulties.

GoldModifier List of Integers

Modifies gold looted on affected difficulties.

BlessCards Integer

Adds a number of Bless cards to the Attack Modifier Deck.

CurseCards Integer

Adds a number of Curse cards to the Attack Modifier Deck.

PositiveEffect Boolean

It should be set to True if it is a positive effect for heroes, such as buff or weaker enemies.

The following values are valid:

  • True
  • False
ScenarioLevelModifier Integer

Modifies strength of the enemies on affected difficulties.

Examples

Add 2 Curse cards on Insane difficulty in Guildmaster.

Parser: Difficulty
Guildmaster:
	Cursed:
		Text: $DIFFICULTY_CURSED$
		CurseCards: 2
		ActiveOn: [Insane]
		PositiveEffect: False
						
LangUpdates

DIFFICULTY_CURSED,Cursed Heroes start each scenario with +2 Curses in their deck.

Download

Achievement

This section details the parser properties of the Achievement YML parser.

Property Name Data Type Description
ID Unique String A unique identifier for the achievement.
LocalisedName String Achievement's name. References a key in the localisation sheet.
LocalisedDescription String Achievement's description. References a key in the localisation sheet.
UnlockCondition Mapping

Determines what triggers the achievement to unlock for completion. If the achievement should not be shown before completion, UnlockCondition should be the same as AchievementCondition.

For further information see UnlockConditions.

AchievementCondition Mapping

Determines what triggers the achievement to complete. If the achievement should not be shown before completion, UnlockCondition should be the same as AchievementCondition.

For further information see UnlockConditions.

TreasureTables List of Strings

Determines what are the rewards for completing the achievement. References IDs of TreasureTables.

The following format is valid:

[TREASURE_TABLE_ID_1,TREASURE_TABLE_ID_2]

AchievementType String

Determines the type of achievement.

The following values are valid:

  • Enhancements
  • General
  • Mercenaries
  • Kill
  • Relics
  • Party
  • Global
  • Campaign
  • TownRecord
AchievementLevel Integer

The achievement level is displayed in the UI but does not actually have any other functionality.

Only the following values are valid:

  • 0
  • 1
  • 2
CompleteDialogueLines Sequence of Mappings

Dialogue Lines are displayed after the completion of the achievement.

For further information see MapDialogueLines.

AchievementOrderId Unique String

Determines the order of achievements in the UI.

For further information see MapDialogueLines.

Examples

Achievement for stunning 20 enemies.

Parser: Achievement
ID: Achievement_InflictStun
LocalisedName: $Achievement_InflicsStun_Name$
LocalisedDescription: $Achievement_InflictStun_Desc$
UnlockCondition:
    - Prosperity: 0
AchievementCondition:
	- Targets:
	    Filter: UseAbility
		AbilityTypes: Stun
		Value: 20
TreasureTables: [TT_Achievement_InflictStun]
AchievementType: General
AchievementLevel: 0
AchievementOrderID: 10001
LangUpdates

Achievement_InflictStun_Name,Stun Mastery
Achievement_InflictStun_Desc,Inflict Stun 20 times

Download

RoadEvent

This section details the parser properties of the RoadEvent YML parser.

Property Name Data Type Description
ID String

Unique Identifier for the RoadEvent.

LocKey String

RoadEvent's name. References a key in the localisation sheet.

Screens Mapping

Screens are separate GUI elements in which the RoadEvent's text is displayed and players are able to make decisions.

For further information, see Screens.


Screens
Property Name Data Type Description
Gained Mapping

The screen activates only if the party has gained something from previous screen's treasure table.

It is determined within Event Treasure Conditions.

Lost Mapping

The screen activates only if the party has lost something from previous screen's treasure table.

It is determined within Event Treasure Conditions.

InParty Mapping

The screen activates only if the party has one of the characters specified with ClassIDs in it.

It is determined within Event Treasure Conditions.

Reputation Mapping

The screen activates only if the party's reputation satsfies the condition.

It is determined within Event Treasure Conditions.

MinGold Mapping

The screen activates only if the party's gold satisfies the condition.

It is determined within Event Treasure Conditions.

HaveItem Mapping

The screen activates only if the party has the specified item.

It is determined within Event Treasure Conditions.

Text String

The text that appears when the screen is shown.

References a key in the localisation sheet.

Options Mapping

Gives the player options for the next screen.

For further information, see Options.

Next String

References a screen that should show after the current one.

End String

Determines what happens after the screen.

The following values are valid:

  • Reuse
  • Discard
  • True
TreasureTable
TreasureTables
List of Strings

Determines what the party gains or loses in the screen.

References TreasureTables' IDs.

The following format is valid:

[TT_1,TT_2]


Event Treasure Conditions
Property Name Data Type Description
Item
Items
List of Strings

Allows specifying items for Gained/Lost/HaveItem screens.

References ItemCards' StringIDs.

The following format is valid:

[ITEM_1,ITEM_2]

XP Integer

Allows specifying the amount of XP for Gained/Lost screens.

Gold Integer

Allows specifying the amount of gold for Gained/Lost screens.

Damage Integer

Allows specifying the amount of damage for Gained screens.

Condition
Conditions
List of Strings

Allows specifying Conditions for the screen to appear.

The following format is valid:

[CONDITION_1,CONDITION_2]

EnemyCondition
EnemyConditions
List of Strings

Allows specifying EnemyConditions for the screen to appear.

The following format is valid:

[CONDITION_1,CONDITION_2]

Infuse
Infusion
Infusions
List of Strings

Allows specifying elemental infusions for Gained screens.

The following format is valid:

[ELEMENT_1,ELEMENT_2]

Screen Mapping

Allows nesting a screen inside another screen.

Amount String or Integer

Allows specifying the amount of gold for MinGold and reputation for Reputation screens.

The following formats are valid for Reputation:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"

The following values are valid for MinGold:

  • Amount: INTEGER
  • Amount: Each

Options
Property Name Data Type Description
Text String

The text that appears when the screen is shown.

References a key in the localisation sheet.

Subtext String

The subtext that appears when the screen is shown.

References a key in the localisation sheet.

Next String

References a screen that should show after the current one.

TreasureTable
TreasureTables
List of Strings

Determines what the party gains or loses on the screen.

References TreasureTables' IDs.

The following format is valid:

[TT_1,TT_2]

OptionConditions Mapping

The option may not be available in certain circumstances. In that case conditions are in need.

The mapping has the following properties:

  • InParty - String, references CharacterID
  • NotInParty - String, references CharacterID
  • MinGold - Integer
  • MaxGold - Integer
  • HaveItem - String, references ItemCard's StringID
  • HaveItemSlotEquipped - String, equipment slot
UnavailableText String

The text that appears when the option is not available.

References a key in the localisation sheet.

Examples

Event from RoadEvent Guide.

Parser: RoadEvent
ID: Event_Road_100ID
LocKey: $RoadEvent$
Screens:
    Decision:
        Text: "EVENT_ROAD_100_INTRO"
        Options:
            A:
                Text: "EVENT_ROAD_100_OPTION_A"
                Next: EVENT_ROAD_100_OPTION_A
                OptionConditions:
                    HaveItem: MinorHealingPotionID
                UnavailableText: "EVENT_ROAD_100_OPTION_A_UNAVAILABLE"
            B:
                Text: "EVENT_ROAD_100_OPTION_B"
                Next: EVENT_ROAD_100_OPTION_B
    EVENT_ROAD_100_OPTION_A:
        Text: "EVENT_ROAD_100_RESULT_A"
        TreasureTables: TT_EVENT_ROAD_100_OPTION_A
        End: True
    EVENT_ROAD_100_OPTION_B:
        Text: "EVENT_ROAD_100_RESULT_B"
        TreasureTables: TT_EVENT_ROAD_100_OPTION_B
        End: True
Download

VisibilitySphere

This section details the parser properties of the VisibilitySphere YML parser.

Property Name Data Type Description
ID Unique String

Unique Identifier for the VisibilitySphere.

SphereDefinition Sequence

Each definition has two properties - MapLocation and Radius.

MapLocation is a List of Two Integers. For further information, see MapLocations.

Radius is an Integer that determines the Sphere's size.

UnlockCondition Mapping

Determines what unlocks the VisibilitySphere.

For further information, see UnlockConditions.

Examples

Guildmaster's VisibilitySphere

Parser: Temple
ID: TempleID
TempleBlessings:
    - Condition: Bless
      Quantity: 2
      GoldCost: 10
#    - Condition: Strengthen
#      Quantity: 1
#      GoldCost: 10
#    - Condition: Invisible
#      Quantity: 1
#      GoldCost: 10
#    - Condition: Advantage
#      Quantity: 1
#      GoldCost: 10

DonationTable:
  - [100, TT_Chapter_1_1_Chest]
  - [150, TT_Chapter_1_1_Chest]
  - [200, TT_Chapter_1_1_Chest]
  - [250, TT_Chapter_1_1_Chest]
  - [300, TT_Chapter_1_1_Chest]
  - [350, TT_Chapter_1_1_Chest]
  - [400, TT_Chapter_1_1_Chest]
  - [500, TT_Chapter_1_1_Chest]
  - [600, TT_Chapter_1_1_Chest]
  - [700, TT_Chapter_1_1_Chest]
  - [800, TT_Chapter_1_1_Chest]
  - [900, TT_Chapter_1_1_Chest]
  - [1000, TT_Chapter_1_1_Chest]
Download

Temple

This section details the parser properties of the Temple YML parser.

Property Name Data Type Description
ID Unique String

Unique Identifier for the Temple.

TempleBlessings Sequence of Mappings

Determines costs of donations as well as their benefits.

The mapping has three properties:

  • Condition - String, references a Condition.
  • Quantity - Integer, determines the number of conditions applied (Bless).
  • GoldCost - Integer, determines the cost of a donation.

The following format is valid:

TempleBlessings:
    - Condition: CONDITION
	  Quantity: QUANTITY
	  GoldCost: COST
	- Condition: CONDITION
	  Quantity: QUANTITY
	  GoldCost: COST
DonationTable Sequence of Tuples (Integer and String)

Determines rewards for donating to the Temple.

Each entry holds the amount of gold that must be donated and a reference to TreasureTable's ID that is awarded.

The following format is valid:

DonationTable:
    - [ACCUMULATED_DONATION_GOLD, TREASURE_TABLE]
    - [ACCUMULATED_DONATION_GOLD, TREASURE_TABLE]
    - [ACCUMULATED_DONATION_GOLD, TREASURE_TABLE]
Examples

Guildmaster's Temple

Parser: Temple
ID: TempleID
TempleBlessings:
    - Condition: Bless
      Quantity: 2
      GoldCost: 10
#    - Condition: Strengthen
#      Quantity: 1
#      GoldCost: 10
#    - Condition: Invisible
#      Quantity: 1
#      GoldCost: 10
#    - Condition: Advantage
#      Quantity: 1
#      GoldCost: 10

DonationTable:
  - [100, TT_Chapter_1_1_Chest]
  - [150, TT_Chapter_1_1_Chest]
  - [200, TT_Chapter_1_1_Chest]
  - [250, TT_Chapter_1_1_Chest]
  - [300, TT_Chapter_1_1_Chest]
  - [350, TT_Chapter_1_1_Chest]
  - [400, TT_Chapter_1_1_Chest]
  - [500, TT_Chapter_1_1_Chest]
  - [600, TT_Chapter_1_1_Chest]
  - [700, TT_Chapter_1_1_Chest]
  - [800, TT_Chapter_1_1_Chest]
  - [900, TT_Chapter_1_1_Chest]
  - [1000, TT_Chapter_1_1_Chest]
Download

Village

This section details the parser properties of the Village YML parser. Villages should be used in Guildmaster only.

Property Name Data Type Description
ID Unique String

Unique Identifier for the village.

LocalisedName String

Name of the village. References a key in the localization sheet.

LocalisedDescription String

Village's description that is displayed in the User Interface. References a key in the localization sheet.

Mesh String

Represents the icon that is displayed on the map.

MapLocation List of 2 Integers

Determines where the village lies on the map.

For further information, see MapLocations.

JobLocations Sequence of Lists of 2 Integers

Determines where jobs lie on the map.

For further information, see MapLocations.

The following format is valid:

JobLocations:
    - [X, Y]
    - [X, Y]
    - [X, Y]
UnlockCondition

Determines what needs to be done in order to unlock the village.

For further information, see UnlockConditions.

Quests List of Strings

Determines quests that can be completed from the village.

References Quests' IDs.

The following format is valid:

Quests:
    - QUEST_1_ID
    - QUEST_2_ID
    - QUEST_3_ID
Examples

Guildmaster's Gibbet Hill

Parser: Village
ID: GibbetHill
LocalisedName: $GibbetHill$
LocalisedDescription: $ADVENTURE_LOCATION_TheMarches_Desc$
Mesh: Ca11_GibbetHill_MAT
MapLocation: [979,516]
JobLocations: 
    - [1014, 530]
    - [932, 526]
    - [1002, 469]

UnlockCondition:
    - Chapter: [1,0]
    - CompletedQuest: Quest_Travel_GibbetHill
Quests:
#STORY
    - Quest_Story_Soothsinger_1
#FTUE
    - Quest_Story_5A   
#TRAVEL
    - Quest_Travel_Hammerholm
    - Quest_Travel_Toadmoor
    - Quest_Travel_Amberhill
#RELIC
    - Quest_Relic_ResonantCrystal
#JOBS-FOREST    
    - Quest_Job_Chapter_1_1_Bandit_Forest
    - Quest_Job_Imps_Spirits_Forest
    - Quest_Job_Inox_Vermling_Forest
    - Quest_Job_MindControl
    - Quest_Job_TheHaunting
    - Quest_Job_TheStoneMan    
#JOBS-CRYPT
    - Quest_Job_Chapter_1_1_Undead_Crypt
    - Quest_Job_Chapter_1_1_Undead_Bandit_Crypt 
    - Quest_Job_Snakes_Undead_Crypt    
    - Quest_Job_Mysterious_Maze 
    - Quest_Job_AnEyeForAnEye
    - Quest_Job_DemonicDissent
    - Quest_Job_TheVaultsOfPus    
#JOBS-CAVE
    - Quest_Job_Vermling_Cave
    - Quest_Job_TwoTribes
    - Quest_Job_CallOfTheWild
    - Quest_Job_DemonAltars
    - Quest_Job_FireCult
    - Quest_Job_SavvasAid
    - Quest_Job_SavvasInfighting    
    
#JOBS-FOREST    
    - Quest_Job_FellHounds
#JOBS-CRYPT
    - Quest_Job_DungeonOfMisfortune
Download

Quest

This section details the parser properties available for the Quest YML parser.

Property Name Data Type Description
ID Unique String

The Unique Identifier for Quests. This must be unique to all other quest IDs available.

The following localisations must exist for each Quest ID (replace [ID] with the new ID value):

  • [ID]_NAME
  • [ID]_DESC
  • [ID]_LIST
  • [ID]_INTRO
Chapter Unsigned Integer

Which Chapter the quest belongs to.

This can be used when defining Chapter and SubChapter difficulty levels in a Headquarters YML file, and for UnlockConditions that require a set number of quests from a Chapter to be completed.

QuestType Enum

The QuestType defines which heading in the quest log this quest can be found under, and the map icon used.

The following values are valid:

  • Story
  • Travel
  • Relic
  • Job
  • City
IconType Enum

The IconType is used by Story quests to override the base Story quest Icon to boss or specific character icons.

The following values are valid:

  • RequiredCharacter
  • Boss
CharacterIcon String

This value must be a CharacterID set in a Character YML. It is only used when the IconType is set to RequiredCharacter.

UnlockDialogueLines Mapping

UnlockDialogueLines uses the Shared YML Property MapDialogueLines.

These dialogue lines are triggered on the map after unlocking the quest.

CompleteDialogueLines Mapping

CompleteDialogueLines uses the Shared YML Property MapDialogueLines.

These dialogue lines are triggered on the map after completing the quest.

UnlockRevealFoWSphere Mapping

UnlockRevealFoWSphere uses the YML definition Visibility Sphere.

This reveals a spherical area on the map when the quest is unlocked.

CompleteRevealFoWSphere Mapping

CompleteRevealFoWSphere uses the YML definition Visibility Sphere.

This reveals a spherical area on the map when the quest is completed.

CompletionRewards String List

A list of string IDs that reference Treasure Tables by ID. These are awarded to the party upon completion of the quest.

UnlockCondition Mapping

UnlockCondition uses the Shared YML Property UnlockConditions.

This is the condition for unlocking the quest.

BlockCondition Mapping

BlockCondition uses the Shared YML Property UnlockConditions.

This is the condition that causes the quest to be blocked and no longer unlockable.

RequiredCharacters Mapping

RequiredCharacters uses the Shared YML Property QuestCharacterRequirements.

These are requirements for characters in the party to start the quest.

StartingVillage String

This value must be an ID from a Village/Headquarters YML. It is used to determine the location that the party starts moving from when they start this quest.

EndingVillage String

This value must be an ID from a Village/Headquarters YML. This is used by Travel quests in Guildmaster mode to determine the Village that should be unlocked once this quest is completed.

LinkedQuestID String

This value must be an ID from another Quest.

Used in Campaign mode to determine Quests that are linked and do not require the players to return to Gloomhaven before moving onto it.

EventChance Unsigned Integer List - 8 Entries

A list of 8 Unsigned Integers which determines the chance of encountering a Road Event when on this quest for each scenario level (0-7).

This entry can be left null and the event chance will be retrieved from the Headquarters YML instead.

EventPool List String

A list of String IDs which reference the Unique IDs of Road Event YMLs.

This entry can be left null and the event pool will be retrieved from the Headquarters YML instead.

Scenario Mapping

Scenario uses the Shared YML Property MapScenario.

An ID reference to the Scenario YML for this quest and it's location on the map.

LoadoutImageId String This string defines the image shown on the customise loadout screen before entering a scenario. List of all Narrative Image IDs.
NarrativeTextImageOverride List<Tuple<string, string>> A list of tuples made of two strings. String1 refers to a localisation key for text used by narrative text boxes. String2 refers to a Narrative Image ID to be shown alongside that text.
Examples

Story Quest
Parser: Quest
 ID: Quest_Story_3A
 Chapter: 1
 QuestType: Story
 CharacterIcon: BruteID
 CompleteDialogueLines:
     - Text: Message_End_Quest_Story_3A_1
       Character: Trainer
       CameraLocation: [1160,600]
     - Text: Message_End_Quest_Story_3A_2
       Character: Merchant
     - Text: Message_End_Quest_Story_3A_3
       Character: Trainer
       CameraLocation: [1257,583]
 CompletionRewards: TT_Quest_Story_3A
 LoadoutImageId: CR_DF_01
 UnlockCondition:
     - UnlockedVillage: Demonsgate
     - Chapter: [1,0]
 StartingVillage: Demonsgate
 EndingVillage: Demonsgate
 EventChance: [0, 0, 0, 0, 0, 0, 0, 0]
 EventPool:
     - [AbandonedCartID, 100]
 Scenario:
     MapLocation: [1086, 580]
     ScenarioPool: 
         - [3A, 100]
Download
Relic Quest
Parser: Quest
 ID: Quest_Relic_AncientDrill
 Chapter: 1
 QuestType: Relic
 UnlockDialogueLines:
     - Text: QUEST_RELIC_AncientDrill_Unlock_1
       Character: Trainer
     - Text: QUEST_RELIC_AncientDrill_Unlock_2
       Character: Trainer
       CameraLocation: [704, 1385]    
     - Text: QUEST_RELIC_AncientDrill_Unlock_3
       Character: Trainer
       CameraLocation: [704, 1385]    
     - Text: QUEST_RELIC_AncientDrill_Unlock_4
       Character: Merchant
       CameraLocation: [704, 1385] 
 CompleteDialogueLines:
     - Text: QUEST_RELIC_AncientDrill_Complete_1
       Character: Merchant
 LoadoutImageId: CA_DF_03
 UnlockRevealFoWSphere:
     - MapLocation: [704, 1385]
       Radius: 14
 UnlockCondition:
     - CompletedAchievement: Achievement_1_2_PierceShield
 StartingVillage: SouthShield
 EndingVillage: SouthShield
 Scenario:
     MapLocation: [704, 1385]
     ScenarioPool: [Scenario_Relic_AncientDrill, 100]
Download

Message

This section details the parser properties of the Message YML parser.

Property Name Data Type Description
Name Unique String

Unique Identifier for the Message.

DialogueLines Sequence of Mappings

Determines the contents of the message, as well as the speaker and camera location.

For further information, see MapDialogueLines.

MapMessageTrigger String

Determines when the Message is shown.

The following values are valid:

  • HQ
  • Shop
  • Trainer
  • Enhancer
  • Temple
  • Map
  • QuestStart
  • QuestUnlockedOrCompleted
  • AchievementClaimed
  • Loadout
  • GloomhavenIntro
  • IntroTravel
  • OutroTravel
  • IntroGloomhaven
  • OutroGloomhaven
  • WealthLevelUnlockedItems
  • Retirement
  • TownRecords
UnlockCondition Mapping

Determines when the message is unlocked.

For further information, see UnlockConditions.

Examples

Guildmaster's Bandit Commander Message

Parser: Message
Name: Start_Quest_Boss_BanditCommander
DialogueLines:
    - Text: Message_Start_Quest_Boss_BanditCommander_1
      Character: Narrator
    - Text: Message_Start_Quest_Boss_BanditCommander_2
      Character: Enchantress
    - Text: Message_Start_Quest_Boss_BanditCommander_3
      Character: Merchant
    - Text: Message_Start_Quest_Boss_BanditCommander_4
      Character: Enchantress
    - Text: Message_Start_Quest_Boss_BanditCommander_5
      Character: Merchant
MapMessageTrigger: Map
UnlockCondition:
    - CompletedQuest: Quest_Story_Cragheart_3
    - CompletedQuest: Quest_Story_Mindthief_3    
Download

Headquarters

This section details the parser properties available for the Headquarters YML parser. The Headquarters is the main hub of the game in both Guildmaster and Campaign modes (Demonsgate and Gloomhaven respectively). In practise this parser has many similarities to the Village parser, with some extra data such as ItemMaxStock, Difficulty level related data and tables for XP and Gold gained from scenarios.

Property Name Data Type Description
GameMode String The GameMode value is used to find the Difficulty settings in the Difficulties YML to use with this Headquarters. Eg, if this is set to Guildmaster it will look for the Guildmaster difficulty settings.
ID Unique String The Unique Identifier for Headquarters.
LocalisedName String The localisation key for finding the name of this Headquarters Location and displaying it across various UI.
LocalisedDescription String The localisation key for finding the description text of this Headquarters Location and displaying it across various UI.
Mesh String The ID of the decal to display on the map screen for this location.
MapLocation List Unsigned Integer - 2 Entries

Two unsigned integers that represent the X and Y coordinates for positioning the Headquarters on the map screen.

JobLocations Sequence of Unsigned Integer - 2 Entries

Multiple entries of two unsigned integers that represent the X and Y coordinates for possible positions of Job Quest Locations attache to this Headquarters on the map screen.

StreetLocations [String, int, int]

A string referencing a localisation key for the street name, followed by X and Y co-ordinates for the city map.

Street Locations are shown as labels on the City Map in Campaign mode.

UnlockCondition Mapping

UnlockCondition uses the Shared YML Property UnlockConditions.

This is the condition for unlocking the quest.

StartingScenarios Sequence of Mappings

StartingScenarios uses the Shared YML Property MapScenario.

A sequence of ID references to the Scenario YML and it's location on the map.

StartupTreasureTables String List

A list of string IDs that reference Treasure Tables by ID. These are awarded to the party upon completing the tutorial or when starting the save file if there is no tutorial defined.

Quests String List

A list of string IDs that reference Quests by ID.

These are the quests that are started from this location. In the case of job quests this is the job quests that are possible to appear at this location.

TutorialQuestNames String List

A list of string IDs that reference Quests by ID.

These are the Quests that are considered to be part of the on map tutorial. This list is used to check whether a player has completed the tutorial.

TutorialMessages String List

A list of string IDs that reference Messages by ID.

These messages are shown after skipping the tutorial.

RoadEventChance Unsigned Integer List - 8 Entries

A list of 8 Unsigned Integers which determines the chance of encountering a Road Event when on this quest for each scenario level (0-7).

This is the global event chance which Quests and Scenarios will use if their event pool entry is null.

RoadEventPool List String

A list of String IDs which reference the Unique IDs of Road Event YMLs.

This is the global pool which Quests and Scenarios will use if their event pool entry is null.

ScenarioLevelTable Mapping

ScenarioLevelTable uses the Shared YML Property ScenarioLevelTable.

This contains the Gold, TrapDamage, HazardDamage and BonusXP in Scenarios at each scenario level from 0-7.

ItemMaxStock Mapping

ItemMaxStock uses the Shared YML Property ItemMaxStock.

This contains the maximum stock the shop can have for each item rarity.

ChapterDifficulty Mapping

ChapterDifficulty uses the Shared YML Property ChapterDifficulty.

Contains threat modifiers for Chapters and Sub Chapters on each Difficulty level. For example this can be used to reduce the threat level of scenarios in Chapter 1.1 when on Easy mode.

CharacterXPTable List of Unsigned Integer - 9 Entries The amount of XP required to reach each level from 1-9
ProsperityTable List of Unsigned Integer - 8 Entries The amount of Wealth required to reach each Prosperity level from 2-9
ReputationTable List of Signed Integer - 11 Entries Defines the shop price modifier at Reputation Levels ranging from +5 to -5
Examples

Headquarters Guildmaster

Parser: Headquarters
GameMode: Guildmaster
ID: Demonsgate
LocalisedName: $Demonsgate$
LocalisedDescription: $ADVENTURE_LOCATION_Demonsgate_Desc$
Mesh: T1_Demonsgate_MAT
MapLocation: [1166,582]
JobLocations: 
    - [1100, 625]
    - [1187, 663]
    - [1310, 580]
StartingScenarios:
    - MapLocation: [200, 200]
      ScenarioPool: [Tutorial_2, 100]
    - MapLocation: [200, 200]
      ScenarioPool: [2A, 100]
    - MapLocation: [200, 200]
      ScenarioPool: [2B, 100]
    - MapLocation: [200, 200]
      ScenarioPool: [2C, 100]
    - MapLocation: [200, 200]
      ScenarioPool: [2D, 100]
# StartingPartyYML: Not needed for this HQ as party is in the tutorial level
StartupTreasureTables: StartingTreasureTable
ItemMaxStock:
    Common: 6
    Rare: 2
    Relic: 1
Quests: 
#FTUE
    - Quest_Story_3A
    - Quest_Story_3B
    - Quest_Travel_GibbetHill
    - Quest_Story_5B
    - Quest_Story_5C
    - Quest_Travel_TheMarches

#TRAVEL
    - Quest_Travel_Bloodford
    - Quest_Travel_WayfarersRest
    - Quest_Travel_Fordingbridge
#STORY
    - Quest_Story_Mindthief_1
    - Quest_Story_Mindthief_3
    - Quest_Story_Tinkerer_3
    - Quest_Story_Quartermaster_2
    - Quest_Story_Jekserah
    - Quest_Story_Doomstalker_2
    - Quest_Story_CaptainOfTheGuard
    
#JOBS-FOREST    
    - Quest_Job_Chapter_1_1_Bandit_Forest
    - Quest_Job_Imps_Spirits_Forest
    - Quest_Job_Inox_Vermling_Forest
    - Quest_Job_MindControl
    - Quest_Job_TheHaunting
    - Quest_Job_TheStoneMan    
#JOBS-CRYPT
    - Quest_Job_Chapter_1_1_Undead_Crypt
    - Quest_Job_Chapter_1_1_Undead_Bandit_Crypt 
    - Quest_Job_Snakes_Undead_Crypt    
    - Quest_Job_Mysterious_Maze  
    - Quest_Job_AnEyeForAnEye
    - Quest_Job_TheVaultsOfPus  
#JOBS-FOREST    
    - Quest_Job_FellHounds
#JOBS-CRYPT
    - Quest_Job_DungeonOfMisfortune

TutorialQuestNames:
    - Quest_Story_3A 
    - Quest_Story_3B
    - Quest_Travel_GibbetHill #4A
    - Quest_Story_5A
    - Quest_Story_5B 
    - Quest_Story_5C 
    - Quest_Travel_TheMarches #6A
    - Quest_Story_7A
    - Quest_Story_7B
    - Quest_Relic_ResonantCrystal #7C 

TutorialMessages:
    - End_Quest_Story_2D

ChapterDifficulty:
    Chapter: 1
    SubChapterDifficulties:
        # SubChapter: [Easy, Normal, Hard, Insane]
        1: [0.667, 0.8, 1, 1] 
        2: [0.75, 0.85, 1, 1] 
        3: [0.833, 0.9, 1, 1] 
        4: [0.917, 0.95, 1, 1] 
        5: [1, 1, 1, 1] 

# Global Event Pool.  This is used when no event pool is defined at the Quest or Scenario level
RoadEventPool:
 - [AbandonedCartID, 100]
 - [ADaggerInTheChestID, 100]
 - [ADiscardedFlaskID, 100]
 - [AmbushAftermathID, 100]
 - [AShortcutID, 100]
 - [BrokenCartID, 100]
# - [Bucket of Luck, 100]
 - [DuelID, 100]
 - [RopeBridgeID, 100]
 - [ShadowsOnTheWallID, 100]
 - [StrungUpID, 100]
 - [TheFunGuyID, 100]
 - [TheLongDeadID, 100]
 - [TheOldWellID, 100]
 - [TheShrineID, 100]
# - [The Storm, 100]
 - [TheWomanOftheWoodsID, 100]
 - [TollRoadID, 100]
 #New Events
 - [ADownedTravelerID, 100]
 - [AFatefulEncounterID, 100]
 - [BloodyValrathID, 100]
 
 # ScenarioLevel:   [ 0,  1,  2,  3,  4,  5,  6,  7]
RoadEventChance:    [50, 50, 50, 50, 50, 50, 50, 50]

# Define how much XP is required to level up characters
  # PlayerLevel:    [  1,   2,   3,   4,   5,   6,   7,   8,   9 ]
CharacterXPTable:   [  0,  45,  95, 150, 210, 275, 345, 420, 500 ]  

# Define values based on Scenario Level
ScenarioLevelTable:
  # ScenarioLevel:          [ 0,  1,  2,  3,  4,  5,  6,  7]
    GoldConversion:         [ 2,  2,  3,  3,  4,  4,  5,  6]
    TrapDamage:             [ 2,  3,  4,  5,  6,  7,  8,  9]
    BonusXP:                [ 3,  4,  5,  6,  7,  8,  9, 10]
    HazardousTerrainDamage: [ 1,  1,  2,  2,  3,  3,  4,  4]
						
Download
Headquarters Campaign

Parser: Headquarters
GameMode: Campaign
ID: Gloomhaven
LocalisedName: $Gloomhaven$
LocalisedDescription: $ADVENTURE_LOCATION_Gloomhaven_Desc$
Mesh: T1_Demonsgate_MAT
MapLocation: [1271,1015]
JobLocations: 
    - [1100, 625]
StartupTreasureTables: StartingTreasureTable
ItemMaxStock:
    Common: 6
    Rare: 2
    Relic: 1

Quests: 
#FTUE
    - Quest_Campaign_001
    - Quest_Campaign_002
    - Quest_Campaign_003
    - Quest_Campaign_004
    - Quest_Campaign_005
    - Quest_Campaign_006
    - Quest_Campaign_007
    - Quest_Campaign_008
    - Quest_Campaign_009
    - Quest_Campaign_010
    - Quest_Campaign_011
    - Quest_Campaign_012
    - Quest_Campaign_013
    - Quest_Campaign_014
    - Quest_Campaign_015
    - Quest_Campaign_016
    - Quest_Campaign_017
    - Quest_Campaign_018
    - Quest_Campaign_019
    - Quest_Campaign_020
    - Quest_Campaign_021
    - Quest_Campaign_022
    - Quest_Campaign_023
    - Quest_Campaign_024
    - Quest_Campaign_025
    - Quest_Campaign_026
    - Quest_Campaign_027
    - Quest_Campaign_028
    - Quest_Campaign_029
    - Quest_Campaign_030
    - Quest_Campaign_031
    - Quest_Campaign_032
    - Quest_Campaign_033
    - Quest_Campaign_034
    - Quest_Campaign_035
    - Quest_Campaign_036
    - Quest_Campaign_037
    - Quest_Campaign_038
    - Quest_Campaign_039
    - Quest_Campaign_040
    - Quest_Campaign_041
    - Quest_Campaign_042
    - Quest_Campaign_043
    - Quest_Campaign_044
    - Quest_Campaign_045
    - Quest_Campaign_046
    - Quest_Campaign_047
    - Quest_Campaign_048
    - Quest_Campaign_049
    - Quest_Campaign_050
    - Quest_Campaign_051
    - Quest_Campaign_052
    - Quest_Campaign_053
    - Quest_Campaign_054
    - Quest_Campaign_055
    - Quest_Campaign_056
    - Quest_Campaign_057
    - Quest_Campaign_058
    - Quest_Campaign_059
    - Quest_Campaign_060
    - Quest_Campaign_061
    - Quest_Campaign_062
    - Quest_Campaign_063
    - Quest_Campaign_064
    - Quest_Campaign_065
    - Quest_Campaign_066
    - Quest_Campaign_067
    - Quest_Campaign_068
    - Quest_Campaign_069
    - Quest_Campaign_070
    - Quest_Campaign_071
    - Quest_Campaign_072
    - Quest_Campaign_073
    - Quest_Campaign_074
    - Quest_Campaign_075
    - Quest_Campaign_076
    - Quest_Campaign_077
    - Quest_Campaign_078
    - Quest_Campaign_079
    - Quest_Campaign_080
    - Quest_Campaign_081
    - Quest_Campaign_082
    - Quest_Campaign_083
    - Quest_Campaign_084
    - Quest_Campaign_085
    - Quest_Campaign_086
    - Quest_Campaign_087
    - Quest_Campaign_088
    - Quest_Campaign_089
    - Quest_Campaign_090
    - Quest_Campaign_091
    - Quest_Campaign_092
    - Quest_Campaign_093
    - Quest_Campaign_094
    - Quest_Campaign_095
    
StreetLocations: 
  - [Gloomhaven_Street_Old_Docks, 1271, 1015]
  - [Gloomhaven_Street_The_Sinking_Market, 1271, 1015]
  - [Gloomhaven_Street_West_Barracks, 1271, 1015]
  - [Gloomhaven_Street_Boilers_District, 1271, 1015]
  - [Gloomhaven_Street_Horn_District, 1271, 1015]
  - [Gloomhaven_Street_Ward_of_Scales, 1271, 1015]
  - [Gloomhaven_Street_Mixed_District, 1271, 1015]
  - [Gloomhaven_Street_Northern_Barracks, 1271, 1015]
  - [Gloomhaven_Street_The_Void, 1271, 1015]
  - [Gloomhaven_Street_University, 1271, 1015]
  - [Gloomhaven_Street_Travellers_District, 1271, 1015]
  - [Gloomhaven_Street_Gloomhaven_Square, 1271, 1015]
  - [Gloomhaven_Street_New_Market, 1271, 1015]
  - [Gloomhaven_Street_Coin_District, 1271, 1015]
  - [Gloomhaven_Street_East_Barracks, 1271, 1015]
  - [Gloomhaven_Street_New_Docks, 1271, 1015]

# Global Event Pool.  This is used when no event pool is defined at the Quest or Scenario level
RoadEventPool:
 - [AbandonedCartID, 100]
 
 # ScenarioLevel:   [ 0,   1,   2,   3,   4,   5,   6,   7]
RoadEventChance:    [100, 100, 100, 100, 100, 100, 100, 100]

# Define how much XP is required to level up characters
  # PlayerLevel:    [  1,   2,   3,   4,   5,   6,   7,   8,   9 ]
CharacterXPTable:   [  0,  45,  95, 150, 210, 275, 345, 420, 500 ]

# Define values based on Scenario Level
ScenarioLevelTable:
  # ScenarioLevel:          [ 0,  1,  2,  3,  4,  5,  6,  7]
    GoldConversion:         [ 2,  2,  3,  3,  4,  4,  5,  6]
    TrapDamage:             [ 2,  3,  4,  5,  6,  7,  8,  9]
    BonusXP:                [ 4,  6,  8, 10, 12, 14, 16, 18]
    HazardousTerrainDamage: [ 1,  1,  2,  2,  3,  3,  4,  4]
    
# Total Prosperity required for each level
# Gloomhaven:    [ 2,  3,   4,   5,   6,   7,   8,   9 ]
ProsperityTable: [ 4,  9,  15,  22,  30,  39,  50,  64]

# Reputation Shop Price Modifier
# Gloomhaven:     [ +5,  +4,  +3,  +2,  +1,  0, -1, -2, -3, -4, -5 ]
ReputationTable:  [-20, -18, -14, -10,  -6, -2,  3,  7, 11, 15, 19 ]
						
Download

CityEvent

This section details the parser properties of the CityEvent YML parser.

Property Name Data Type Description
ID String

Unique Identifier for the CityEvent.

LocKey String

CityEvent's name. References a key in the localisation sheet.

Screens Mapping

Screens are separate GUI elements in which the CityEvent's text is displayed and players are able to make decisions.

For further information, see Screens.


Screens
Property Name Data Type Description
Gained Mapping

The screen activates only if the party has gained something from the previous screen's treasure table.

It is determined within Event Treasure Conditions.

Lost Mapping

The screen activates only if the party has lost something from the previous screen's treasure table.

It is determined within Event Treasure Conditions.

InParty Mapping

The screen activates only if the party has one of the characters specified with ClassIDs in it.

It is determined within Event Treasure Conditions.

Reputation Mapping

The screen activates only if the party's reputation satisfies the condition.

It is determined within Event Treasure Conditions.

MinGold Mapping

The screen activates only if the party's gold satisfies the condition.

It is determined within Event Treasure Conditions.

HaveItem Mapping

The screen activates only if the party has the specified item.

It is determined within Event Treasure Conditions.

Text String

The text that appears when the screen is shown.

References a key in the localisation sheet.

Options Mapping

Gives the player options for the next screen.

For further information, see Options.

Next String

References a screen that should show after the current one.

End String

Determines what happens after the screen.

The following values are valid:

  • Reuse
  • Discard
  • True
TreasureTable
TreasureTables
List of Strings

Determines what the party gains or loses on the screen.

References TreasureTables' IDs.

The following format is valid:

[TT_1,TT_2]


Event Treasure Conditions
Property Name Data Type Description
Item
Items
List of Strings

Allows specifying items for Gained/Lost/HaveItem screens.

References ItemCards' StringIDs.

The following format is valid:

[ITEM_1,ITEM_2]

XP Integer

Allows specifying the amount of XP for Gained/Lost screens.

Gold Integer

Allows specifying the amount of gold for Gained/Lost screens.

Damage Integer

Allows specifying the amount of damage for Gained screens.

Condition
Conditions
List of Strings

Allows specifying Conditions for the screen to appear.

The following format is valid:

[CONDITION_1,CONDITION_2]

EnemyCondition
EnemyConditions
List of Strings

Allows specifying EnemyConditions for the screen to appear.

The following format is valid:

[CONDITION_1,CONDITION_2]

Infuse
Infusion
Infusions
List of Strings

Allows specifying elemental infusions for Gained screens.

The following format is valid:

[ELEMENT_1,ELEMENT_2]

Screen Mapping

Allows nesting a screen inside another screen.

Amount String or Integer

Allows specifying the amount of gold for MinGold and reputation for Reputation screens.

The following formats are valid for Reputation:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"

The following values are valid for MinGold:

  • Amount: INTEGER
  • Amount: Each

Options
Property Name Data Type Description
Text String

The text that appears when the screen is shown.

References a key in the localisation sheet.

Subtext String

The subtext that appears when the screen is shown.

References a key in the localisation sheet.

Next String

References a screen that should show after the current one.

TreasureTable
TreasureTables
List of Strings

Determines what the party gains or loses on the screen.

References TreasureTables' IDs.

The following format is valid:

[TT_1,TT_2]

OptionConditions Mapping

The option may not be available in certain circumstances. In that case, conditions are in need.

The mapping has the following properties:

  • InParty - String, references CharacterID
  • NotInParty - String, references CharacterID
  • MinGold - Integer
  • MaxGold - Integer
  • HaveItem - String, references ItemCard's StringID
  • HaveItemSlotEquipped - String, equipment slot
UnavailableText String

The text that appears when the option is not available.

References a key in the localisation sheet.

Examples

Campaign's City Event 1

Parser: CityEvent
ID: Event_City_Campaign_1ID
# LocKey: $CITY_EVENT_1$
LocKey: $CITY_EVENT$
Screens:
    Decision:
        Text: "EVENT_CITY_CAMPAIGN_1_INTRO"
        Options:
            A:
                Text: "EVENT_CITY_CAMPAIGN_1_OPTION_A"
                Next: EVENT_CITY_CAMPAIGN_1_OPTION_A
            B:
                Text: "EVENT_CITY_CAMPAIGN_1_OPTION_B"
                TreasureTables: TT_EVENT_CITY_CAMPAIGN_1_OPTION_B
                Next: EVENT_CITY_CAMPAIGN_1_OPTION_B
    EVENT_CITY_CAMPAIGN_1_OPTION_A:
        Text: "EVENT_CITY_CAMPAIGN_1_RESULT_A"
         Options:
            A:
                Text: "EVENT_CITY_CAMPAIGN_1_OPTION_A_A"
                TreasureTables: TT_EVENT_CITY_CAMPAIGN_1_OPTION_A_A
                Next: EVENT_CITY_CAMPAIGN_1_OPTION_C
            B:
                Text: "EVENT_CITY_CAMPAIGN_1_OPTION_A_B"
                TreasureTables: TT_EVENT_CITY_CAMPAIGN_1_OPTION_A_B
                Next: EVENT_CITY_CAMPAIGN_1_OPTION_D
    EVENT_CITY_CAMPAIGN_1_OPTION_B:
        Text: "EVENT_CITY_CAMPAIGN_1_RESULT_B"
        End: Reuse
    EVENT_CITY_CAMPAIGN_1_OPTION_C:
        Text: "EVENT_CITY_CAMPAIGN_1_RESULT_C"
        End: Reuse
    EVENT_CITY_CAMPAIGN_1_OPTION_D:
        Text: "EVENT_CITY_CAMPAIGN_1_RESULT_D"
        End: Reuse

Download

InitialEvents

This section details the parser properties available for the InitialEvents YML parser. InitialEvents represent all Road and City Events that are available from the start of the game.

Property Name Data Type Description
RoadEvents List of Strings

Determines what RoadEvents are available from the start of the game.

References RoadEvents' IDs.

The following format is valid:

RoadEvents:
    - ROAD_EVENT_ID_1
    - ROAD_EVENT_ID_2
    - ROAD_EVENT_ID_3
CityEvents List of Strings

Determines what CityEvents are available from the start of the game.

References CityEvents' IDs.

The following format is valid:

CityEvents:
    - CITY_EVENT_ID_1
    - CITY_EVENT_ID_2
    - CITY_EVENT_ID_3
Examples

Campaign's Initial Events

Parser: InitialEvents
RoadEvents:
    - Event_Road_Campaign_1ID
    - Event_Road_Campaign_2ID
    - Event_Road_Campaign_3ID
    - Event_Road_Campaign_4ID
    - Event_Road_Campaign_5ID
    - Event_Road_Campaign_6ID
    - Event_Road_Campaign_7ID
    - Event_Road_Campaign_8ID
    - Event_Road_Campaign_9ID
    - Event_Road_Campaign_10ID
    - Event_Road_Campaign_11ID
    - Event_Road_Campaign_12ID
    - Event_Road_Campaign_13ID
    - Event_Road_Campaign_14ID
    - Event_Road_Campaign_15ID
    - Event_Road_Campaign_16ID
    - Event_Road_Campaign_17ID
    - Event_Road_Campaign_18ID
    - Event_Road_Campaign_19ID
    - Event_Road_Campaign_20ID
    - Event_Road_Campaign_21ID
    - Event_Road_Campaign_22ID
    - Event_Road_Campaign_23ID
    - Event_Road_Campaign_24ID
    - Event_Road_Campaign_25ID
    - Event_Road_Campaign_26ID
    - Event_Road_Campaign_27ID
    - Event_Road_Campaign_28ID
    - Event_Road_Campaign_29ID
    - Event_Road_Campaign_30ID
CityEvents:
    - Event_City_Campaign_1ID
    - Event_City_Campaign_2ID
    - Event_City_Campaign_3ID
    - Event_City_Campaign_4ID
    - Event_City_Campaign_5ID
    - Event_City_Campaign_6ID
    - Event_City_Campaign_7ID
    - Event_City_Campaign_8ID
    - Event_City_Campaign_9ID
    - Event_City_Campaign_10ID
    - Event_City_Campaign_11ID
    - Event_City_Campaign_12ID
    - Event_City_Campaign_13ID
    - Event_City_Campaign_14ID
    - Event_City_Campaign_15ID
    - Event_City_Campaign_16ID
    - Event_City_Campaign_17ID
    - Event_City_Campaign_18ID
    - Event_City_Campaign_19ID
    - Event_City_Campaign_20ID
    - Event_City_Campaign_21ID
    - Event_City_Campaign_22ID
    - Event_City_Campaign_23ID
    - Event_City_Campaign_24ID
    - Event_City_Campaign_25ID
    - Event_City_Campaign_26ID
    - Event_City_Campaign_27ID
    - Event_City_Campaign_28ID
    - Event_City_Campaign_29ID
    - Event_City_Campaign_30ID
    - Event_City_Campaign_82ID
						
Download

BattleGoal

This section details the parser properties available for the BattleGoal YML parser.

Property Name Data Type Description
ID Unique String

Unique Identifier for the Battle Goal.

LocalisedName String

Name of the Battle Goal to be displayed in the User Interface.

References a key in the localization sheet.

LocalisedDescription String

Description of the Battle Goal to be displayed in the User Interface.

References a key in the localization sheet.

PerkPoints Integer

Determines the number of perk points awarded for completing the Battle Goal.

BattleGoalCondition Mapping

Determines what must be done to complete the Battle Goal.

For further information, see UnlockConditions.

BattleGoalFailCondition Mapping

Determines what must be done to fail the Battle Goal.

For further information, see UnlockConditions.

TreasureTables List of Strings

Determines what are the rewards for completing the Battle Goal.

References TreasureTables' IDs.

The following format is valid:

[TT_ID_1,TT_ID_2]

CheckAtEndOfScenario Boolean

If True, the conditions are checked once the scenario is completed.

The following values are valid:

  • True
  • False
CampaignOnly Boolean

If True, the Battle Goal is only available in the Campaign.

The following values are valid:

  • True
  • False
Examples

Agressor BattleGoal

Parser: BattleGoal
ID: BattleGoal_Agressor
LocalisedName: BATTLEGOAL_Agressor
LocalisedDescription: BATTLEGOAL_Agressor_Desc
#Have one or more monsters present on the map at the beginning of every round
#during the scenario - 2
PerkPoints: 2
CheckAtEndOfScenario: True
BattleGoalCondition:
    - Targets:
        Filter: RoundMonster
        Targets: 1
        Value: 1
        ScenarioResult: Win
        SubFilter: Scenario
BattleGoalFailCondition:
    - Targets:
        Filter: RoundMonster
        Targets: 0
        Value: 1
        SubFilter: Scenario
TreasureTables: [TT_Battle_Goals_2]
						
Download

PersonalQuest

This section details the parser properties available for the PersonalQuest YML parser.

Property Name Data Type Description
ID Unique String

Unique Identifier for the Personal Quest.

LocalisedName String

Name of the Personal Quest to be displayed in the User Interface.

References a key in the localization sheet.

LocalisedDescription String

Description of the Personal Quest to be displayed in the User Interface.

References a key in the localization sheet.

LocalisedObjectiveDescription String

Objective Description of the Personal Quest to be displayed in the User Interface.

References a key in the localization sheet.

PersonalQuestCondition Mapping

Determines what must be done to complete the Personal Quest.

For further information, see UnlockConditions.

QuestSteps Sequence of Mappings

Allows creating a multi-step personal quest. It is a mapping of Personal Quests that must be completed in the set sequence.

The following format is valid:

QuestSteps:
    - QuestStep1:
        PERSONAL_QUEST_DATA
    - QuestStep2:
        PERSONAL_QUEST_DATA
TreasureTables List of Strings

Determines what are the rewards for completing the Personal Quest.

References TreasureTables' IDs.

The following format is valid:

[TT_ID_1,TT_ID_2]

Examples

Battle Legend Personal Quest

Parser: PersonalQuest
ID: PERSONALQUEST_Battle_Legend
LocalisedName: PERSONALQUEST_Battle_Legend
LocalisedDescription: PERSONALQUEST_Battle_Legend_Desc
LocalisedObjectiveDescription: PERSONALQUEST_Battle_Legend_Objective_Desc
PersonalQuestCondition:
#Earn fifteen PerkChecks from completed battle goals.
    - Targets:
        Filter: BattleGoalPerkPoints
        Value: 15
TreasureTables: [TT_PERSONALQUEST_Battle_Legend]
						
Download

StoreLocation

This section details the parser properties available for the StoreLocation YML parser.

Property Name Data Type Description
ID Unique String

Unique Identifier for the Store Location.

LocalisedName String

Name of the Store to be displayed in the User Interface.

References a key in the localization sheet.

LocalisedDescription String

Description of the Store to be displayed in the User Interface.

References a key in the localization sheet.

Mesh String

Represents the icon that is displayed on the map.

MapLocation List of 2 Integers

Determines where the store lies on the map of HeadQuarters.

For further information, see MapLocations.

UnlockCondition Mapping

Determines what needs to be done to unlock the store.

For further information, see UnlockConditions.

StoreType String

Determines the purpose of the store.

The following values are valid:

  • Merchant
  • Enhancer
  • Trainer
  • Temple
Examples

Campaign's Temple Location

Parser: StoreLocation
ID: Temple
LocalisedName: $Temple$
LocalisedDescription: $Temple_Desc$
Mesh: Gloomhaven_Shop_Icon_003
MapLocation: [1957,675]
UnlockCondition:
    - UnlockedVillage: Gloomhaven
StoreType: Temple
						
Download

RemoveYML

This section details the parser properties available for the RemoveYML YML parser. It serves the purpose of removing existing yml files from the modded game.

Property Name Data Type Description
FilesToRemove List of Strings

Determines what files will be removed when the ruleset is compiled. References file names that can be checked in ModdingExport folder.

The following format is valid:

[FileName_1.yml,FileName_2.yml

Remember

All references to removed files must be removed as well.

Examples

Remove Skewer Ability Card

Parser: RemoveYML
FilesToRemove: [011_Brute_Skewer.yml]
						
Download

Shared YML Properties

This section contains commonly used YML Properties used across multiple YML Parsers.

UnlockConditions

This section details the parser properties available for the shared UnlockCondition parser.

Property Name Data Type Description
Chapter List of 2 Integers

Chapter required for the Unlock Condition.

The following format is valid:

Chapter: [CHAPTER_NUMBER,SUBCHAPTER_NUMBER]

Prosperity Integer

Prosperity required for the Unlock Condition.

Reputation Integer

Reputation required for the Unlock Conditon.

Gold Integer

Gold required for the Unlock Condition.

CompletedAchievement String

References ID of an achievement that needs to be completed for the Unlock Condition.

UnlockedAchievement String

References ID of an achievement that needs to be unlocked for the Unlock Condition.

UnlockedVillage String

References ID of a village that needs to be unlocked for the Unlock Condition.

CompletedQuest String

References ID of a quest that needs to be completed for the Unlock Condition.

UnlockedQuest String

References ID of a quest that needs to be unlocked for the Unlock Condition.

Retirement Integer

Represents a number of characters that need to be retired for the Unlock Condition.

UnlockClass Integer

Represents a number of characters that need to be unlocked for the Unlock Condition.

RequiredHeroes Mapping

It is a mapping of heroes with corresponding levels. References CharacterID.

The following format is valid:

CHARACTER_ID: LEVEL

Required Mapping

It is a mapping of Unlock Condition Types with numbers. It represents a number of conditions of the corresponding type that have to be completed for the Unlock Condition.

For example: CompletedQuest: 2 requires completing 2 quests out of a larger list.

The following format is valid:

UNLOCK_CONDITION_TYPE_1: NUMBER_1

Unlock Condition Types:

  • UnlockedVillage
  • UnlockedQuests
  • CompletedQuests
  • UnlockedAchievement
  • MessageSeen
  • NotCompletedQuest
  • Retirement
  • UnlockClass
Targets Mapping See UnlockConditionTargets.
TargetsRequired Integer

Represents a number of targets that have to be completed from a larger list of targets.

UnlockCombined Mapping

It is to be used when there are multiple conditions that use Required property. It is required to complete each one of them.

The following format is valid:

- UnlockCombined:
    NAME_1:
        Required: 
            UNLOCK_CONDITION_TYPE_1: NUMBER_1
        CONDITION_OF_TYPE
        CONDITION_OF_TYPE
        CONDITION_OF_TYPE
    NAME_2:
        Required: 
            UNLOCK_CONDITION_TYPE_2: NUMBER_2
        CONDITION_OF_TYPE
        CONDITION_OF_TYPE
        CONDITION_OF_TYPE
UnlockChoice Mapping

It is to be used when there are multiple conditions that use Required property. It is required to complete one of them.

The following format is valid:

- UnlockChoice:
    NAME_1:
        Required: 
            UNLOCK_CONDITION_TYPE_1: NUMBER_1
        CONDITION_OF_TYPE
        CONDITION_OF_TYPE
        CONDITION_OF_TYPE
    NAME_2:
        Required: 
            UNLOCK_CONDITION_TYPE_2: NUMBER_2
        CONDITION_OF_TYPE
        CONDITION_OF_TYPE
        CONDITION_OF_TYPE
UnlockConditionTargets

Property Name Data Type Description
Filter String

Filters what needs to be achieved for the target. Some filters require additional information to provide.

The list of filters include:

  • Kill
  • Die
  • ReceiveDamage
  • DealDamage
  • UseAbility
  • UseAbilityStrength
  • Consume
  • Infuse
  • ModifierUsed
  • PierceDamage
  • ShieldDamage
  • SpendGold
  • ItemShielded
  • UseItem
  • Loot
  • OwnItem
  • Exhaust
  • Health
  • Enhancement
  • PersonalQuest
  • Gold
  • Donate
  • BattleGoalPerkPoints
  • FirstKill
  • OpenDoor
  • ActivateTrap
  • RoundMonster
  • XPGain
  • CardsRemaining
SubFilter String

Additional filter that specifies the time that the target needs to be completed in.

The list of subfilters include:

  • Round
  • Scenario
  • Total
CharacterID CharacterIDs SummonID
SummonIDs
Mapping

It is a mapping of actors or targets that have to perform a specified action or have it performed on them. References IDs of characters.

The following formats are valid:

#The referenced actor performs the action
CharacterID:
    ActorID: ID_1

#Action is performed on the referenced actor
CharacterID:
    TargetID: ID_1
ExcludeCharacterID ExcludeCharacterIDs ExcludeSummonID ExcludeSummonIDs Mapping

It is a mapping of actors or targets that are excluded from a specified action. References IDs of characters.

The following formats are valid:

#Each actor excluding the referenced actor performs the action
ExcludeCharacterID:
    ActorID: ID_1

#Action is performed on each actor, excluding the referenced actor
ExcludeCharacterID:
    TargetID: ID_1
KillInOneHit Boolean

Used for Kill filter.

Determines if the target/s have to die in one action

The following values are valid:

  • True
  • False
Overkill Integer

Used for Kill filter.

Determines the amount of excess damage that has to be dealt to a target.

Value Integer

Determines the number of times the targets have to be completed.

AreaEffect Boolean

Used for UseAbility filter.

Determines if the ability must be an area of effect.

The following values are valid:

  • True
  • False
Condition Conditions Mapping

It is a mapping of Target or Actor to a list of conditions.

It filters actors that can be used to complete the target by conditions that are applied to them.

The following formats are valid:

#The target has to have those conditions
Conditions:
    Target: [CONDITION_1,CONDITION_2]

#The performing actor has to have those conditions
Conditions:
	Actor: [CONDITION_1,CONDITION_2]
											
ScenarioResult String

The target must be completed while either winning or losing the scenario.

The following values are valid:

  • Win
  • Lose
Conditional Mapping

An optional property that can be used for further specification of the target.

There are three possible mappings:

  • Type
  • Amount
  • HPPercentOfMax

Type specifies when the conditional is checked. The following values are valid:

  • EndScenario
  • EndRound
  • ScenarioMinimum

The Amount can be used to express how much damage should be dealt or how far should the character move. The following formats are valid:

  • "> 1"
  • "< 2"
  • ">= 3"
  • "<= 4"
  • "== 5"
  • "!= 6"

HPPercentOfMax is similar to Amount but regards only hit points. The following formats are valid:

  • "> 10%"
  • "< 20%"
  • ">= 30%"
  • "<= 40%"
  • "== 50%"
  • "!= 60%"
Who List of Strings

Specifies if the target only applies to certain types of actors.

The following values are valid:

  • Player
  • Enemy
  • HeroSummon
  • EnemySummon
  • Ally
  • Enemy2
  • Neutral
  • NotSelf
CharacterTypes Mapping

Specifies if the target only applies to certain types of actors. Distinguishes between actors performing the action and actors that are targetted.

There are two properties. Both of them are lists of strings:

  • Actor
  • Target

The following values are valid for Actor:

  • Player
  • Enemy
  • HeroSummon
  • EnemySummon
  • Ally
  • Enemy2
  • Neutral

The following values are valid for Target:

  • Player
  • Enemy
  • HeroSummon
  • EnemySummon
  • Ally
  • Enemy2
  • Neutral
  • Self
  • OnlySelf
  • NotSelf
CauseOfDeath String

Can be used to further specify how actors should die to fulfil the target.

The following values are valid:

  • StillAlive
  • Undetermined
  • Damage
  • NoMoreCards
  • KillAbility
  • SummonerDied
  • SummonActiveBonusCancelled
  • Trap
  • Suicide
  • HazardousTerrain
Items List of Strings

References StringIDs of items that should be used in the target.

The following format is valid:

[ITEM__STRING_ID_1,ITEM_STRING_ID_2]

LootType List of Strings

Specifies what should be looted to fulfil the target.

The following values are valid:

  • Chest
  • GoalChest
  • MoneyToken

The following format is valid:

[LOOT_TYPE_1,LOOT_TYPE_2]

Slot List of Strings

Can be used for filters related to items. Indicates a specific inventory slot.

The following values are valid:

  • Head
  • Body
  • Legs
  • OneHand
  • TwoHand
  • SmallItem

The following format is valid:

[SLOT_1,SLOT_2]

Modifiers List of Strings

Can be used for filters related to attack modifiers. It is a list of all valid modifiers for the target.

The following values are valid:

  • "*0"
  • "*2"
  • "x0"
  • "x2"
  • "-2"
  • "-1"
  • "+0"
  • "+1"
  • "+2"
  • "+3"
  • "+4"

The following format is valid:

[MODIFIER_1,MODIFIER_2]

EnemyClasses List of Strings

Can be used to choose specific enemies for the target. References IDs of enemies.

The following format is valid:

[ENEMY_ID_1,ENEMY_ID_2]

DamageSource List of Strings

Can be used to choose specific types of damage for the target.

The following values are valid:

  • Trap
  • EnemyAttack
  • EnemyDamage
  • Wound
  • Self
  • Ally
  • HazardousTerrain
  • ScenarioElements

The following format is valid:

[SOURCE_1,SOURCE_2]

AbilityTypes List of Strings

Can be used to choose specific types of abilities for the target.

For all possible ability types, see Abilities.

The following format is valid:

[TYPE_1,TYPE_2]

Infused List of Strings

The target is fulfilled only when specified elements are infused.

The following values are valid:

  • Fire
  • Ice
  • Air
  • Earth
  • Light
  • Dark
  • Any

The following format is valid:

[ELEMENT_1,ELEMENT_2]

Elements List of Strings

Can be used to choose specific elements for the target. Useful for Infuse and Consume filters.

The following values are valid:

  • Fire
  • Ice
  • Air
  • Earth
  • Light
  • Dark
  • Any

The following format is valid:

[ELEMENT_1,ELEMENT_2]

MapScenario

Map Scenario Definition

Property Name Data Type Description
EventChance Unsigned Integer List - 8 Entries

A list of 8 Unsigned Integers which determines the chance of encountering a Road Event when travelling to this scenario for each scenario level (0-7).

This entry can be left null and the event chance will be retrieved from the Quest YML instead.

EventPool List String

A list of String IDs which reference the Unique IDs of Road Event YMLs.

This entry can be left null and the event pool will be retrieved from the Quest YML instead.

MapLocation Mapping

MapLocation uses the Shared YML Property MapLocation.

This is the placement of the scenario on the map.

PathDistancePercentage Float (Range: 0.0f-1.0f) Used by scenarios on Travel type quests in Guildmaster. Defines the percentage along the pathway between villages that the scenario should be placed.
ScenarioPool List<Tuple<string, int>> A list of tuples made of a string and an int. The string refers to the unique ID of a Scenario YML or the name of a scenario built in the level editor. The integer is the chance of this scenario YML being picked from the scenario pool when generating this MapScenario.
Examples

								
MapLocation: [1086, 580]
ScenarioPool: 
 	- [3A, 100]
 								
 							

								
PathDistancePercentage: 0.85
ScenarioPool: [Scenario_Travel_Amberhill, 100]
 								
 							

MapLocations

MapLocations represent the locations of various elements on the map. MapLocations are always formed by a List of 2 Integers - the first one representing the X axis, and the second one representing the Y axis.

The following format is valid:

[LOCATION_X,LOCATION_Y]

MapDialogueLines

This section details the parser properties available for the shared MapDialogueLines parser.

Property Name Data Type Description
Text String

Represents the text that is displayed in the User Interface when the dialogue line is triggered.

Character String

Determines who says the text. It is the speaker.

CameraLocation List of 2 Integers

Determines the place at which camera points when the dialogue line is triggered.

For further information, see MapLocations.

NarrativeImageId String

Represents an image that is shown when the dialogue line is triggered.

For further information, see NarrativeImageIDs.

QuestCharacterRequirements

This section details the parser properties available for the shared QuestCharacterRequirements parser.

Property Name Data Type Description
Character String

Determines what character is required.

References Character's ID.

Level Integer

Determines the level that the character is required to have.

Values between 1-9 are valid.

Item String

Determines the item that the character is required to have.

References ItemCard's StringID.

PersonalQuest String

Determines the Personal Quest that the character is required to have.

References PersonalQuest's ID.

NarrativeImageIDs

  • CR_DF_01
  • CR_DF_01_Bandit
  • CR_DF_01_Demon
  • CR_DF_01_Undead
  • CR_DF_02
  • CR_DF_02_Bandit
  • CR_DF_02_Bandit_Undead
  • CR_DF_02_Undead
  • CR_DF_03
  • CR_DF_03_Bandit
  • CR_DF_03_Undead
  • CR_DF_04
  • CR_DF_04_Bandit_01
  • CR_DF_04_Bandit_02
  • CR_DF_04_Bandit_Demon
  • CR_DF_04_Bandit_Undead
  • CR_DF_05
  • CR_DF_05_Bandit
  • CR_DF_05_Demon
  • CR_DF_05_Undead
  • CR_NE_01
  • CR_NE_01_Bandit
  • CR_NE_01_Demon
  • CR_NE_01_Undead
  • CR_NE_02
  • CR_NE_02_Bandit
  • CR_NE_02_Demon
  • CR_NE_02_Undead
  • CR_NE_03
  • CR_NE_03_Bandit
  • CR_NE_03_Demon
  • CR_NE_03_Undead
  • CR_RU_01
  • CR_RU_01_Bandit
  • CR_RU_01_Demon
  • CR_RU_01_Undead
  • CR_RU_02
  • CR_RU_02_Bandit
  • CR_RU_02_Demon
  • CR_RU_02_Undead
  • CR_RU_03
  • CR_RU_03_Bandit
  • CR_RU_03_Demon
  • CR_RU_03_Undead
  • FO_DF_01
  • FO_DF_01_Bandit
  • FO_DF_01_Undead
  • FO_DF_01_Inox
  • FO_DF_01_Vermling
  • FO_DF_02
  • FO_DF_02_Bandit
  • FO_DF_02_Undead
  • FO_DF_02_Inox
  • FO_DF_02_Vermling
  • FO_DF_03
  • FO_DF_03_Bandit
  • FO_DF_03_Demon
  • FO_DF_03_Inox
  • FO_DF_03_Vermling
  • FO_DF_04
  • FO_DF_04_Bandit
  • FO_DF_04_Demon
  • FO_DF_04_Inox
  • FO_DF_04_Vermling
  • FO_CW_01
  • FO_CW_01_Demon_01
  • FO_CW_01_Demon_02
  • FO_CW_02
  • FO_CW_02_Demon_01
  • FO_CW_02_Demon_02
  • CA_DF_01
  • CA_DF_02
  • CA_DF_02_Demon
  • CA_DF_03
  • CA_DF_03_Bandit
  • CA_DF_03_Undead
  • CA_DF_04
  • CA_DF_04_Demon
  • CA_DF_04_Undead
  • CA_DF_05
  • CA_DF_05_Bandit
  • CA_DF_05_Demon
  • CA_DF_05_Undead
  • DU_DF_01
  • DU_DF_01_Bandit
  • DU_DF_01_Demon
  • DU_DF_01_Undead
  • DU_DF_02
  • DU_DF_02_Bandit
  • DU_DF_02_Demon
  • DU_DF_02_Undead
  • DU_DF_03
  • DU_DF_03_Bandit
  • DU_DF_03_Demon
  • DU_DF_03_Undead
  • ICE_Cave_01
  • ICE_Cave_01_Undead
  • ICE_CryptRuin_01
  • ICE_CryptRuin_01_Demon
  • LA_Cave_01
  • LA_Cave_02
  • LA_Cave_03
  • LA_Cave_04
  • LA_Cave_04_Bandit
  • LA_Cave_04_Demon
  • LA_Cave_04_Undead
  • LA_Cave_Bandit_01
  • LA_Cave_Undead_01
  • LA_Cave_Undead_02
  • LA_CryptRuin_01
  • LA_CryptRuin_02
  • FO_DF_Ice_Lava
  • CA_Mine_01
  • TO_IN_01
  • TO_IN_01_Bandit
  • TO_IN_01_Demon
  • TO_IN_01_Militia
  • TO_DF_01
  • TO_DF_01_Bandit
  • TO_DF_01_Demon
  • TO_DF_01_Militia
  • TO_ST_01
  • TO_ST_01_Bandit
  • TO_ST_01_Demon
  • TO_ST_01_Militia
  • TO_ST_02
  • TO_ST_01_Militia
  • TO_ST_03_Militia
  • SE_01
  • SE_02
  • SE_03
  • SE_04
  • SE_05
  • SE_06
  • SE_Rot_01
  • SE_Rot_02
  • SE_Rot_03
  • SE_Rot_04

ScenarioLevelTable

This section details the parser properties available for the shared ScenarioLevelTable parser.

Property Name Data Type Description
GoldConversion List of 8 Integers

Determines how much each gold pile is worth for each of the scenario levels.

The following format is valid:

[LVL_0_GOLD,LVL_1_GOLD,LVL_2_GOLD,LVL_3_GOLD,LVL_4_GOLD,LVL_5_GOLD,LVL_6_GOLD,LVL_7_GOLD]

TrapDamage List of 8 Integers

Determines the amount of damage dealt by traps for each of the scenario levels.

The following format is valid:

[LVL_0_DMG,LVL_1_DMG,LVL_2_DMG,LVL_3_DMG,LVL_4_DMG,LVL_5_DMG,LVL_6_DMG,LVL_7_DMG]

HazardousTerrainDamage List of 8 Integers

Determines the amount of damage dealt by hazardous terrain for each of scenario levels.

The following format is valid:

[LVL_0_DMG,LVL_1_DMG,LVL_2_DMG,LVL_3_DMG,LVL_4_DMG,LVL_5_DMG,LVL_6_DMG,LVL_7_DMG]

BonusXP List of 8 Integers

Determines how much bonus XP is awarded for each of scenario levels.

The following format is valid:

[LVL_0_XP,LVL_1_XP,LVL_2_XP,LVL_3_XP,LVL_4_XP,LVL_5_XP,LVL_6_XP,LVL_7_XP]

ItemMaxStock

This section details the parser properties available for the shared ItemMaxStock parser.

ItemMaxStock determines how many copies of each item might be available at one time. The items are distinguished by their rarity.

It has three mapping properties:

  • Common - Integer
  • Rare - Integer
  • Relic - Integer

Each of them represents the maximum amount of items per given rarity.

ChapterDifficulty

This section details the parser properties available for the shared ChapterDifficulty parser.

ChapterDifficulty determines difficulty for each of the chapters and subchapter by assigning a Float value between 0-1 for each of the difficulties.

In practice, it was used only in Guildmaster.

It has two mapping properties:

  • Chapter - Integer, represents Chapter number
  • SubchapterDifficulties - Mapping of Subchapter numbers and List of 4 Integers for each of the difficulties.

Each of them represents the maximum amount of items per given rarity.

BaseStats

This section details the parser properties available for the shared BaseStats parser.

Property Name Data Type Description
Health Integer

Determines the Enemy's maximum hit points.

Required for both Monsters and Objects.

Move Integer

Determines the Enemy's base Move value.

Required for all Monsters.

Attack Integer

Determines the Enemy's base Attack value.

Required for all Monsters.

Range Integer

Determines the Enemy's base Range value.

Required for all Monsters.

Target Integer

Determines the Enemy's base Target value.

Required for all Monsters.

Shield Integer

Determines the Enemy's base Shield value.

Not required.

Retaliate Integer

Determines the Enemy's base Retaliate value.

Not required.

RetaliateRange Integer

Determines the Enemy's base RetaliateRange value.

Not required.

Pierce Integer or "All"

Determines the Enemy's base Pierce value.

"All" pierces through any shield.

Not required.

Flying Boolean

Determines if the Enemy Move has Flying property.

Not required.

Advantage Boolean

Determines if the Enemy gains Advantage on attacks.

Not required.

AttackersGainDisadvantage Boolean

Determines if actors gain Disadvantage when attacking the Enemy.

Not required.

Invulnerable Boolean

Determines if the Enemy is Invulnerable.

Not required.

PierceInvulnerability Boolean

Determines if the Enemy's attacks Pierce Invulnerability.

Not required.

Untargetable Boolean

Determines if the Enemy is Untargetable.

Not required.

Conditions List of Strings

Determines what Conditions are applied on the Enemy's attacks.

Not required.

The following format is valid:

[CONDITION_1,CONDITION_2]

Immunities List of Strings

Determines what Ability Types the Enemy is immune to.

Not required.

The following format is valid:

[TYPE_1,TYPE_2]

StatIsBasedOnX Mapping

Allows specifying BaseStats depending on various factors.

For further information, see StatIsBasedOnX.

Abilities

This section details the parser properties available for the shared Abilities parser.


Basic Abilities
Merged Abilities
Condition Abilities
Card-Related Abilities
Area of Effect Abilities
Active Bonuses
Augments
Songs
Dooms
Various Abilities
StatIsBasedOnX
Filter
Enhanced Ability Properties
Traps
Attack Effects
StartAbilityConditions
Ability Types
AnimOverload

Basic Abilities
Property Name Data Type Description
Attack Integer or Mapping

Attack action. Draws an attack modifier if applicable and deals damage. Melee by default.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Attack: DAMAGE

#OR

Attack:
	#ENHANCED ABILITY PROPERTIES
											
Range Integer or Mapping

Gives the ability a specified amount of range in tiles.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Range: TILES

#OR

Range:
	#ENHANCED ABILITY PROPERTIES
Target Integer or Mapping

Adds an additional number of targets to an Attack.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Target: AMOUNT

#OR

Target:
	#ENHANCED ABILITY PROPERTIES
Push Integer or Mapping

Determines the number of hexes actors are pushed.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Push: HEX_NUMBER

#OR

Push:
	#ENHANCED ABILITY PROPERTIES
AdditionalPushEffect String

Gives push ability an additional effect.

The following values are valid:

  • IntoObstacles
  • TrackBlocked

Pushing into obstacles destroys them.

TrackBlocked counts the number of pushes because of a wall or obstacle on the target's path.

AdditionalPushEffectDamage Integer

Deals additional specified damage when AdditionalPushEffect is triggered.

Once when the target is successfully pushed into an obstacle for IntoObstacles.

For each tile that the target was prevented from moving because of an obstacle or wall for TrackBlocked.

AddistionalPushEffectXP Integer

Gives specified XP when AdditionalPushEffect is triggered.

Once when the target is successfully pushed into an obstacle for IntoObstacles.

For each tile that the target was prevented from moving because of an obstacle or wall for TrackBlocked.

Pull Integer or Mapping

Determines the number of hexes actors are pulled.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Pull: HEX_NUMBER

#OR

Pull:
	#ENHANCED ABILITY PROPERTIES
PullType String

If the Pull ability should not be pulling the target towards the caster, PullType can be set.

The following values are valid:

  • PullTowardsTile
  • PullTowardsActor
Pierce Integer or All

Determines how much shield should be pierced with an Attack.

Move Integer of Mapping

Determines the number of hexes the actor moves.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Move: HEX_NUMBER

#OR

Move:
	#ENHANCED ABILITY PROPERTIES
Jump Boolean

Determines if the Move has Jump property.

The following values are valid:

  • True
  • False
Fly Boolean

Determines if the Move has Flying property.

The following values are valid:

  • True
  • False
IgnoreDiffucultTerrain Boolean

Determines if the Move ignores negative effects of difficult terrain.

The following values are valid:

  • True
  • False
IgnoreHazardousTerrain Boolean

Determines if the Move ignores negative effects of hazardous terrain.

The following values are valid:

  • True
  • False
MoveRestrictionType String

Restricts Move depending on the value.

The following values are valid:

  • StraightLineOnly
  • MustEndNextToObstacle
Heal Integer or Mapping

Determines the amount of hit points that are restored.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Heal: HEALTH_AMOUNT

#OR

Heal:
	#ENHANCED ABILITY PROPERTIES
Damage Integer

Determines the amount of damage inflicted. Unlike Attack, does not draw an Attack modifier.

GainXP Integer

Determines how much XP does the ability give.

Loot Integer

Adds a loot action with values being the range.

LootData Mapping

The mapping has two properties:

LootableObjectImportTypes - List of Strings, determines what objects are affected

The following values are valid:

  • Chest
  • GoalChest
  • MoneyToken
  • CarryableQuestItem

AdditionalLootEffect - String, adds additional effect to looting

The following values are valid:

  • ExtraGoldPerAdjacentEnemy
PreventDamage Integer

Determines how many times the damage is prevented. The value should be -1 if it does not have a limit.

By default, it has Filter: [Self]

PreventOnlyIfLethal Boolean

If true, the damage is prevented only if it would kill the character.

The following values are valid:

  • True
  • False
Shield Integer or Mapping

Determines how much damage should be shielded.

By default it has Filter: [Self] and Duration: Round

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Shield: AMOUNT

#OR

Shield:
	#ENHANCED ABILITY PROPERTIES
Fear Integer of Mapping

Fear forces actors to Move away from the caster. The value determines the number of hexes actors Move.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Fear: HEX_NUMBER

#OR

Fear:
	#ENHANCED ABILITY PROPERTIES
Retaliate Integer or Mapping

Any actor attacking the target of the ability is dealt damage equal to the value.

It has Filter: [Self] by default.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Retaliate: AMOUNT

#OR

Retaliate:
	#ENHANCED ABILITY PROPERTIES
RetaliateRange Integer or Mapping

Limits the range that the attacks are being retaliated from.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

RetaliateRange: TILES

#OR

RetaliateRange:
	#ENHANCED ABILITY PROPERTIES
Trap Mapping

It holds information about the trap that should be created.

For further information, see Traps.

DisarmTrap None

Disarms a trap.

Adjacent by default.

DeactivateSpawner None

Deactivates a spawner.

Adjacent by default.

ActivateSpawner None

Activates a spawner.

Adjacent by default.

DestroyObstacle None

Destroys an obstacle.

Adjacent by default.

MoveObstacle None

Moves an obstacle.

Adjacent by default.

Create String

Creates an obstacle. The value should be a name of a prop to be created.

Adjacent by default.

Kill None

Kills a target.

Adjacent by default.


Merged Abilities
Property Name Data Type Description
MergedCreateAttack Mapping

It should be a mapping of two abilities. The first one should be a Create ability and the second one should be an Attack ability.

MergedDestroyObstacleAttack Mapping

It should be a mapping of two abilities. The first one should be a DestroyObstacle ability and the second one should be an Attack ability.

MergedMoveAttack Mapping

It should be a mapping of two abilities. The first one should be a Move ability and the second one should be an Attack ability.

MergedMoveObstacleAttack Mapping

It should be a mapping of two abilities. The first one should be a MoveObstacle ability and the second one should be an Attack ability.

MergedDisarmTrapDestroyObstacles Mapping

It should be a mapping of two abilities. The first one should be a DisarmTrap ability and the second one should be a DestroyObstacle ability.

MergedKillCreate Mapping

It should be a mapping of two abilities. The first one should be a Kill ability and the second one should be a Create ability.

IgnoreMergedAbilityTargetSelection Boolean

Does not allow selecting a new target for a merged ability and instead, the old target becomes the target of the ability.

The following values are valid:

  • True
  • False
UsedMergedWithAbilityTiles Boolean

If true, the tiles that targets of the merged ability were standing on become the target of the ability.

The following values are valid:

  • True
  • False

Condition Abilities
Property Name Data Type Description
Condition
Conditions

Applies specified conditions to the target.

The following values are valid:

Negative Conditions:

  • Poison
  • Wound
  • Immobilize
  • Disarm
  • Stun
  • Muddle
  • Curse
  • Disadvantage
  • StopFlying
  • Sleep

Positive Conditions:

  • Invisible
  • Strengthen
  • Bless
  • Advantage
  • Immovable

The following format is valid:

[CONDITION_1,CONDITION_2]

Muddle True or Mapping

Applies Muddle to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Muddle: True

#OR

Muddle:
	#ENHANCED ABILITY PROPERTIES
Poison True or Mapping

Applies Poison to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Poison: True

#OR

Poison:
	#ENHANCED ABILITY PROPERTIES
StopFlying True or Mapping

Applies StopFlying to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

StopFlying: True

#OR

StopFlying:
	#ENHANCED ABILITY PROPERTIES
Immovable True or Mapping

Applies Immovable to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Immovable: True

#OR

Immovable:
	#ENHANCED ABILITY PROPERTIES
Immobilize True or Mapping

Applies Immobilize to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Immobilize: True

#OR

Immobilize:
	#ENHANCED ABILITY PROPERTIES
Wound True or Mapping

Applies Wound to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Wound: True

#OR

Wound:
	#ENHANCED ABILITY PROPERTIES
Teleport True or Mapping

Applies Teleport to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Teleport: True
	
#OR
	
Teleport:
	#ENHANCED ABILITY PROPERTIES
TeleportData Mapping

The mapping has four properties:

  • TeleportType - String, valid values: TeleportToTileInRange, TeleportToPropTypeRandomly, TeleportToCaster, TeleportToPropTypeInOrder
  • PropType - String, valid vlaues: GoldPile,Chest, GoalChest, Trap, OneHexObstacle, TwoHexObstacle, ThreeHexObstacle, Spawner, PressurePlate, TerrainHotCoals, TerrainWater, TerrainRubble, TerrainThorns, DarkPitObstacle, Portal
  • MoveOtherThingsOffTiles - Boolean, determines if other objects are teleported as well
  • ShouldOpenDoorsToTeleportedLocation - Boolean, determines if doors are opened along the way of the teleport
Sleep True or Mapping

Applies Sleep to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Sleep: True

#OR

Sleep:
	#ENHANCED ABILITY PROPERTIES
Disarm True or Mapping

Applies Disarm to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Disarm: True

#OR

Disarm:
	#ENHANCED ABILITY PROPERTIES
Stun True or Mapping

Applies Stun to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Stun: True

#OR

Stun:
	#ENHANCED ABILITY PROPERTIES
AllowOverheal Integer or Mapping

Allows healing to exceed maximum hit points by a specified number.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

AllowOverheal: AMOUNT

#OR

AllowOverheal:
	#ENHANCED ABILITY PROPERTIES
Bless True or Mapping

Applies Bless to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Bless: True

#OR

Bless:
	#ENHANCED ABILITY PROPERTIES
Invisible True or Mapping

Applies Invisible to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Invisible: True

#OR

Invisible:
	#ENHANCED ABILITY PROPERTIES
Strenghten True or Mapping

Applies Strengthen to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Strengthen: True

#OR

Strengthen:
	#ENHANCED ABILITY PROPERTIES
Advantage True or Mapping

Applies Advantage to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Advantage: True

#OR

Advantage:
	#ENHANCED ABILITY PROPERTIES
Curse True or Mapping

Applies Curse to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

Curse: True

#OR

Curse:
	#ENHANCED ABILITY PROPERTIES
ChangeCondition None

Whenever a condition is applied to the actor, another condition is applied instead. Conditions can be specified with ReplaceCondition and ReplaceWithCondition.

RemoveConditions Integer or All

Removes a specified number of conditions from the target.

It has Filter: [Self] by default.

ConditionsToRemoveFirst List of Strings

Removes specified conditions before performing the rest of the ability.

AddCondition Integer or Mapping

Whenever the actor performs an action that applies a condition, a specified number of those conditions is applied instead.

It can be used only with conditions that can be doubled, for example, Bless and Curse.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

AddCondition: AMOUNT

#OR

AddCondition:
	#ENHANCED ABILITY PROPERTIES
RemoveConditionsOverride Boolean

Causes an override ability to ignore conditions that would normally be applied by the ability it overrides.

The following values are valid:

  • True
  • False
HasCondition Boolean

If true, the ability can target only actors with an applied condition.

The following values are valid:

  • True
  • False
AlreadyHasConditionDamageInstead Integer

If the target already has a condition, deal a specified amount of damage instead.

ReplaceCondition
ReplaceConditions
List of Strings

Replaces all applied conditions of the specified value.

It replaces them with the value of ReplaceWithCondition

ReplaceWithCondition String

Sets a condition that will replace conditions specified with ReplaceCondition/ReplaceConditions value.

Invulnerability None

Makes the target invulnerable.

PierceInvulnerability None

Makes the target invulnerable to Piercing.

Untargetable None

Makes the target untargetable.


Card-Related Abilities
Property Name Data Type Description
ChangeAttackModifier None

Whenever an Attack modifier is drawn, it is changed to a specific modifier. Modifiers can be specified with ReplaceModifier and ReplaceWithModifier.

ShuffleModifierDeck None

Shuffles the Attack modifier deck.

RecoverLostCards Integer, All or Mapping

Recovers a specified number of lost cards.

It can be used as mapping if only specific types of cards should be recovered.

The mapping has two properties:

  • Strength
  • RecoverCardsWithAbilityOfTypeFilter

Strength is an integer that determines the number of cards to be recovered.

RecoverCardsWithAbilityOfTypeFilter is a list of strings that filters cards by their Ability Type.

The following formats are valid:

RecoverLostCards: AMOUNT

#OR

RecoverLostCards: All

#OR

RecoverLostCards:
    Strength: AMOUNT
	RecoverCardsWithAbilityOfTypeFilter: [ABILITY_TYPE_1,ABILITY_TYPE_2]
RecoverDiscardedCards Integer, All or Mapping

Recovers a specified number of discarded cards.

It can be used as mapping if only specific types of cards should be recovered.

The mapping has two properties:

  • Strength
  • RecoverCardsWithAbilityOfTypeFilter

Strength is an integer that determines the number of cards to be recovered.

RecoverCardsWithAbilityOfTypeFilter is a list of strings that filters cards by their Ability Type.

The following formats are valid:

RecoverDiscardedCards: AMOUNT

#OR

RecoverDiscardedCards: All

#OR

RecoverDiscardedCards:
    Strength: AMOUNT
	RecoverCardsWithAbilityOfTypeFilter: [ABILITY_TYPE_1,ABILITY_TYPE_2]
LoseCards Integer or All

Forces the target to lose a specified amount of cards.

DiscardCards Integer or All

Forces the target to discard a specified amount of cards.

IncreaseCardLimit Integer

The player may add a specified number of unequipped cards to their hand.

GiveSupplyCard Integer

Adds supply card to the target's hand.

It has Filter: [Self] by default.

It references the ID of an Ability Card with a Supply property.

AdjustInitiative Integer

After the beginning of a round, after all ability cards have been revealed, the player may increase or decrease their initiative by a specified number./p>

ImprovedShortRest None

Makes the short rest give benefits of the long rest.

ItemLock None

Makes the target unable to use items.

RefreshItems Int or All

Refreshes a specified number of items. If there are specific slots or states that should be refreshed, see SlotToRefresh and SlotStateToRefresh.

ConsumeItems Int or All

Forces the player to consume a specified number of items. If there are specific slots that should be consumed, see SlotToRefresh.

SlotToRefresh List of Strings

Filters items available to refresh by their inventory slot.

The following values are valid:

  • Head
  • Body
  • Legs
  • OneHand
  • TwoHand
  • SmallItem
  • QuestItem
SlotStateToRefresh List of String

Filters items available to refresh by their state.

The following values are valid:

  • Equipped
  • Useable
  • Selected
  • Locked
  • Consumed
  • Spent
  • Active
SlotToConsume List of Strings

Filters items available to consume by their inventory slot.

The following values are valid:

  • Head
  • Body
  • Legs
  • OneHand
  • TwoHand
  • SmallItem
  • QuestItem
SlotStateToConsume List of String

Filters items available to consume by their state.

The following values are valid:

  • Equipped
  • Useable
  • Selected
  • Locked
  • Consumed
  • Spent
  • Active
ReplaceModifier
ReplaceModifiers
List of Strings

Replaces all drawn Attack modifiers of a specified value.

It replaces them with the value of ReplaceWithModifier

ReplaceWithModifier String

Sets an Attack modifier that will replace Attack modifiers specified with ReplaceModiier/ReplaceModifiers value.


Area of Effect Abilities

Area of Effect abilities are based on a hex grid as demonstrated below:

Property Name Data Type Description
AreaEffect String

Defines the shape of an AoE ability.

Each hex is represented by their position on the grid, as well as their color. They are separated by '|'.

  • G (Grey) - The AoE is centered around this position and targetted from this position. Usually it represents the caster. It is optional.
  • R (Red) - Represents all hexes affected by the AoE.
  • E (Enhancement) - Represents positions on the grid that are slots for possible enhancements.

Example:

"0,0,G|2,0,R|1,1,R"

AreaEffectLayoutOverride String

Allows for a different layout to be shown on the ability card.

It is structured the same way as AreaEffect.

IgnoreParentAreaOfEffect Boolean

If true, ignores the caster when determining targets for an Area of Effect ability.

The following values are valid:

  • True
  • False

Active Bonuses
Property Name Data Type Description
Behaviour String

Determines what the active bonus does.

The following values are valid:

  • BuffAttack
  • BuffHealPerActor
  • BuffHealPerAction
  • BuffRange
  • BuffTarget
  • ShieldIncomingAttacks
  • Retaliate
  • PreventAndRetaliate
  • MultiplyAddedConditions
  • EndTurnAbility
  • StartTurnAbility
  • OverrideAbilityType
  • ShieldTargetedAttacks
  • ShieldAndRetaliate
  • CastAbilityFromSummon
  • DuringActionAbility
  • BuffMove
  • ShieldAndDisadvantage
  • DefaultToggleBehaviour
  • BuffIncomingAttacks
  • BuffRetaliate
  • PreventAndApplyToActiveBonusCaster
  • DuringActionAbilityOnAttacked
  • BuffIncomingHeal
  • DuringActionAbilityOnKill
  • DuringActionAbilityOnMoved
  • AdjustInitiative
  • DuringActionAbilityOnAttackFinished
  • DuringActionAbilityOnAttackStarted
  • AdjustWhenAttacked
  • FocusInitiative
  • ApplyConditionalConditions
  • StartActionAbility
  • EndActionAbility
  • DuringActionAbilityOnLongRest
  • DuringActionAbilityOnDeath
  • StartRoundAbility
  • EndRoundAbility
  • DamageOnCurseModApplied
  • StartTurnAbilityAfterXCasterTurns
  • DuringActionAbilityOnDamaged
  • BuffLoot
  • DuringTurnAbility
  • DamageOnReceivedDamage
  • AddAccumulativeOverhealAndHealIfMax
  • SetMinimumOverheal
  • PreventDamageByDiscardingPlayerCards
  • LimitLoot
Duration String

Determines the duration of an active bonus.

The following values are valid:

  • Ability
  • Round
  • Persistent
  • Summon
  • Turn
Restriction String

Restricts the use of an active bonus.

The following values are valid:

  • OncePerAction
  • OncePerTurn
  • OncePerRound
Requirement
Requirements
List of Strings

All requirements have to be fulfilled for an active bonus to trigger.

The following values are valid:

  • ElementConsumedThisAction
  • OnYourTurn
  • ValidActorInRangeOfAddedAbilityRange
  • EnteredHazardousTerrain
  • EnteredDifficultTerrrain
  • ElementStates
  • ForgoTopAction
  • ForgoBottomAction
  • ActiveSpawnersInRange
  • LootInRange
  • TriggerAtSetTrackerIndex
  • ValidActorsInRangeOfRequirementRange
  • InactiveSpawnersInRange

The following format is valid:

[REQUIREMENT_1,REQUIREMENT_2]

AttackType String

Determines types of attacks that the active bonus works on.

The following values are valid:

  • Attack
  • Melee
  • Ranged
  • Default
  • Control
ValidAbilityTypes
ValidAbilityTypes
List of Strings

Determines types of abilities that the active bonus works on.

Ability Types

The following format is valid:

[TYPE_1,TYPE_2]

ProcXP Integer

Awards a specified amount of XP for trigerring the active bonus.

StrengthIsScalar
AbilityStrengthIsScalar
Boolean

If true, Strength/Amount multiplies the original value instead of adding to it.

For example, BuffAttack with an Attack: 2 and StrengthIsScalar: True doubles the original Attack value.

The following values are valid:

  • True
  • False
Filter List of Strings or Mapping

Allows selecting specific possible targets for the ability.

For further information, see Filter.

FilterContainer

Allows selecting specific possible targets for the ability. Contains multiple Filters.

For further information, see Filter.

IsAura Boolean

Determines if the active bonus is an aura. Auras apply active bonuses to a group of characters instead of one.

The following values are valid:

  • True
  • False
AuraFilter List of Strings or Mapping

Filter

AuraFilterContainer

Filter

AuraTargeting String

Restricts the range of an aura depending on the location on the map.

The following values are valid:

  • Range
  • Room
  • All
  • AllConnectedRooms
AbilityData Mapping

It is a Mapping of Abilities that are performed when the active bonus is triggered.

Consuming List of Strings

The bonus requires selected elements to be Strong or Waning to trigger. Elements are consumed this way.

The following values are valid:

  • Fire
  • Ice
  • Earth
  • Wind
  • Dark
  • Light
  • Any

The following format is valid:

[ELEMENT_1,ELEMENT_2]

CostAbility Mapping

It is a mapping of abilities that need to be performed for the active bonus to trigger.

XPTracker List of Integers

Awards a specified amount of XP for each consecutive trigger of the active bonus. The card is discarded after completing the tracker.

The following format is valid:

[XP_1,XP_2,XP_3,XP_4]

IsToggleBonus Boolean

It should be set to True if the active bonus requires anything to trigger.

The following values are valid:

  • True
  • False
ToggleIsOptional Boolean

If true, the active bonus may be skipped.

The following values are valid:

  • True
  • False
RestrictPerActor Boolean

If True, applies restrictions to all actors.

The following values are valid:

  • True
  • False
OverrideAsSong Boolean

If True, makes an active bonus into a Song.

The following values are valid:

  • True
  • False
IsSingleTargetBonus Boolean

If True, applies only to one actor, even if there is multiple targets.

The following values are valid:

  • True
  • False
ActiveBonusAbilityOverrides Mapping

This mapping of abilities override original abilities when the active bonus is triggered.

ActiveBonusAnimOverload String

Changes animation when the active bonus is triggered.

AnimOverload

GiveAbilityCardToActor Boolean

If True, the card is given to another actor instead.

The following values are valid:

  • True
  • False
StartsRestricted Boolean

If True, the active bonus cannot be triggered the same turn it was played.

The following values are valid:

  • True
  • False
EntireAction Boolean

If True, the bonus applies to the entire action when it is triggered.

The following values are valid:

  • True
  • False
SetFilterToCaster Boolean

Can be used to set Filter to the caster when the active bonus is placed on another actor.

The following values are valid:

  • True
  • False
TriggerOnCaster Boolean

Can be used for Dooms with active bonuses. This way only the caster can trigger them.

The following values are valid:

  • True
  • False
TrackerTriggerIndex Integer

Indicates the index of an XPTracker array on which the active bonus is triggered.

RequiredStrongElements List of Strings

Requires selected elements to be Strong to trigger the active bonus.

The following values are valid:

  • Fire
  • Ice
  • Earth
  • Wind
  • Dark
  • Light
  • Any

The following format is valid:

[ELEMENT_1,ELEMENT_2]

RequiredWaningElements List of Strings

Requires selected elements to be Waning to trigger the active bonus.

The following values are valid:

  • Fire
  • Ice
  • Earth
  • Wind
  • Dark
  • Light
  • Any

The following format is valid:

[ELEMENT_1,ELEMENT_2]

RequiredInertElements List of Strings

Requires selected elements to be Inert to trigger the active bonus.

The following values are valid:

  • Fire
  • Ice
  • Earth
  • Wind
  • Dark
  • Light
  • Any

The following format is valid:

[ELEMENT_1,ELEMENT_2]

ListLayoutOverride List of 2 Strings

Can be used in ScenarioAbilities to override their text.

The first string represents text and the second string is an icon name.

The following format is valid:

[TEXT,ICON_NAME]

AuraTriggerAbilityAnimType String

Sets an animation type for the aura.

The following values are valid:

  • AnimateAuraOriginator
  • AnimateAuraReceiver
  • AnimateBoth
RequirementRange Integer

Used for ValidActorsInRangeOfRequirementRange requirement to determine the required range.


Augments
Ability Properties
Property Name Data Type Description
Augment Mapping Augment mapping properties are presented below.
TransferAugments Boolean

If true, augments can be utilized by the controlled actor.

The following values are valid:

  • True
  • False
AddAugment Integer By default, a character may have only one Augment in play. If a second Augment is played, the previous one is discarded. This property adds a number of possible Augments that can be in play.
Augment Properties
Property Name Data Type Description
AugmentIsBonus Boolean

It should be set to true if Augment's abilities include an ActiveBonus

The following values are valid:

  • True
  • False
Type String

Determines the types of attacks that the Augment is applied on.

The following values are valid:

  • Attack
  • Melee
  • Ranged
  • Default
  • Control
Abilities Mapping

It is a mapping of Abilities that are performed when Augment is activated.

AbilityOverrides Mapping

It is a mapping of AbilityOverrides that override original attacks when using the Augment.


Songs
Ability Properties
Property Name Data Type Description
Song Mapping Song mapping properties are presented below.
AddSong Integer By default, a character may have only one Song in play. If a second Song is played, the previous one is discarded. This property adds a number of possible Songs that can be in play.
Song Properties
Property Name Data Type Description
Filter List of Strings or Mapping

Filter

SongEffect Mapping

Determines what the song does.

Song Effect mapping properties are presented below.

Song Effects
Property Name Data Type Description
ActivationType String

Determines when the song effect is performed.

The following values are valid:

  • AbilityStart
  • ActionStart
AttackType String

Determines the types of attacks that the Song is applied on.

The following values are valid:

  • Attack
  • Melee
  • Ranged
  • Default
  • Control
AbilityType Mapping

Determines the types of abilities that the Song is applied on.

Ability Types

Abilities Mapping

It is a mapping of Abilities that are performed when Song is activated.

AbilityOverrides Mapping

This mapping of abilities override original abilities when the Song is activated.


Dooms
Property Name Data Type Description
AddDoomSlot Integer By default, a character may have only one Doom in play. If a second Doom is played, the previous one is discarded. This property adds a number of possible Dooms that can be in play.
TransferDooms Integer Transfers an indicated number of Dooms to another target. If the value is -1, all Dooms are transferred instead.
AddDoom Mapping

Adds a Doom to the target. It holds a mapping of abilities.

The following format is valid:

AddDoom:
    Doom:
        DoomAbilities:
            #ABILITY_1
            #ABILITY_2

Various Abilities
Property Name Data Type Description
AddActiveBonus Mapping

It is an ability that is performed when the ActiveBonus is triggered.

Summon Mapping

The mapping has two properties:

  • ID
  • ActiveBonusData

ID references the ID of HeroSummon that should be summoned as a part of the ability.

ActiveBonusData is an additional behaviour that can be added to the summon. For further information see Active Bonuses.

The following formats are valid:

Summon: HERO_SUMMON_ID

#OR

Summon:
    ID: HERO_SUMMON_ID
    ActiveBonusData:
        ACTIVE_BONUS_DATA
Summons List of 4 Strings

Determines what monsters are summoned for each of the party sizes.

References IDs of HeroSummons. Empty is a valid value.

The following format is valid:

Summons:
    - SUMMON_ID_1
    - SUMMON_ID_2
    - SUMMON_ID_3
    - SUMMON_ID_4
											
ControlActor Mapping

The mapping has three properties:

  • Abilities
  • ControlDurationType
  • ControlActorType

Abilities is a mapping of additional actions to perform.

ControlDurationType determines how long the actor is controlled for. The following values are valid:

  • ControlForOneAction
  • ControlForOneTurn

ControlActorType has two valid values:

  • Player
  • Ally

Player indicates full control over the actor, while Ally swaps allies and enemies for the actor, but they control their actions.

By default, ControlActor has Filter: [Enemy]

ChooseAbility Mapping

The mapping has two properties:

  • Strength
  • Abilities

Strength is an Integer that's values represents how many abilities should be chosen.

Abilities is a mapping of possible abilities to choose from.

ForgoActionsForCompanion Mapping

The mapping has two properties:

  • TopActionAbility
  • BottomActionAbility

Both of them are mappings of abilities that the player may choose for the companion to perform instead of their corresponding action.

Redirect None

Attacks that are targetting caster's allies are redirected to the caster instead.

AddTarget Integer or Mapping

Adds a specified number of Add Targets to the target.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

AddTarget: AMOUNT

#OR

AddTarget:
	#ENHANCED ABILITY PROPERTIES
AddHeal Integer or Mapping

Whenever the actor is healed, they receive additional healing equal to the value.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

AddHeal: AMOUNT

#OR

AddHeal:
	#ENHANCED ABILITY PROPERTIES
AddRange Integer or Mapping

Whenever the actor performs an action that might have range, additional range equal to the value is added.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

AddRange: AMOUNT

#OR

AddRange:
	#ENHANCED ABILITY PROPERTIES
AttackersGainDisadvantage True/1 or Mapping

Any actor attacking the target of the ability gain disadvantage.

If there is any additional information about the action that needs to be provided, see Enhanced Ability Properties.

The following formats are valid:

AttackersGainDisadvantage: True

#OR

AddTarget:
	#ENHANCED ABILITY PROPERTIES
RemoveActorFromMap None

Removes an actor from the map.

Adjacent by default.

ExtraTurn String

Allows the caster to perform extra actions at the end of their turn.

The following values are valid:

  • TopAction
  • BottomAction
  • BothActions
  • BothActionsLater
  • MonsterAction

BothActionsLater is not performed until the new leading initiative is reached in the order. The new initiative has to be greater than the old one.

Swap True or Mapping

Swaps positions of two targets.

If there is additional filtering of the targets required, mapping can be used.

It has two properties:

  • FirstTargetFilter
  • SecondTargetFilter

RedistributeDamage None

All damage taken by the caster and its summons may be redistributed. Damage taken while redistributing cannot exceed the target's hit points.

Null None

Consumes ability requires a parent ability to work. If there is no clear parent, Null can serve as one as it does nothing.

NullTargeting None

Some abilities may require a parent target. If there is no ability linked with targetting, NullTargeting can serve as a method of targetting without any functionality on its own.

ImmunityTo List of Strings

Gives a target immunity to all selected ABILITYTYPES.

The following format is valid:

[ABILITY_TYPE_1,ABILITY_TYPE_2]

Infuse List of Strings

Sets a specified set of elements to Strong.

The following values are valid:

  • Fire
  • Ice
  • Air
  • Earth
  • Light
  • Dark
  • Any

In case Any is infused, ShowElementPicker should be set to True.

ConsumeElements List of Strings

Sets a specified set of elements to Inert. Does not provide additional functionality.

The following values are valid:

  • Fire
  • Ice
  • Air
  • Earth
  • Light
  • Dark
  • Any
ShowElementPicker Boolean

Displays a UI element that elements can be picked from.

The following values are valid:

  • True
  • False
AttackEffect Mapping

Adds additional effects to the Attack. Useful for Active Bonuses.

For further information, see Attack Effects.

ConditionalOverrides Mapping

If the ability requires additional conditions to be more or less effective, ConditionalOverrides can be used.

The mapping has three properties:

  • Filter
  • XP
  • AbilityOverrides

Filter is the condition that has to be satisfied.

XP awards an additional amount of XP for fulfilling the condition.

AbilityOverrides is a mapping of Abilities that are performed when the conditions are met.

StartAbilityConditions Mapping

If the ability requires additional conditions to be performed, StartAbilityConditions can be used.

For further information, see Start Ability Conditions.

RangeIsBase Boolean

Can be used to calculate range from companion instead of the caster.

The following values are valid:

  • True
  • False
RangeAtLeastOne Boolean

Can be used to override an ability if a valid target is in range.

The following values are valid:

  • True
  • False
MultiPassAttack Boolean

Should be set to false for Area of Effect attacks to make them one Attack.

The following values are valid:

  • True
  • False
ChainAttack Boolean

Multiple attacks in one action.

The following values are valid:

  • True
  • False
ChainAttackRange Integer

ChainAttack may change its range after the first hit. Its range can be specified with ChainAttackRange

ChainAttackDamageReduction Integer

ChainAttack's damage is reduced by a specified amount after each hit.

DamageSelfBeforeAttack Integer

Damages the caster before Attack action by a specified amount.

SpawnDelay Float

Delays a creation or destruction of a prop by a specified number of seconds.

Can be used to line up creation/destruction with an animation.

AllTargetsOnMovePath Boolean

If set to True, the ability targets all actors on the caster's Move path.

The following values are valid:

  • True
  • False
AllTargetsOnMovePathSameStartAndEnd Boolean

If set to True, the ability targets all actors on the caster's Move path. The caster however has to return to their starting tile.

The following values are valid:

  • True
  • False
AllTargetsOnAttackPath Boolean

If set to True, the ability targets all actors that are on a ranged Attack's path.

The following values are valid:

  • True
  • False
XPPerTarget Integer

Gives a specified amount of XP for each valid target.

XPPerTargetPerEnemyCount Integer

Gives XP specified with XPPerTarget for every X targets, where X is the value.

For example:

XPPerTarget: 1
XPPerTargetPerEnemyCount: 2

The caster gains 1 XP for every 2 targets.

XPPerTargetMustDie Integer

Gives a specified amount of XP for each valid target that dies.

Targeting List of Strings

Restricts targeting based on location on the map.

The following values are valid:

  • Range
  • Room
  • All
  • AllConnectedRooms
TargetIsBase Boolean

Can be used to target from companion instead of the caster.

The following values are valid:

  • True
  • False
TargetAtLeastOne Boolean

Can be used to override an ability if there is at least one valid target.

The following values are valid:

  • True
  • False
AnimOverload String

Changes the ability's animation.

Available animations are dependant on the model.

For the full list, see AnimOverload.

SharePreviousAnim Boolean

Makes transitions smoother in case multiple animations should be played one after another.

The following values are valid:

  • True
  • False
SkipAnim Boolean

Skips the animation altogether.

The following values are valid:

  • True
  • False
AttackSourcesOnly Boolean

Makes a bonus valid only for damage from attacks.

The following values are valid:

  • True
  • False
Text String

Represents text on the enemy card.

It should be used only within enemy cards.

TextOnly Boolean

It can be used in enemy cards when only the Text value should be displayed on the card.

The following values are valid:

  • True
  • False
ShowRange Boolean

It can be used in enemy cards if the Range value should not be displayed on the card.

The following values are valid:

  • True
  • False
ShowTarget Boolean

It can be used in enemy cards if the Target value should not be displayed on the card.

The following values are valid:

  • True
  • False
ShowArea Boolean

It can be used in enemy cards if Target: -1 should not be displayed on the card.

The following values are valid:

  • True
  • False
OnDeath Boolean

If True, the ability is performed on caster's death.

The following values are valid:

  • True
  • False
AddAttackBaseStat Boolean

If True, adds the base Attack value to the damage.

The following values are valid:

  • True
  • False
ParentName String

Used for abilities within abilities, for example, Consumes, AbilityOverrides, CostAbility.

References an Ability.

AbilityXP Integer

Rewards a specified number of XP for completing an ability.

AutoTrigger Boolean

If true, the game does not wait for the player to confirm the ability.

The following values are valid:

  • True
  • False
RestrictRange Integer

Determines the range within which a controlled actor has to end their Move, in relation to the caster.

TargetOneEnemyWithAllAttack Boolean

Allows to Attack one actor with all attacks. Requires Target > 1.

The following values are valid:

  • True
  • False
TreatAsMelee Boolean

Treats a ranged Attack as melee, thus removing any disadvantages of ranged attacks.

The following values are valid:

  • True
  • False
UseParentRangeType Boolean

Allows to calculate range from parent ability.

The following values are valid:

  • True
  • False
AddTargetPropertyToSrength String

Adds value of the target property to strength of the ability.

The following values are valid:

  • Shield
AddTargetPropertyToStrengthMultiplier Integer

Multiplies the amount gained from target property by a specified number.

AllTargetsAdjacentToParentMovePath Boolean

All enemies on tiles adjacent to the caster's Move path are a target of the ability.

The following values are valid:

  • True
  • False
AllTargetsAdjacentToParentTargets
AllTargetsAdjacentToParentTarget
Boolean

All enemies adjacent to the targer are a target of the ability.

The following values are valid:

  • True
  • False
HealPercentageOfHealth Float

Restores hit points equal to the percentage value of maximum hit points.

Examples:

  • 0.1 - 10%
  • 0.5 - 50%
  • 1 - 100%
ExactRange Boolean

If true, the target of the ability has to be at the end of the range, exactly X hexes away from the caster, where X is Range's value.

The following values are valid:

  • True
  • False
AttackHasAdvantage Boolean

Determines if the Attack has advantage.

The following values are valid:

  • True
  • False
AttackHasDisadvantage Boolean

Determines if the Attack has disadvantage.

The following values are valid:

  • True
  • False
ExhaustSelf Boolean

If true, the caster is immediately exhausted upon completing the ability.

The following values are valid:

  • True
  • False
GainXPPerXDamageDealt Integer

The caster gains 1 XP per X damage dealt.

Examples:

GainXPPerXDamageDealt: 1, 3 DMG dealt, 3 XP gained.

GainXPPerXDamageDealt: 2, 4 DMG dealt, 2 XP gained.

GainXPPerXDamageDealt: 3, 5 DMG dealt, 1 XP gained.

SetHPTo Integer

Sets caster's hit points to a specified number.

InfuseOnlyIfNotStrong Boolean

If true, infuse elements only if they are Waning or Inert.

The following values are valid:

  • True
  • False
CanTargetInvisible Boolean

If true, the ability can target invisible actors.

The following values are valid:

  • True
  • False
IgnoreStun Boolean

If true, Stun does not prevent using the ability.

The following values are valid:

  • True
  • False
TreatAsNonSubability Boolean

If true, the SubAbility is not treated as a SubAbility.

The following values are valid:

  • True
  • False
PerformXTimesBasedOn String

The ability is performed X times were X is the value.

StatIsBasedOnX

ConsiderMultiTargetForEnhancements Boolean

If true, the abilty is considered multi targe for assigning enhancements.

The following values are valid:

  • True
  • False
OnAttackInfuse String

Infuses specified elements on Attack.

The following values are valid:

  • Fire
  • Ice
  • Earth
  • Wind
  • Dark
  • Wind
  • Any
UseParentTargets Boolean

If true, the SubAbility's target is the same as its ability's.

The following values are valid:

  • True
  • False
AlsoTargetSelf Boolean

If true, include the caster as a target.

The following values are valid:

  • True
  • False
AlsoTargetAdjacent List of Strings

Includes all adjacent actors that of the filtered type.

Filter

ShowPlusX Boolean

If true, include "+ X" in the enemy card layout.

The following values are valid:

  • True
  • False
TargetActorWithTrapEffects Boolean

If true, the target suffers the effects of the trap.

The following values are valid:

  • True
  • False
TargetActorWithTrapEffectsRange Integer

Provides a limit to the range of TargetActorWithTrapEffects abilty.

StatIsBasedOnX Mapping

StatIsBasedOnX

MoveObstacleRange Integer

Provides a range for MoveObstacle ability.

MoveObstacleAnimOverLoad String

Changes the animation of moving the obstacle.

AnimOverload

OverrideAugmentAttackType String

By default, Augments work only on melee Attack.

This property can make it work on other types of Attacks.

The following values are valid:

  • Attack
  • Melee
  • Ranged
  • Default
  • Control
AbilityType String

Changes the type of the ability without changing actual functionality.

Ability Types


StatIsBasedOnX

StatIsBasedOnX changes various values depending on other values. They can affect ability stats as well as base stats with slight differences. It is a mapping that can be demonstrated this way:

StatIsBasedOnX:
    STAT_NAME:
        BasedOn: BASED_ON_WHAT
        #HOW_IS_IT_CALCULATED
Property Name Data Type Description
BasedOn String

Determines what the stat will be based on.

Ability Stats

  • HexesMovedThisTurn
  • HexesMovedThisAction
  • HexesMovedByParentAbility
  • DamageInflictedThisTurn
  • DamageInflictedThisAction
  • DamageInflictedByParent
  • ObstaclesDestroyedThisTurn
  • ObstaclesDestroyedByParent
  • ObstaclesToBeDestroyedByMergedAbility
  • TargetAdjacentEnemies
  • TargetAdjacentAllies
  • CasterAdjacentEnemies
  • CasterAdjacentAllies
  • DamageInflictedByParentOnLastTarget
  • LostCardCount
  • PercentageOfCurrentHP
  • HPDifference
  • TargetsDamagedByPreviousAttackThisTurn
  • TargetsDamagedByPreviousAttackThisAction
  • TargetsDamagedByPreviousDamageAbilityThisTurn
  • TargetsDamagedByPreviousDamageAbilityThisAction
  • HalfTargetsDamagedByPreviousDamageAbilityThisAction
  • ActorCount
  • DeadActorCount
  • ScenarioLevel

Ability Stats from target Xs

  • TargetHPDifference
  • TargetDamageTaken
  • TargetDistanceRangeDiff

Base Stats

  • InitialPlayerCharacterCount
  • XAddedToCharactersTimesLevel
  • CharactersTmesLevelPlusX
  • XAddedToYTimesLevel
  • XPlusCharactersPlusLevel
  • XPlusLevel
  • XAddedToLevelTimesCharactersOverY
  • LevelAddedToXTimesCharacters
  • XAddedToInitialPlayerCharacterCount
  • XTimesInitialPlayerCharacterCountPlusLevelMinusY
  • XTimesInitialPlayerCharacterCountPlusLevelMinusYTimesRound
  • CharactersPlusLevelOverX
  • TargetAdjacentEnemiesOfTarget
  • TargetAdjacentAlliesOfTarget
  • CasterAdjacentEnemiesOfTarget
  • CasterAdjacentAlliesOfTarget
  • TargetAdjacentEnemiesOfCaster
  • TargetAdjacentAlliesOfCaster
  • CasterAdjacentEnemiesOfCaster
  • CasterAdjacentAlliesOfCaster
  • XPlusCharactersPlusLevelTimesY
AddTo Boolean

If True, adds to an already existing stat instead of replacing it.

The following values are valid:

  • True
  • False
Multiplier Float

Multiplies the value by a specified number.

SecondVariable Float

Used when a stat is based on X and Y. Works like Multiplier.

Filter List of Strings of Mapping

Filter

IncludeUnrevealed Boolean

Some BasedOn values count only revealed actors, room etc. If IncludeUnrevealed is True, all are counted instead.

The following values are valid:

  • True
  • False

Filter

Filters narrow down possible targets of abilities. There are two ways of specifying a Filter.

The first one is a List of Strings that holds all possible targets. The following values are valid:

  • Self
  • Enemy
  • Ally
  • Companion

To Create a more advanced Filter, mapping can be used. Mapping properties are specified below.

If there are multiple Filters in one ability, FilterContainer can be used instead. It is a mapping of multiple Filters.

Property Name Data Type Description
TargetType List of Strings

Works like the simple List of Strings Filter.

The following values are valid:

  • Self
  • Enemy
  • Ally
  • Companion

The following format is valid:

[TYPE_1,TYPE_2

EnemyType List of Strings

Only selected enemy types can be targetted.

The following values are valid:

  • Normal
  • Elite
  • Boss
  • Object

The following format is valid:

[TYPE_1,TYPE_2]

ActorType List of Strings

Only selected actor types can be targetted.

The following values are valid:

  • Player
  • Enemy
  • Summon
  • Ally
  • Enemy2
  • Neutral

The following format is valid:

[TYPE_1,TYPE_2]

PlayerClasses List of Strings

Only selected player classes can be targeted.

References IDs of Characters.

The following format is valid:

[CLASS_1,CLASS_2]

EnemyClasses List of Strings

Only selected enemy classes can be targeted.

References IDs of Enemies.

The following format is valid:

[CLASS_1,CLASS_2]

HeroSummonClasses List of Strings

Only selected hero summon classes can be targeted.

References IDs of HeroSummons.

The following format is valid:

[CLASS_1,CLASS_2]

ObjectClasses List of Strings

Only selected object classes can be targeted.

References IDs of Enemies.

The following format is valid:

[CLASS_1,CLASS_2]

Summoner List of Strings

Only summoners of HeroSummons can be targeted.

References IDs of Characters.

The following format is valid:

[CLASS_1,CLASS_2]

Health String

Only actors with health fitting the criteria can be targeted.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
  • "< AMOUNT%"
  • "<= AMOUNT%"
  • "> AMOUNT%"
  • ">= AMOUNT%"
  • "== AMOUNT%"
  • "!= AMOUNT%"
Health String

Can only target the caster if health fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
  • "< AMOUNT%"
  • "<= AMOUNT%"
  • "> AMOUNT%"
  • ">= AMOUNT%"
  • "== AMOUNT%"
  • "!= AMOUNT%"
TargetAdjacentEnemies
TargetAdjacentEnemiesOfCaster
String

Works only if the number of enemies of the caster adjacent to the target fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
TargetAdjacentAllies
TargetAdjacentAlliesOfCaster
String

Works only if the number of allies of the caster adjacent to the target fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
TargetAdjacentAlliesOfTarget String

Works only if the number of allies of the target adjacent to it fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
CasterAdjacentEnemies
CasterAdjacentEnemiesOfCaster
String

Works only if the number of enemies of the caster adjacent to it fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
CasterAdjacentAllies
CasterAdjacentAlliesOfCaster
String

Works only if the number of allies of the caster adjacent to it fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
TargetHasNegativeCondition
TargetHasNegativeConditions
List of Strings

Only actors with selected negative conditions can be targetted.

Conditions

CasterHasNegativeCondition
CasterHasNegativeConditions
List of Strings

Works only if the caster has selected negative conditions applied to them.

Conditions

TargetHasPositiveCondition
TargetHasPositiveConditions
List of Strings

Only actors with selected positive conditions can be targetted.

Conditions

CasterHasPositiveCondition
CasterHasPositiveConditions
List of Strings

Works only if the caster has selected positive conditions applied to them.

Conditions

TargetNegativeConditionCount
TargetNegativeConditionsCount
String

Works only if the number of negative conditions applied to the target fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
CasterNegativeConditionCount
CasterNegativeConditionsCount
String

Works only if the number of negative conditions applied to the caster fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
TargetPositiveConditionCount
TargetPositiveConditionsCount
String

Works only if the number of positive conditions applied to the target fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
CasterPositiveConditionCount
CasterPositiveConditionsCount
String

Works only if the number of positive conditions applied to the caster fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
Invert Boolean

If True, inverts the filter.

For example, if there is a Filter with PlayerClasses: CragheartID and Invert: True, all player classes except for Cragheart are a valid target.

The following values are valid:

  • True
  • False
CheckAdjacentRange Integer

Only targets within the specified range are valid.

CompareTargetHPToYourMissingHP String

Can only target if the target's current HP and the difference between caster's maximum HP and current HP multiplied by the amount fits the criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
  • "< AMOUNT%"
  • "<= AMOUNT%"
  • "> AMOUNT%"
  • ">= AMOUNT%"
  • "== AMOUNT%"
  • "!= AMOUNT%"

Examples:

  • CompareTargetHPToYourMissingHP: "< 50%"
  • Target's Current HP: 4
  • Caster's Max HP: 20
  • Caster's Current HP: 10
  • 4 < (20 - 10) * 50%
  • 4 < 5
Valid target.
  • CompareTargetHPToYourMissingHP: "< 50%"
  • Target's Current HP: 6
  • Caster's Max HP: 20
  • Caster's Current HP: 10
  • 6 < (20 - 10) * 50%
  • 6 < 5
Not valid target.
TargetMissingHP String

Only actors with missing health fitting the criteria can be targetted.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
  • "< AMOUNT%"
  • "<= AMOUNT%"
  • "> AMOUNT%"
  • ">= AMOUNT%"
  • "== AMOUNT%"
  • "!= AMOUNT%"
IsDoomed Boolean

If True, only doomed actors can be targeted.

The following values are valid:

  • True
  • False
CarryingQuestItem Boolean

If True, only actors that are carrying a quest item can be targeted.

The following values are valid:

  • True
  • False

Enhanced Ability Properties
Property Name Data Type Description
Duration/Amount Integer

Determines how much damage the Attack does, how many hexes the character travels while moving etc. Dependant on the action itself.

Enhancements Integer

Sets a number of enhancement slots for the action.

PierceEnhancements Integer

Sets a number of enhancement slots if the Attack has Pierce.

Jump Boolean

Determines if the Move action has the jump property.

The following values are valid:

  • True
  • False
Fly Boolean

Determines if the Move action has the fly property.

The following values are valid:

  • True
  • False
IgnoreDifficultTerrain Boolean

Determines if the character ignores difficult terrain penalties.

The following values are valid:

  • True
  • False
IgnoreHazardousTerrain Boolean

Determines if the character ignores hazardous terrain penalties.

The following values are valid:

  • True
  • False
Pierce Integer or "All"

Determines how many points of shield the Attack action ignores.

The following formats are valid

  • Pierce: 3
  • Pierce: All
Infuse String

Determines if the action infuses an element.

Any element is valid.

DecrementTrigger Integer

Determines if the character ignores hazardous terrain penalties.

The following values are valid:

  • True
  • False

Traps
Property Name Data Type Description
TrapName String

References the name of the trap model that should be spawned.

The following values are valid:

  • BearTrap
Damage Integer

Determines the amount of damage that the trap does.

Conditions List of String

Determines conditions applied by the trap.

Conditions

The following format is valid:

[CONDITION_1,CONDITION_2]

AdjacentRange Integer

All actors in a specified range of the trap suffer damage when the trap is sprung.

AdjacentDamage Integer

Determines the amount of damage that is dealt to adjacent actors.

AdjacentConditions List of Strings

Determines conditions applied by the trap to adjacent actors.

Conditions

The following format is valid:

[CONDITION_1,CONDITION_2]

AdjacentFilter List of Strings or Mapping

Filters out adjacent actors.

Filter

TrigerredXP Integer

Determines the amount of XP that is rewarded to the caster when the trap is triggered.


Attack Effects

Attack Effects are buffs applied to attacks.

Property Name Data Type Description
Strength
Amount
Integer

Determines the amount of extra damage that the Attack deals.

Type String

The following values are valid:

  • StandardBuff
  • BuffForEachNegativeConditionOnTarget
  • BuffForEachPositiveConditionOnTarget
  • BuffForEachConditionOnTarget
  • BuffIfAnyConditionsOnTarget
  • BuffIfCanPerformSubAbility
  • BuffIfAnItemUsedInAction
XP Integer

Determines how much additional XP is given for the Attack.

Pierce Integer or All

Determines the amount of shield that the Attack ignores.

Filter List of Strings or Mapping

Applies the effect only on filtered targets.

Filter

Condition
Conditions
List of Strings

Determines conditions that should be applied on the target of the Attack for BuffIfAnyConditionsOnTarget type.

Conditions

The following format is valid:

[CONDITION_1,CONDITION_2]

AttackType String

Applies the effect only on those types of attacks.

The following values are valid:

  • Attack
  • Melee
  • Ranged
  • Control
  • Default

StartAbilityConditions

Can be used when there are specified conditions that must be met to perform the ability.

Property Name Data Type Description
Type String

It is the type of ability that is performed when the conditions are met.

The following values are valid:

  • SubAbility
  • PreviousAbility
  • ThisAbility
MoveWasStraightLine Boolean

If True, the caster had to Move in a straight line to perform the ability.

The following values are valid:

  • True
  • False
OccupyingObstacleHex Boolean

If True, the caster has to occupy an obstacle hex to perform the ability

The following values are valid:

  • True
  • False
HPPercentOfMax String

To perform the ability, the caster's health has to fit the specified criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
  • "< AMOUNT%"
  • "<= AMOUNT%"
  • "> AMOUNT%"
  • ">= AMOUNT%"
  • "== AMOUNT%"
  • "!= AMOUNT%"
HexesMovedThisTurn String

To perform the ability, the caster must have moved the number of hexes that fit the specified criteria.

The following formats are valid:

  • "< AMOUNT"
  • "<= AMOUNT"
  • "> AMOUNT"
  • ">= AMOUNT"
  • "== AMOUNT"
  • "!= AMOUNT"
XP Int

Awards an additional amount of XP for completing the ability.


Ability Types
  • Move
  • Attack
  • Heal
  • Damage
  • Loot
  • PreventDamage
  • Shield
  • Retaliate
  • Trap
  • Create
  • RecoverLostCards
  • Invisible
  • Poison
  • Wound
  • Muddle
  • Immobilize
  • Disarm
  • Curse
  • Stun
  • Strengthen
  • Bless
  • Consume
  • Infuse
  • RefreshItemCards
  • RecouverDiscardedCards
  • Summon
  • Advantage
  • Teleport
  • Kill
  • DisarmTrap
  • DestroyObstacle
  • Redirect
  • AddTarget
  • Push
  • Pull
  • AddHeal
  • AddRange
  • ControlActor
  • AddAugment
  • MergedCreateAttack
  • MergedDestroyAttack
  • MergedMoveAttack
  • MoveObstacle
  • MergedMoveObstacleAttack
  • MergedDisarmTrapDestroyObstacles
  • MergedKillCreate
  • AttackerGainDisadvantage
  • AddCondition
  • AddSong
  • PlaySong
  • AddActiveBonus
  • OverrideAugmentAttackType
  • Null
  • ImmunityTo
  • ConsumeElement
  • ChooseAbility
  • LoseCards
  • IncreaseCardLimit
  • Augment
  • StopFlying
  • ExtraTurn
  • ImprovedShortRest
  • Overheal
  • GainXP
  • AdjustInitiative
  • Swap
  • RedistributeDamage
  • ForgoActionsForCompanion
  • ChangeModifier
  • RemoveConition
  • ShuffleModifierDeck
  • DiscardCards
  • NullTargeting
  • AddDoom
  • AddDoomSlots
  • TransferDooms
  • Choose
  • GiveSupplyCard
  • LongRest
  • ShortRest
  • Fear
  • DeactivateSpawner
  • RemoveActorFromMap
  • ConsumeItemCards
  • Invulnerability
  • PierceInvulnerability
  • Sleep
  • ActivateSpawner
  • Untargetable

AnimOverload
Character Classes
Class Name Available Animations
BeastTyrant
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • Attack
  • RangedAttack
  • Command
  • RadialBeneficial
  • PowerUp
  • Heal
  • TurnInvisible
  • JumpOutof
  • Jump
  • JumpInto
  • Push
  • Pull
  • Loot
  • Summon
  • UseItem
  • HalberdUseItem
Berserker
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • MeleeAttackHit
  • HeavyAttack
  • SuperHeavyAttack
  • SupperHeavyAttackIntoExhaust
  • RangedRadial
  • PowerUp
  • Heal
  • AreaSlam
  • AdjacentShove
Brute
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • PowerUpShield
  • PowerUp
  • Heal
  • Loot
  • UseItem
  • HalberdUseItem
  • Attack
  • RangedAttack
  • RadialAttack
  • RadialShout
  • DefaultRadialAttack
  • Summon
  • JumpOutof
  • Jump
  • JumpInto
  • TargetedShout
  • Push
  • HeavyMeleeAttack
  • HeavyFatalAdvance
  • Summon
Cragheart
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • MeleeSmash
  • DefaultRadialAttack
  • MeleeSmashRockTunnel
  • MeleeSmashPulverizeTop
  • MeleeSmashCrater
  • MeleeSmashUnstableUpheaval
  • MeleeSmahsAvalanche
  • MeleeSmashExplosivePunch
  • MeleeSmashRockyEnd
  • TargetedDirtTornado
  • TargetedForcefulStorm
  • TargetedSentientGrowth
  • TargetedUnstableUpheavalBottom
  • TargetedCataclysm
  • TargetedRockyEnd
  • TargetedClearTheWay
  • Footstomp
  • FootstompCraterStart
  • FootstompCraterEnd
  • FootstompPulverizeBottom
  • FootstompSentientGrowth
  • ObstacleStonePummel
  • ObstacleOpposingStrike
  • ObstacleAvalanche
  • ObstacleBlindDestruction
  • ObstacleDigPit
  • ObstacleMeteor
  • ObstacleEarthenClod
  • ObstacleMassiveBoulder
  • ObstaclePetrify
  • DamageBlindDestruction
  • PowerUpOther
  • TurnInvisible
Doomstalker
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • RadialAttack
  • Loot
  • ImmobilizeAdjacent
  • CommandAdjacent
  • LayTrap
  • DoomTarget
  • DoomTargetAlt
  • PowerUp
  • Heal
  • TurnInvisible
  • Refresh
  • Push
  • Pull
Elementalist
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • GainDisadvantage
  • ProjectileFormless
  • ProjectileRaw
  • ProjectileEther
  • ProjectilePure
  • TargetFloorEarth
  • TargetFlootIce
  • TargetFloorFireIce
  • RadialHexFire
  • RadialHexWind
  • TargetFloorMulti
  • TargetInvisibility
  • TargetFloorObsidian
  • ChainLighting
  • AreaHexFireIceKill
  • AreaHexFireIce
  • AreaHexIce
  • AreaHexWind
  • AreaHexEarth
  • DefaultRadialAttack
  • RadialHexEarth
  • ElementalFlames
Mindthief
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • TurnInvisible
  • ManyAsOne
  • MindAttack
  • MindControl
  • DefaultRadialAttack
  • Attack2
Nightshroud
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • AltAttack
  • HeavyAttack
  • AdjacentAreaAttack
  • RadialAttack
  • TurnInvisible
  • WeakRadial
  • Kill
  • TeleportAway
  • TeleportBack
Plagueherald
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • TurnInvisible
  • Kill
  • RadialPositive
  • RadialNegative
  • TargetedDebuff
  • RadialNegativeMajor
  • AreaDisease
  • TeleportAway
  • TeleportBack
Quatermaster
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • TurnInvisible
  • Refresh
  • RadialBuff
  • TargetedScroll
  • RadialScroll
  • TargetedScrollLightning
  • TargetedScrollBlizzard
  • RadialScrollLightning
  • RadialScrollBlizzard
  • HeavyAttack
  • SlamAttack
Sawbones
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • TurnInvisible
  • RadialBuff
  • HeavyMeleeAttack
  • RangedAreaAttack
  • Kill
  • BuffAdjacent
  • SelfDebuff
  • TeleportAway
  • TeleportBack
Scoundrel
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • KillAdjacent
  • RangedAttackThrowingKnives
  • RangedAttackThrowingMolotov
  • RangedAttackPistol
  • RangedAttackPistolBurningOil
  • SelfPowderSmokeBomb
  • SelfPowderInvisibility
  • SelfPowderVisage
  • SelfPowderWatchItBurn
  • DefaultRadialAttack
  • AimedPowderPoison
  • AimedPowderConfuse
  • PowerUpTrickstersReveal
  • LayTrap
Soothsinger
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • AggressiveTargetedShout
  • AggressiveNonTargetedShout
  • PlayPositiveTune
  • PlayPositiveTuneAttack
  • PlayPositiveTuneMove
  • PlayPositiveTuneShield
  • PlaySongHealing1
  • PlaySongHealing2
  • PlaySongAttack1
  • PlaySongAttack2
  • PlaySongAttack3
  • PlaySongConfuse1
  • PlaySongConfuse2
  • PlaySongSpeed1
  • PlaySongSpeed2
  • PlaySongShield1
  • PlaySongShield2
  • PlaySongShield3
Summoner
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • HeavyStaffAttack
  • MindControl
  • AreaAttack
  • RadialBuff
  • RadialDebuff
  • RadialKill
  • RangedAttackFlame
  • RangedAttackAir
  • RangedAttackDark
  • AreaEtherealVeins
Sunkeeper
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • MeleeSmite
  • RadialSmite
  • RangedSmite
  • ControlAlly
  • PositiveBuffTargeted
  • PositiveBuffRadial
Tinkerer
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • LayTrap
  • PowerUpPotent
  • LeftWristTechCrankBow
  • LeftWristTechNetShooter
  • LeftWristTechToxicBolt
  • LeftWristTechDisintegrationBeam
  • LeftWristTechNoxiousVial
  • LeftWristGrenadeInkBomb
  • LeftWristFlameThrower
  • PowerUpDisorientingFlash
  • DefaultRadialAttack
  • TargetRecover
  • HarmRadialAdjacentDisorientingFlash
  • HarmRadialLethalInjection
  • RadialHeal
  • HarshStimulantsAttack
  • GadgetAdjacentLethalInjection
  • GadgetAdjacentNetShooter
  • EnhancementField
  • FlamethrowerField
  • StimulantField
Spellweaver
  • Hit
  • Death
  • GivePackAdjacent
  • RangedAreaAttack
  • RadialBuff
  • PushPull
  • DisarmTrap
  • DestroyObstacle
  • UseItem
  • HalberdUseItem
  • Jump
  • JumpOutof
  • JumpInto
  • Attack
  • RangedAttack
  • Summon
  • Loot
  • PowerUp
  • Heal
  • Push
  • Pull
  • PowerUpSelf
  • PowerDown
  • PowerUpFrost
  • PowerDownUpgraded
  • PowerUpHardenedSpikes
  • DefaultRadialAttack
  • RadialStoneFists
  • RadialFreezingNova
  • RadialInferno
  • RadialBlackHolePull
  • RadialBlackHoleDamage
  • RadialForkedBeam
  • RadialBlackHolePullOld
  • SingleFireOrbs
  • TargetedGenericHeal
  • TargetedGenericFlame
  • TargetedSpiritOfDoom
  • TargetedChromaticExplosion
  • TargetedIcyBlast
  • TargetedFrozenNight
  • TargetedColdFront
  • TargetedColdFire
  • TargetedLivingTorchPlus
  • TargetedLivingTorch
  • TargetedFlashingBurst
  • TargetedManaBolt
  • TargetedFrostArmor
  • TargetedImpalingEruption

Monster Classes
Class Name Available Animations
AncientArtillery
  • Hit
  • Death
  • Attack
  • PushPull
  • PowerUp
  • RadialPush
  • RadialDamage
  • Mortar
BanditArcher
  • Hit
  • Death
  • Attack
  • PushPull
  • PowerUp
  • LayTrap
BanditCommander
  • Hit
  • Death
  • Attack
  • PowerUp
  • Summon
  • RangedAttack
  • TeleportAway
  • TeleportBack
BanditGuard
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • KnifeThrow
  • FishRadial
BlackImp
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RadialSpell
  • Heal
BoneRanger
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • HeavyAttack
  • LayTrap
CaptainOfTheGuard
  • Hit
  • Death
  • Attack
  • PushPull
  • HealAll
  • BuffAllies
  • RangedAttack
CaveBear
  • Hit
  • Death
  • Attack
  • PowerUo
  • PushPull
  • HeavyAttack
CityArcher
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • LayTrap
CityGuard
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • KnifeThrow
Cultist
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Heal
  • Summon
  • AttackVariant
  • DeathExplode
HighCultist
  • Hit
  • Death
  • Attack
  • PushPull
  • DeathExplode
  • RadialAttack
  • Heal
  • PowerUp
  • Infuse
  • Summon
DarkRider
  • Hit
  • Death
  • Attack
  • PowerUp
  • Summon
  • RangedAttack
  • TeleportAway
  • TeleportBack
DeepTerror
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summon
  • RangedCurse
  • Summoned
  • StraightAttack
  • RadialAttack
  • RangedAttack
EarthDemon
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RadialAttack
  • MultiRangedAttack
  • RangedAttack
  • RadialImmobilize
  • Summoned
ElderDrake
  • Hit
  • Death
  • Attack
  • TeleportAway
  • TeleportBack
  • RangedAttack
FlameDemon
  • Hit
  • Death
  • Attack
  • TeleportAway
  • TeleportBack
  • Summon
  • Breathe
  • RangedAttack
ForestImp
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summoned
  • RadialSpell
  • Heal
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
FrostDemon
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • IceSlam
  • RangedAttack
  • Heal
  • Summoned
GiantViper
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • JumpOutof
  • JumpInto
  • Jump
  • QuickAttack
  • Summoned
  • RadialAttack
HarrowerInfester
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Heal
  • Summoned
  • HeavyAttack
  • RangedAttack
  • AreaAttack
Hound
  • Hit
  • Death
  • Attack
  • PushPull
  • RadialHowl
InoxArcher
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • LayTrap
InoxBodyGuard
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Smash
  • RangedAttack
InoxShaman
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RadialCurse
  • RadialHeal
InoxGuard
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summoned
  • KnifeThrow
Jekserah
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summon
  • RadialAttack
  • RangedAttack
LivingCorpse
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RadialBurp
LivingSpirit
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Heal
  • RadialAttack
  • RadialAttackCurse
Lurker
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RadialAttack
  • AdjacentWoundAll
MercilessOverseer
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RangedAttack
  • Summon
NightDemon
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summoned
  • TurnInvisible
  • ThornAttack
  • ThornInstantAttack
Ooze
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summon
  • Summoned
  • LootHeal
  • PoisonAttack
  • RadialPush
PrimeDemon
  • Hit
  • Death
  • Attack
  • Summon
  • PushPull
  • RangedAttack
RendingDrake
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RangedAttack
  • Sumoned
  • QuickAttack
SavvasIceStorm
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RadialPush
  • AdjacentMajorSpellIce
  • RadialAttackAir
  • Summon
  • Heal
SavvasLavaflow
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summon
  • Heal
  • AdjacentMajorSpellEarthRadius
  • RadialAttackFire
  • RadialAttackEarthFire
  • AdjacentMajorSpellEarth
SightlessOverseer
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summon
  • MassiveArea1
  • MassiveArea2
Spitting Drake
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • SleepHit
  • SleepWakeUp
  • SleepDeath
  • StunAttack
  • HeavyAttack
StoneGolem
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summoned
  • RadialMelee
  • RangedAttack
  • PullBackAttack
SunDemon
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RangedAttack
  • Summoned
  • Heal
  • RadialAttack
TheBetrayer
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • CauseFear
  • MindControl
  • SummonSnakes
TheColorless
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • SummonNightDemon
  • SummonSunDemon
  • TurnInvisible
  • RangedAttack
TheGloom
  • Hit
  • Death
  • Attack
  • PushPull
  • TeleportAway
  • TeleportBack
  • RangedAttack
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
UndeadCommander
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RangedAttack
  • Drain
  • Summon
  • TeleportBack
  • TeleportAway
VermlingScout
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • Summoned
  • JumpInto
  • Jump
  • JumpOutof
  • RangedfAttack
  • Loot
VermlingShaman
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • RadialCurse
  • RadialHeal
  • Heal
WindDemon
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • TurnInvisible
  • Summoned
  • RadialPush
  • AreaAttackWind
  • Heal
WingedHorror
  • Hit
  • Death
  • Attack
  • PowerUp
  • PushPull
  • HatchEggs
  • RangedAttack
  • RadialAttack
Zaphyr
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull

Summon Classes
Class Name Available Animations
BattleBoar
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
Battlebot
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
BeastTyrantBear
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • PowerUp
  • ConeAttack
  • RadialAttack
  • Kill
  • Heal
  • Loot
  • Push
  • RadialRoar
  • JumpOutof
  • Jump
  • JumpInto
BlackUnicorn
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
GiantBat
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
GiantRat
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • PoisonAttack
GiantToad
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • PowerUp
  • RadialSpell
  • DeathAttack
  • Heal
HealingSprite
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • PowerUp
  • Heal
  • RadialHeal
  • RadialCurse
IronBear
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • RadialHowl
LavaGolem
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • PowerUp
LivingBomb
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • PowerUp
  • DeathAttack
  • Heal
  • RadialSpell
ManaSphere
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
Monolith
  • Hit
  • Death
  • Summoned
  • PushPull
NailSphere
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
RedFalcon
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
RockColossus
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
ShadowWolf
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • RadialHowl
Skeleton
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • SecondAttack
  • PowerUp
  • Heal
SlimeSpirit
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • Summon
  • RadialPush
  • LootHeal
  • PoisonAttack
SpiritBanner
  • Hit
  • Death
  • Summoned
  • PushPull
SteelConstruct
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • PowerUp
SpittingCobra
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • JumpOutof
  • Jump
  • JumpInto
  • QuickAttack
  • PowerUp
  • RadialAttack
  • RangedAttack
TatteredWolf
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • RadialHowl
Thornshooter
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • RangedCurse
  • Summon
  • PowerUp
  • StraightAtttack
  • RadialAttack
ViciousJackal
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • RadialHowl
VoidEater
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
  • QuickAttack
  • PowerUp
Warhawk
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull
WindTotem
  • Hit
  • Death
  • Attack
  • Summoned
  • PushPull

Localisations

Wherever there is text present in any YML parser, the localisation key may be used instead. To use a key, put it between $$ - for example $KEY$. Instead of having a fixed text in the game, one can now put this key (without $$) in the LangUpdate.csv in the LangUpdates folder within the mod and add text for each language. The in-game text will then be dynamically assigned depending on the user's settings.

Layout

This section details the parser properties available for the shared Layout parser. The Layout is used to determine the appearance of an ItemCard or AbilityCard. The Layout consists of rows and columns filled with text and icons. Columns and Rows cannot exist on the same level. The text can be modified using TextMesh Pro's Rich Text.

$LocKey$ is replaced by the value corresponding to the LocKey's key in the localisation sheet.

*Ability* is replaced by Ability's Amount.

@Ability@ is replaced by Ability's Enhancements.

Property Name Data Type Description
ColumnSpacing Integer

Determines the space between columns.

ColumnWidths String

Determines the width of each of the columns.

The following format is valid:

"COL_1_WIDTH,COL_2_WIDTH"

Column Mapping

The number of columns depends on the number of entries within ColumnWidths.

That number must be exactly the same.

The columns may consist of text, icons or other Layout properties. They may be left empty as well.

Row String

The most basic Layout element.

It is a single String containing text to be displayed in a single row on the card.

The text can be modified using TextMesh Pro's Rich Text.

Active Mapping

Should be used to structure Active Abilities.

The mapping has 7 properties:

  • Ability - List of Strings, should reference any linked abilities
  • Layout - Mapping, the actual Layout, can consist of any Layout properties
  • LayoutAlt - Mapping, the alternative Layout, can consist of any Layout properties
  • ListLayout - List of Strings, each String represents a single row.
  • ListLayoutAlt - List of Strings, alternative ListLayout
  • Icon/Icons - List of Strings, references icons' names that should be used in the Layout
  • HideTracker - Boolean, determines if the XPTracker is hidden
Summon Mapping

Should be used to structure Summon Abilities.

Adds a table with the Summon's stats.

The mapping has 3 properties:

  • Ability - String, references name of the Summon Ability.
  • SummonName - String, name of the summoned Monster
  • SpecialText - String, text displayed in the last column in the table
Augment Mapping

Should be used to structure Augment Abilities.

The mapping has 5 properties:

  • ParentAbility - String, references name of the Augment Ability
  • ActiveBonusLayout - String, text displayed on the darkened part of the card
  • AugmentAbilityLayout - Mapping, the actual Layout of Augment Ability of the parent, can consist of any Layout properties
  • NormalContentLayout - Mapping, the Layout of any Abilities that are part of the parent Ability but are not Augment, can consist of any Layout properties
  • AugmentIcon - String, represents the icon shown on the Layout of Augment Ability
Doom Mapping

Should be used to structure Augment Abilities.

The mapping has 5 properties:

  • ParentAbility - String, references name of the Doom Ability
  • ActiveBonusLayout - String, text displayed on the darkened part of the card
  • DoomAbilityLayout - Mapping, the actual Layout of Doom Ability of the parent, can consist of any Layout properties
  • ReminderTextOverride - String, text displayed at the top of Doom Ability
  • DoomIcon - String, represents the icon shown on the Layout of Doom Ability
Song Mapping

Should be used to structure Song Abilities.

The mapping has 4 properties:

  • ParentAbility - String, references name of the Song Ability
  • ActiveBonusLayout - String, text displayed on the darkened part of the card
  • SongAbilityLayout - Mapping, the actual Layout of the Song Ability of the parent, can consist of any Layout properties
  • SongIcon - String, represents the icon shown on the Layout of Song Ability
Consume Mapping

Should be used to structure Consume Abilities.

The mapping has 2 properties:

  • Name - String, references the name of the Consume Ability
  • Text - String, should explain what the Ability does in case the element is consumed
Infuse String

Displays a corresponding elemental infusion icon.

The following values are valid:

  • Fire
  • Ice
  • Earth
  • Air
  • Dark
  • Light
Duration String

Displays a corresponding duration icon.

The following values are valid:

  • Ability
  • Round
  • Persistent
  • Summon
  • Turn
XP Integer

Displays XP icon along with specified XP amount.

XPTracker String

References name of an Ability that uses an XPTracker.

Level Editor

The Level Editor is a tool embedded in the game client with which one is able to create and design custom scenarios. These can be played singleplayer or with friends online, shared to the Steam Workshop, or bundled in with modded Campaigns.

Designed primarily for use by the devs, it can at times rely on a cursory understanding of the game code - but that said, once some of the more complex principles are de-mystified (and rough edges accepted) it can become a very powerful tool!

Getting Started

To access the Level Editor, one can navigate via the Main Menu using the "Level Editor" button. This will take you to a screen where one decides on which Ruleset to use.

Having chosen a Ruleset, you now have access to the custom Level browser where a list of your created levels are shown and available for editing. This should all be self-explanatory really, but the "Use Default Levels folder" changes the saving behaviour of levels somewhat.

  • Using the default level folder

    If the toggle is on, the list shown will populate from files found in this location. Newly created levels will be saved here too:

    :\Users\*USERNAME*\AppData\LocalLow\FlamingFowlStudios\Gloomhaven\LevelEditor\LevelEditorScenarios

    While this toggle is on, each custom level will be saved into its only folder with accompanying meta data that is essential for uploading to the Steam Workshop.

  • Using a custom level folder

    If the toggle is off, you are able to enter your own file path into the provided text field which will be verified and saved for future use by pressing the "Set custom levels folder" button.

    While using a custom folder, the level is not saved with any of the accompanying meta data and cannot be uploaded to the Steam Workshop unless manually copied into the default folder and resaved with the default levels folder toggle on.

Want to create a new level? Press the "Create new Level" button to be taken to the Level Editor.

Laying out the rooms

The first step in the level creation is the scenario's layout. On the right, one can see available room shapes and letters associated with them. Select one of the rooms from the list on the left and click the '+' button, which will show a preview of the room. Move it and place it in an appropriate spot. Right click will undo the action.

The room can always be deleted later by selecting it from the list under the creation. In that menu, the room's visibility and name can be changed as well. On the right, biomes and themes can be selected. Click 'Complete Room Placement', when all of the rooms are ready.

The next step is to place doors. Select one of the doors from the list and click the '+' button. It will be possible to rotate the door after it is placed. The only way to rotate the doors is through the vertices of the tile it is placed on, it cannot cut the edges of the hex. Click the 'Complete Door Placement' button when all rooms are connected.

Basic Level Data

  • Base Data

    A name can be given to the scenario in this section.

    Party spawn type list determines how mercenaries will be chosen to play this level. LoadAdventureParty will let the player choose from one of the existing Guildmaster or Campaign parties. PresetSpawnAtEntrance will let the player select starting location for mercenaries specified in the scenario and PresetSpawnSpecificLocations will make all mercenaries start in a set tile. LoadAdventureParty requires at least one existing party to load the level, while the latter two require at least one character inside the level.

    If LoadAdventureParty is selected, it is possible to adjust monsters' level and hit points to the party's level.

    The level can be saved and played from this tab.

  • Spawn Data

    Shuffle settings can be selected in this tab. If enabled attack modifiers decks (P - Players, M - Monsters) and ability card decks (Monsters only) will be shuffled.

  • Start Tiles

    Depending on how the party is spawned, starting tiles may be necessary to set. Click the 'Select Tile' button and pick one of the tiles to add it to the list. Repeat, until all starting tiles are chosen. They can always be deleted in the menu on the right.

  • Map Data

    Optionally, an icon for the scenario can be selected in this tab. Click the '+' button, select an icon from the list and a preview will be shown.

The Characters Tab

Mercenaries available in the scenario can be specified and adjusted here. Click the '+' button and all existing characters will appear. Select one of them and place it on one of the tiles.

By selecting one of the characters on the left, one can modify it. In the menu on the left, the character's level and health can be specified. It can also be deleted or moved there.

In the Item, Ability Deck and Attack Modifiers tab, specific cards can be picked for the particular scenario. Pick them from the list and click the '+' button. They can always be deleted by clicking the '-' button. Ability Card and Attack Modifier availability can be specified as well. For example, a character may start with some of the cards discarded.

Remember

If LoadAdventureParty is selected, do not add any characters to the scenario. Otherwise, there has to be at least one character in place.

The Monsters Tab

Similarly to characters, click '+' to add an enemy and select one from the list.

In the menu on the left, one can specify their level and health. Some enemies may not be revealed. If that is the case uncheck the checkbox. Monsters do not need to be enemies. Tick 'Ally' or 'Neutral' to specify that. Depending on the size of the party, there may be a disparity in the number of enemies. In the size configuration, select if a monster appears as normal, is hidden or is an elite for each of the party sizes.

Ability Cards and Attack Modifiers can be removed from the monster's deck by clicking '+' and '-' and selecting a card. Any changes to Attack Modifiers apply to ALL enemies.

The monster can be set to focus a specific character or an object. In that case, select Override Type from the list in AI focus override list and pick one of the actors or props by looking up its unique key.

Monsters' statistics can be further modified by the number of mercenaries in the scenario or by the scenario's level. Click '+' button in the 'BasedOnX' Entries list, choose one of the stats and how it will be overridden.

The Spawners Tab

Click the '+' button to add a spawner. Spawners will spawn enemies continuously at a specified point in time. That point can be the start of the round, end of the round or both of them.

They become active either at the start of the scenario or once the door gets opened. A specific round can be set to start spawning as well.

If the loop pattern is switched off, the spawner will activate only once.

Spawn Round Interval determines the frequency of spawning, depending on the size of the party.

On the right, specific monsters can be set to spawn from the spawn, depending on the size of the party. The spawner may optionally not spawn anything, or spawn a bear trap.

The Objects Tab

Objects share most of the properties with monsters. Click the '+' button to add an object and select one from the list.

In the menu on the left, one can specify their level and health. Some objects may not be revealed. If that is the case uncheck the checkbox. Objects do not need to be enemies. Tick 'Ally' or 'Neutral' to specify that.

Ability Cards and Attack Modifiers can be removed from the object's deck by clicking '+' and '-' and selecting a card. Any changes to Attack Modifiers apply to ALL enemies.

The object can be set to focus a specific character or an object. In that case, select Override Type from the list in the AI focus override list and pick one of the actors or props by looking up its unique key.

Objects' statistics can be further modified by the number of mercenaries in the scenario or by the scenario's level. Click the '+' button in the 'BasedOnX' Entries list, choose one of the stats and how it will be overridden.

The Props Tab

Click the '+' button to add props into the scenario and select one from the list.

Some of the props can be looted. If one wants them to be looted only by using an ability card, tick Ignore End-Of-Turn Looting.

To make props attackable, tick Prop Has Health. Health may be specified for each of the party sizes. Custom Loc Key lets one choose a unique name for the prop that will be looked up from the localisation sheet. Its actor type determines who is able to attack it. On Death Behaviour specifies what the prop does when its hit points are reduced to 0. It can either activate or be destroyed. An icon can be selected for the prop from the list. Health can optionally be based on scenario level and mercenary count.

If the prop does not have health, it normally can be destroyed or moved with ability or item cards. To disallow that, tick the appropriate box.

Props can be deactivated for specific party sizes.

Their appearance can be modified by selecting a specific biome and theme, that will override the one of the scenario.

Prop Description
Gold Pile

Generic gold pile. Looting adds gold, depending on scenario level.

Chest
Goal Chest

Looting a chest adds a specified amount of gold and XP. A particular treasure table can be linked to the chest. The chest can contain items that can be added from the list.

Trap

Trap deals damage depending on the scenario level. It can also be changed to a flat amount. The trap may also apply conditions that can be selected from the list.

Obstacles

Blocks movement.

PreassurePlate

Preassure Plates can be linked to doors. It will be possible to open the doors only after all linked plates are pressed.

Terrain Hot Coals
Terrain Thorns

Hazardous terrain that does damage equal to half of the trap damage on that scenario level.

Terrain Water
Terrain Rubble

Difficult terrain that halves the movement speed.

The Element Infusions Tab

If one wants the scenario to start with an infused element, it is possible to achieve in the Element Infusions tab.

Select one of the elements and click the '+' button. The chosen element is now strong. Clicking '-' makes it waning and then inert.

The Apparance Tab

The visuals of the scenario can be changed at three levels. The lowest is the Scenario level, which can be edited in the Apparance tab. Room Level by default inherits from Scenario level. Any changes made on the Room level override the Scenario level. It can be edited in the Room Editing tab and set for each room separately. Prop level inherits from Room level. Any changes made on Prop level override both Room and Scenario levels. They can be set for each prop separately in the Props tab.

Room and Prop level can be reset to 'Inherit' by clicking the button on the bottom left. The look can be further changed by modifying the seed using current settings. The seed can be randomised by clicking the button.

The Scenario Modifiers Tab

Scenario Modifiers change the basic rules of the scenario. They are activated in a specific round or at the beginning of the scenario. They apply a specific change to included actors or set the element infusions. Localisations may be added. Setting Event Identifier exposes the modifier in the Events tab for use.

In the Objective Filter section, one can specify which actors the modifier will affect, for example only players or only Living Bones.

Modifier Type Description
Set Elements

Ticking any elements in the Element States section will set the element when the modifier triggers.

Trigger Ability

When the modifier triggers, all included actors perform a specified ability, for example, Shield 1.

Add Conditions To Abilities

In the Conditions section, a set of conditions can be chosen to be applied when selected actors perform abilities.

Apply Condition To Actor

In the Conditions section, a set of conditions can be chosen to be applied to selected actors.

Apply Active Bonus To Actor

After the modifier triggers, an ability is applied to selected actors as an active ability.

Add Modifier Cards

Adds specific Attack Modifier cards to decks of all selected actors.

The Objectives Tab

Completing either win or lose objectives ends the scenario. They can be set in the Objectives tab.

Click the '+' button next to either Win Objectives or Lose Objectives to add one. Select one of the objective types from the list. Some objectives like ReachRound or ActorsEscaped require further specifications - in that case, round number and escape tiles respectively.

Objectives can be exposed to the Events menu by setting an Event Identifier. Some events may not be active from start, which requires activation via event. Objectives may be hidden or optional.

If the objective includes any actors, they can be further filtered in the Objective Filter section.

The Events Tab

Events change the state of the game when they occur. Their triggers can be much deeper than those of Scenario Modifiers. There are two types of Event Triggers - SEvents (Scenario Events) and UIEvents (User Interface Events). SEvents trigger when something happens directly inside of the game, for example, an enemy dies. UIEvents, on the other hand, are connected to the user interface and trigger when the player interacts with it, for example when an actor is selected.

Click the '+' button to add a new event. Choose one of the event types from the list. Decide if an event is a one-off or will be repeated. If that is the case tick the box. Depending on the selected event, additional information may be required.

Choose between SEvent and UIEvent and select one of the triggers from the list. If the trigger concerns an actor, a specific one can be selected. Some events may require messages to be shown. Put the name of those messages in the Required Played Messages text box. If the event must be triggered before a message is shown, put the name of that message in the Required NOT Played Messages text box.

The Messages Tab

If one wants to inform the player what is happening in the scenario, messages come in handy. Click the '+' button next to Messages in Scene to add a message.

A unique name could be used to reference the message in the Events tab later. Select the Message Type, which will determine what the message looks like. Title Key refers to a key in the localisation sheet. If the message should not be displayed straight after the trigger occurs, choose a delay. The message can pause the game until it is dismissed.

Pages represent text that will be shown to the player. If there is more than one, the player will be able to scroll through them. The actual displayed text must come from the localisation sheet with a key referenced in the Page Text Key text box. The Check Locale button can be used to check if the key exists within the sheet and what it represents. Optionally, a page can display an image which path should be referenced in the Image Path text box.

In the Interact Limiting section, one can specify what the user can do while the message is displayed until it is dismissed.

Display Triggers define an event trigger that displays the message. When the Exit Trigger occurs, the message is dismissed. Optionally, this can be achieved through Dismiss Button.

Camera Profile may force the camera to look at a specific angle. If it is desirable, tick Should Force Camera. The easiest way to set the camera view is to move it within the editor and click Get From Current button. Optionally, all values can be typed in manually.

Examples

SampleDungeon

FAQs

Modding FAQs

It it possible to use my own models/animations/sound?

Is is not currently supported or planned.

Can I change X through mods? It's not in any of the parsers.

Modding only supports creating/modifying/removing YML files as well as changing localisation. If it is not in the documentation, there is a good chance it is not possible. Anything that would require additional code is unlikely.

My files don't work, what should I do?

YML Parsers are very sensitive to line spacing. Consider installing a good text editor like Sublime, Notepad++ or VS Code. Avoid Notepad! If the issue does not involve spacing, you can ask on the modding channel on our Discord!

I downloaded a mod from Workshop and it doesn't work, what can I do?

Some of the mods on the Workshop may be outdated. Mods from Early Access are still available there, so look at their last update. There is a chance they were created using the old Modding System and are no longer supported.