Settlers

Yaml paths:

/gameConfigs/TBS/Original/Settlers.yaml
/gameConfigs/RTS/Original/Settlers.yaml
../../_images/settlersRTS.gif

Description

Is the most complex combat TBS and RTS game that Stratega has until now. This game has two different technology trees, one focused in enabling the user to spawn more entities and the second one to increase the resource gathering. Research is the key to win the game, either by spawning a spy and sabotage the enemy or building a wonder. Try to dont starve, each entity consume food!!

YAML

GameConfig:
    Type: TBS
    ActionTimer: 10s
    RoundLimit: 100

Agents:
    - DoNothingAgent
    - HumanAgent

GameRenderer:
    Resolution:
        Width: 800
        Height: 600
    Default Assets:
        FogOfWar: ../../../assets/Tiles/notVisible.png
    GridIsIsometric: true
    TileSpriteOrigin:
        Width: 128
        Height: 112
    EntitySpriteOrigin:
        Width: 256
        Height: 360
    TileSpriteSize:
        Width: 256
        Height: 144
    EntitySpriteSize:
        Width: 512
        Height: 512
    #Optional:
    #Font: ../../assets/arial.ttf
    #OutlineShader: ../../assets/OutLine.frag

Player:
    Actions: [Research]
    CanSpawn: Buildings
    Parameters:
        Food: [0,100,1000]
        Gold: [0,0,2000]
        Iron: [0,50,1000]
        Wood: [0,100,1000]
        Bricks: [0,50,1000]
        Research: [0,20,1000]

Tiles:
    Plain:
        Sprite: ../../../assets/Tiles/plain.png
        Symbol: .
        IsWalkable: true
        DefaultTile: true
    Water:
        Sprite: ../../../assets/Tiles/water.png
        Symbol: W
        IsWalkable: false
    Mountain:
        Sprite: ../../../assets/Tiles/rock.png
        Symbol: M
        IsWalkable: false
        BlocksSight: true
    Forest:
        Sprite: ../../assets/Tiles/forest.png
        Symbol: F
        IsWalkable: true
    Ore:
        Sprite: ../../../assets/Tiles/ore.png
        Symbol: O
        IsWalkable: true
    Animals:
        Sprite: ../../../assets/Tiles/animals.png
        Symbol: A
        IsWalkable: true
    Clay:
        Sprite: ../../../assets/Tiles/clay.png
        Symbol: C
        IsWalkable: true
    Gold:
        Sprite: ../../../assets/Tiles/gold.png
        Symbol: G
        IsWalkable: true

Entities:
    City:
        Sprite: ../../../assets/Entities/castle.png
        Symbol: c
        LineOfSightRange: 5
        Actions: [Spawn]
        CanSpawn: [Villager, Builder, Spy, Architect]
        Cost:
        Parameters:
            Health: 80
            Range: 6

    Wonder:
        Sprite: ../../../assets/Entities/wonder.png
        LineOfSightRange: 5
        Actions: []
        RequiredTechnology: Wonder
        Cost:
            Wood: 200
            Iron: 200
            Food: 50
            Bricks: 200
        Parameters:
            Health: 150
            Range: 6

    University:
        Sprite: ../../../assets/Entities/university.png
        LineOfSightRange: 5
        RequiredTechnology: Education
        Actions: []
        Cost:
            Food: 5
            Iron: 20
            Wood: 20
            Bricks: 30
        Parameters:
            Health: 100
            Range: 6

    Outpost:
        Sprite: ../../../assets/Entities/tower.png
        LineOfSightRange: 8
        RequiredTechnology: BasicStructure
        Actions: []
        Cost:
            Food: 5
            Iron: 10
            Wood: 10
            Bricks: 20
        Parameters:
            Health: 20
            Range: 7
            Time: 2

    GuardTower:
        Sprite: ../../../assets/Entities/guardTower.png
        LineOfSightRange: 4
        RequiredTechnology: GuardTower
        Actions: [Attack]
        Cost:
            Food: 5
            Iron: 20
            Wood: 30
            Bricks: 30
        Parameters:
            Health: 40
            Range: 6
            Time: 2

    Farm:
        Sprite: ../../../assets/Entities/farm.png
        LineOfSightRange: 3
        Cost:
            Iron: 15
            Wood: 15
            Bricks: 15
        Parameters:
            Health: 20
            Range: 6

    Masonry:
        Sprite: ../../../assets/Entities/masonry.png
        LineOfSightRange: 3
        Cost:
            Food: 5
            Iron: 15
            Wood: 15
            Bricks: 5
        Parameters:
            Health: 40
            Range: 6

    Saw:
        Sprite: ../../../assets/Entities/saw.png
        LineOfSightRange: 3
        Cost:
            Food: 5
            Iron: 15
            Wood: 10
            Bricks: 15
        Parameters:
            Health: 40
            Range: 6

    IronMine:
        Sprite: ../../../assets/Entities/mine.png
        LineOfSightRange: 3
        Cost:
            Food: 5
            Iron: 10
            Wood: 20
            Bricks: 10
        Parameters:
            Health: 40
            Range: 6

    GoldMine:
        Sprite: ../../../assets/Entities/mine2.png
        LineOfSightRange: 3
        Cost:
            Food: 20
            Iron: 20
            Wood: 20
            Bricks: 20
        Parameters:
            Health: 40
            Range: 6

    Villager:
        Sprite: ../../../assets/Entities/unit_5.png
        LineOfSightRange: 3
        Actions: [Move, CutWood, MineIron, MineGold, FarmLivestock, MakeBrick]
        Cost:
            Food: 5
        Parameters:
            Speed: 1
            Range: 3
            WoodCutting: [0,5,20]
            BrickMaking: [0,5,20]
            LivestockFarming: [0,5,20]
            IronMining: [0,5,20]
            GoldMining: [0,5,20]

    Builder:
        Sprite: ../../../assets/Entities/unit_7.png
        LineOfSightRange: 3
        CanSpawn: [Farm, GoldMine, IronMine, Saw, Masonry, University, Outpost, GuardTower]
        Actions: [Move, BuildFarm, BuildGoldMine, BuildIronMine, BuildSaw, BuildMansory, BuildUniversity, BuildGuardTower, BuildOutpost]
        Cost:
            Food: 8
        Parameters:
            Speed: 1
            Range: 6

    Spy:
        Sprite: ../../../assets/Entities/unit_6.png
        LineOfSightRange: 5
        Actions: [Move, Sabotage]
        RequiredTechnology: Sabotage
        Cost:
            Food: 10
        Parameters:
            Health: 20
            Speed: 1
            Range: 6

    Architect:
        Sprite: ../../../assets/Entities/unit_8.png
        LineOfSightRange: 3
        RequiredTechnology: Architecture
        CanSpawn: [Wonder]
        Actions: [Move, BuildWonder]
        Cost:
            Food: 15
        Parameters:
            Speed: 1
            Range: 6

EntityGroups:
    Units: [Villager, Builder, Spy, Architect]
    Buildings: [City, Farm, IronMine, GoldMine, Outpost, GuardTower, University, Wonder]
    Attackable: [Farm, IronMine, GoldMine, Outpost, GuardTower, University, Wonder]

Actions:
    # Attack Actions
    Sabotage:
        Type: EntityAction
        Cooldown: 100
        Targets:
            Target:
                Type: Entity
                ValidTargets: Attackable
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: AllPositions
                Conditions:
                    - "DifferentPlayer(Source, Target)"
                    - "InRange(Source, Target, Source.Range)"
        Effects:
            - "AttackProbability(Target.Health, 1000, 50)"
            - "Remove(Source)"

    Attack:
        Type: EntityAction
        Cooldown: 100
        Targets:
            Target:
                Type: Entity
                ValidTargets: Spy
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: AllPositions
                Conditions:
                    - "DifferentPlayer(Source, Target)"
                    - "InRange(Source, Target, Source.Range)"
        Effects:
            - "AttackProbability(Target.Health, 1000, 20)"

    # Move Actions
    Move:
        Type: EntityAction
        Cooldown: 1
        Targets:
            Target:
                Type: Position
                SamplingMethod:
                Type: Dijkstra
                Options:
                    SearchSize: 4
                    AllowDiagonals: false
                Conditions:
                    - "IsWalkable(Target)"
                    - "IsNotOccupiedGrid(Target, Source)"
        Effects:
            - "Move(Source, Target)"

    MineIron:
        Type: EntityAction
        Cooldown: 1
        Targets:
            Target:
                Type: Entity
                ValidTargets: IronMine
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Circle
                        Size: 3
        Effects:
            - "ModifyResource(Source.Player.Iron, Source.IronMining)"

    MineGold:
        Type: EntityAction
        Cooldown: 1
        Targets:
            Target:
                Type: Entity
                ValidTargets: GoldMine
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Circle
                        Size: 3
        Effects:
            - "ModifyResource(Source.Player.Gold, Source.GoldMining)"

    FarmLivestock:
        Type: EntityAction
        Cooldown: 1
        Targets:
            Target:
                Type: Entity
                ValidTargets: Farm
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Circle
                        Size: 3
        Effects:
            - "ModifyResource(Source.Player.Food, Source.LivestockFarming)"

    CutWood:
        Type: EntityAction
        Cooldown: 1
        Targets:
            Target:
                Type: Entity
                ValidTargets: Saw
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Circle
                        Size: 3
        Effects:
            - "ModifyResource(Source.Player.Wood, Source.WoodCutting)"

    MakeBrick:
        Type: EntityAction
        Cooldown: 1
        Targets:
            Target:
                Type: Entity
                ValidTargets: Masonry
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Circle
                        Size: 3
        Effects:
            - "ModifyResource(Source.Player.Bricks, Source.BrickMaking)"

    #Spawn
    Spawn:
        Type: EntityAction
        Cooldown: 0
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: Units
                Conditions:
                    - "CanSpawn(Source, EntityTypeTarget)"
                    - "CanAfford(Source.Player, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"

        Effects:
            - "SpawnEntity(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildIronMine:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: IronMine
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
                    - "IsTileType(TargetPosition, Ore)"
        Effects:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildGoldMine:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: GoldMine
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
                    - "IsTileType(TargetPosition, Gold)"
        Effects:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildFarm:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: Farm
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
                    - "IsTileType(TargetPosition,Animals)"
        Effects:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildUniversity:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: University
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
                    - "IsTileType(TargetPosition, Plain)"
        Effects:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildMansory:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: Masonry
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
                    - "IsTileType(TargetPosition, Clay)"
        Effects:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildSaw:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: Saw
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
                    - "IsTileType(TargetPosition, Forest)"
        Effects:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildOutpost:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: Outpost
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
        Effects:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildGuardTower:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: GuardTower
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
        Effects:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"
            - "PayCost(Source.Player, EntityTypeTarget)"

    BuildWonder:
        Type: EntityAction
        Cooldown: 1
        Targets:
            EntityTypeTarget:
                Type: EntityType
                ValidTargets: Wonder
                Conditions:
                    - "CanAfford(Source.Player, EntityTypeTarget)"
                    - "CanSpawn(Source, EntityTypeTarget)"

            TargetPosition:
                Type: Position
                SamplingMethod:
                    Type: Neighbours
                    Options:
                        Shape: Square
                        Size: 4
                Conditions:
                    - "IsWalkable(TargetPosition)"
                    - "IsNotOccupiedGrid(TargetPosition, Source)"
        TriggerComplete:
            - "HasElapsedTick(2)"
        OnStart:
            - "PayCost(Source.Player, EntityTypeTarget)"
        OnComplete:
            - "SpawnEntityGrid(Source, EntityTypeTarget, TargetPosition)"

    #Research
    Research:
        Type: PlayerAction
        Cooldown: 0
        Targets:
            Target:
                Type: Technology
                ValidTargets: All
                Conditions:
                    - "CanResearch(Source, Target)"
                    - "CanAfford(Source, Target)"
        TriggerComplete:
            - "HasElapsedTick(Target.Time)"
        OnStart:
            - "PayCost(Source, Target)"
        OnComplete:
            - "Research(Source, Target)"

TechnologyTrees:
    TechnologyTree:
        Education:
            Description: Enables advance research
            Cost:
                Research: 5
            Time: 2
        Chemistry:
            Description: Enables sabotage technology tree
            Requirements: [Education]
            Cost:
                Research: 10
            Time: 5
        Architecture:
            Description: Enables architect spawn
            Requirements: [Education]
            Cost:
                Research: 15
            Time: 5
        BasicStructure:
            Description: Enable outpost
            Requirements: [Education]
            Cost:
                Research: 15
            Time: 5
        SiegeEngineers:
            Description:  Enables sabotage technology tree
            Requirements: [Architecture]
            Cost:
                Research: 20
            Time: 6
        Sabotage:
            Description:  Enables sabotage
            Requirements: [SiegeEngineers, Chemistry]
            Cost:
                Research: 20
            Time: 7
        GuardTower:
            Description:  Enables guard tower spawn
            Requirements: [Architecture, BasicStructure]
            Cost:
                Research: 30
            Time: 6
        Wonder:
            Description:  Enables wonder building
            Requirements: [Architecture, BasicStructure]
            Cost:
                Research: 100
            Time: 4

    ResourceTree:
        BetterTools:
            Description: Enables resource technologies
            Cost:
                Research: 5
            Time: 2
        HeavyPlow:
            Description: Increase food production
            Requirements: [BetterTools]
            Cost:
                Research: 20
            Time: 4
        BowSaw:
            Description: Increase wood production
            Requirements: [BetterTools]
            Cost:
                Research: 20
            Time: 4
        OreShaftMining:
            Description: Increase ore production
            Requirements: [BetterTools]
            Cost:
                Research: 25
            Time: 4
        ClayShaftMining:
            Description:  Increase clay production
            Requirements: [BetterTools]
            Cost:
                Research: 25
            Time: 4
        CropRotation:
            Description:  Increase food production
            Requirements: [HeavyPlow]
            Cost:
                Research: 30
            Time: 6
        TwoManSaw:
            Description:  Enables guard tower spawn
            Requirements: [BowSaw]
            Cost:
                Research: 30
            Time: 6


Board:
    GenerationType: Manual
    Layout: |-
        M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  F  F  F  F  F  F  M
        M  .  .  c1 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  F  F  F  F  M
        M  .  .  .  .  .  .  .  .  .  .  A  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  A  A  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  .  .  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  W  .  .  .  M
        M  .  F  F  F  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  .  .  .  M
        M  .  F  F  F  .  .  .  .  .  C  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  .  .  .  .  .  M
        M  .  F  F  F  .  .  .  .  .  C  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  .  .  .  .  M
        M  .  .  .  .  .  .  A  .  .  C  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  .  .  .  M
        M  .  .  A  .  .  .  .  .  .  C  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  C  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  W  W  W  .  .  .  .  .  .  .  .  .  .  W  W  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  W  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  M
        W  W  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  O  M
        W  W  W  W  .  .  .  .  .  .  .  .  .  W  W  W  W  W  W  W  W  .  .  .  .  .  .  .  .  .  .  O  O  O  M
        W  W  W  W  W  .  .  .  .  .  .  .  .  .  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  M  M  M  M  M
        M  M  M  W  W  .  .  .  .  .  .  .  .  .  .  .  .  G  G  .  .  .  .  .  .  .  .  .  .  .  W  W  M  M  M
        M  M  M  W  W  W  .  .  .  .  .  .  .  .  .  .  .  G  G  .  .  .  .  .  .  .  .  .  .  W  W  W  M  M  M
        M  M  M  M  M  O  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  .  .  .  .  .  .  .  .  W  W  M  M  M
        M  M  M  M  M  O  .  .  .  .  .  .  .  W  W  W  W  W  W  W  W  W  W  .  .  .  .  .  .  .  W  W  W  W  W
        M  M  M  M  M  O  .  .  .  .  .  .  .  .  .  W  W  W  W  W  W  W  W  .  .  .  .  .  .  .  .  W  W  W  W
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  W  W  W  W  W  .  .  .  .  .  .  .  .  .  W  W
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  W  W  W  W  W  .  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  W  W  .  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  W  C  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  C  .  .  .  .  .  .  .  .  M
        M  .  .  .  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  C  .  .  .  .  .  .  .  .  M
        M  .  .  .  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  W  W  C  .  .  .  .  .  .  .  .  M
        M  .  .  .  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  W  C  .  .  .  .  .  .  .  .  M
        M  .  .  .  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  A  .  .  M
        M  .  .  .  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  A  A  .  .  M
        M  .  .  .  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  W  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  A  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  W  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  W  W  W  W  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  M
        M  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  A  F  F  F  .  .  .  .  .  .  M
        M  F  F  F  F  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  F  F  F  .  .  .  .  .  .  M
        M  F  F  F  F  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  F  F  F  .  .  .  .  c0 .  M
        M  F  F  F  F  F  F  F  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  M
        M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M  M

ForwardModel:
    WinConditions: #If true: Player -> win game
        UnitAlive:
        - "HasEntity(Source, Wonder)"

    LoseConditions: #If true: Player -> cant play
        HasResource:
        - "ResourceLowerEqual(Source.Food, 0)"

    Trigger:
#Global resource compsumption
        - OnTick:
            Type: Entity
            ValidTargets: Buildings
            Conditions:
                - "IsPlayerEntity(Source)"
            Effects:
                - "ModifyResource(Source.Player.Food, -1)"
        - OnTick:
            Type: Entity
            ValidTargets: Units
            Conditions:
                - "IsPlayerEntity(Source)"
            Effects:
                - "ModifyResource(Source.Player.Food, -1)"

        - OnTick:
            Type: Entity
            ValidTargets: University
            Conditions:
                - "IsPlayerEntity(Source)"
            Effects:
                - "ModifyResource(Source.Player.Research, +2)"
    #Upgrade villagers resuorce collection
        #Food
        - OnTick:
            Type: Entity
            ValidTargets: Villager
            Conditions:
                - "IsPlayerEntity(Source)"
                - "HasResearched(Source.Player, HeavyPlow)"
            Effects:
                - "ChangeResource(Source.LivestockFarming, 10)"

        - OnTick:
            Type: Entity
            ValidTargets: Villager
            Conditions:
                - "IsPlayerEntity(Source)"
                - "HasResearched(Source.Player, CropRotation)"
            Effects:
                - "ChangeResource(Source.LivestockFarming, 15)"
        #Wood
        - OnTick:
            Type: Entity
            ValidTargets: Villager
            Conditions:
                - "IsPlayerEntity(Source)"
                - "HasResearched(Source.Player, BowSaw)"
            Effects:
                - "ChangeResource(Source.WoodCutting, 10)"

        - OnTick:
            Type: Entity
            ValidTargets: Villager
            Conditions:
                - "IsPlayerEntity(Source)"
                - "HasResearched(Source.Player, TwoManSaw)"
            Effects:
                - "ChangeResource(Source.WoodCutting, 15)"
        #Ore
        - OnTick:
            Type: Entity
            ValidTargets: Villager
            Conditions:
                - "IsPlayerEntity(Source)"
                - "HasResearched(Source.Player, OreShaftMining)"
            Effects:
                - "ChangeResource(Source.IronMining, 12)"
        #Clay
        - OnTick:
            Type: Entity
            ValidTargets: Villager
            Conditions:
                - "IsPlayerEntity(Source)"
                - "HasResearched(Source.Player, ClayShaftMining)"
            Effects:
                - "ChangeResource(Source.BrickMaking, 12)"

#Action categories
GameDescription:
    Type: CombatGame
    Actions:
        Move: [Move]
        Research: [Research]
        Gather: [MineIron, MineGold, FarmLivestock, CutWood, MakeBrick]
        Spawn: [Spawn, BuildIronMine, BuildGoldMine, BuildFarm, BuildUniversity, BuildMansory, BuildSaw, BuildOutpost, BuildGuardTower, BuildWonder]
        Attack: [Sabotage, Attack]
    Entities:
        Base: [City]
        Building: [City, Farm, IronMine, GoldMine, Outpost, GuardTower, University, Wonder]
        Spawner: [City, Builder, Architect]
        Unit: [Spy, Villager, Builder, Architect]
        Fighter: [Spy]
        NoFighter: [Villager, Builder, Architect]
        Melee: [Spy]