public static async Task ActAsync(TargetSpaceCtx ctx)
    {
        // 6 damage.
        await ctx.DamageInvaders(6);

        // Add 2 badlands/strife
        var addBadlandsOrStrife = Cmd.Pick1("Add badlands/strife", Cmd.AddBadlands(1), Cmd.AddStrife(1));
        await addBadlandsOrStrife.Repeat(2).Execute(ctx);

        // and 1 blight.
        await ctx.AddBlight(1);

        await TakeActionInUpToNLands(ctx
                                     // In up to 3 adjacent lands with blight
                                     , 3, ctx.Adjacent.Where(s => ctx.Target(s).HasBlight)
                                     // add 1 badland/strife.
                                     , addBadlandsOrStrife
                                     );

        // if you have 3 fire 3 water:
        if (await ctx.YouHave("3 fire,3 water"))
        {
            await TakeActionInUpToNLands(ctx
                                         // in up to 3 adjacent lands,
                                         , 3, ctx.Adjacent
                                         // 1 damage to each invader.
                                         , new SpaceAction("1 damage to each invader", ctx => ctx.DamageEachInvader(1))
                                         );
        }
    }
예제 #2
0
    static public async Task ActAsync(TargetSpaceCtx ctx)
    {
        // 6 fear
        ctx.AddFear(6);

        // 20 damage.
        await ctx.DamageInvaders(20);

        // Destroy all dahan and beast.
        await DestroyDahanAndBeasts(ctx);

        // Add 1 blight
        await ctx.AddBlight(1);

        // if you have 4 fire, 3 earth:
        if (await ctx.YouHave("4 fire,3 earth"))
        {
            // Destroy all invaders.
            await ctx.Invaders.DestroyAny(int.MaxValue, Invader.City, Invader.Town, Invader.Explorer);

            // Add 1 wilds.
            await ctx.Wilds.Add(1);

            // In  each adjacent land:
            foreach (var adj in ctx.Adjacent.Select(ctx.Target))
            {
                await EffectAdjacentLand(adj);
            }
        }
    }
예제 #3
0
    static public async Task ActAsync(TargetSpaceCtx ctx)
    {
        await ctx.Invaders.Destroy(3, Invader.Town);

        await ctx.Invaders.Destroy(int.MaxValue, Invader.Explorer);

        await ctx.AddBlight(1);
    }
예제 #4
0
    static async Task EffectAdjacentLand(TargetSpaceCtx adj)
    {
        // 10 damage,
        await adj.DamageInvaders(10);

        // destroy all dahan and beast.
        await DestroyDahanAndBeasts(adj);

        // IF there are no blight, add 1 blight
        if (adj.Blight.Count == 0)
        {
            await adj.AddBlight(1);
        }
    }
예제 #5
0
    static public async Task Act(TargetSpaceCtx ctx)
    {
        // Destroy 3 towns.
        await ctx.Invaders.Destroy(3, Invader.Town);

        // 1 damage to each town/city
        await ctx.DamageEachInvader(1, Invader.Town, Invader.City);

        // add 1 blight
        await ctx.AddBlight(1);

        // if you have 3 sun, destroy 1 city
        if (await ctx.YouHave("3 sun"))
        {
            await ctx.Invaders.Destroy(1, Invader.City);
        }
    }
예제 #6
0
    static public async Task ActionAsync(TargetSpaceCtx ctx)
    {
        int fear   = 3;
        int damage = 5;

        // if you have 4 fire
        if (await ctx.YouHave("4 fire"))
        {
            fear   += 2;
            damage += 5;
        }

        // if target is Jungle / Wetland, add 1 blight
        if (ctx.IsOneOf(Terrain.Jungle, Terrain.Wetland))
        {
            await ctx.AddBlight(1);
        }

        ctx.AddFear(fear);
        await ctx.DamageInvaders(damage);
    }
예제 #7
0
    static public async Task Option4(TargetSpaceCtx ctx)
    {
        // In a land with blight and presence  (Select a space, not necessarily the one you targetted with power (I guess...)
        var spacesWithPresenceAndBlight = ctx.Self.Presence.Spaces
                                          .Where(s => ctx.Target(s).HasBlight);
        var space = await ctx.Decision(new Select.Space($"Push all dahan, destroy invaders and beast, 1 blight", spacesWithPresenceAndBlight, Present.Always));

        var spaceCtx = ctx.Target(space);

        // Push all Dahan
        await spaceCtx.PushDahan(int.MaxValue);

        // Destroy all invaders and Beasts
        var beasts = spaceCtx.Beasts;
        await beasts.Destroy(beasts.Count);

        await spaceCtx.Invaders.DestroyAny(int.MaxValue, Invader.Explorer, Invader.Town, Invader.City);

        // Add 1 blight
        await ctx.AddBlight(1);
    }
예제 #8
0
    static public async Task ActAsync(TargetSpaceCtx ctx)
    {
        // 2 damage. Destroy all explorers
        await ctx.Invaders.Destroy(int.MaxValue, Invader.Explorer);

        int damage = 2;

        // if target land is J/W, add 1 blight
        if (ctx.IsOneOf(Terrain.Jungle, Terrain.Wetland))
        {
            await ctx.AddBlight(1);
        }

        // if you have 2 fire, 3 air, 2 earth: +4 damage. Add 1 wilds
        if (await ctx.YouHave("2 fire,3 air, 2 earth"))
        {
            await ctx.Wilds.Add(1);

            damage += 4;
        }
        await ctx.DamageInvaders(damage);
    }
예제 #9
0
    static public async Task ActAsync(TargetSpaceCtx ctx)
    {
        // 1 fear.
        ctx.AddFear(1);

        // 1 damage.
        await ctx.DamageInvaders(1);

        // 1 Damage to Dahan
        await ctx.DamageDahan(1);

        // Add 1 badlands, 1 beast, 1 disease, 1 strife, 1 wilds, and 1 blight.
        await ctx.Badlands.Add(1);

        await ctx.Beasts.Add(1);

        await ctx.AddStrife();

        await ctx.Wilds.Add(1);

        await ctx.AddBlight(1);
    }
예제 #10
0
    static public async Task Act(TargetSpaceCtx ctx)
    {
        // 2 fear
        ctx.AddFear(2);

        // Push up to 2 explorer/towns
        int pushCount = 2;

        // if target has blight
        if (ctx.HasBlight)
        {
            // +2 fear
            ctx.AddFear(2);

            // push up to 2 more explorers/towns
            pushCount += 2;
        }

        // add 1 blight
        await ctx.AddBlight(1);

        await ctx.PushUpTo(pushCount, Invader.Explorer, Invader.Town);
    }
예제 #11
0
    static public async Task ActAsync(TargetSpaceCtx ctx)
    {
        // 1 fear
        ctx.AddFear(1);

        // 7 damage
        int damage = 7;

        // add 1 blight
        await ctx.AddBlight(1);

        // destroy all dahan
        await ctx.DestroyDahan(ctx.Dahan.Count);

        if (await ctx.YouHave("3 earth,2 plant,2 animal"))
        {
            int blightCount = ctx.BlightOnSpace;
            ctx.AddFear(blightCount);
            damage += 4 * blightCount;
        }

        await ctx.DamageInvaders(damage);
    }
예제 #12
0
        static async Task ApplyPowerOnTarget(TargetSpaceCtx ctx)
        {
            // add 1 blight.
            await ctx.AddBlight(1);

            // Add 2 beasts
            var beasts = ctx.Beasts;
            await beasts.Add(2);

            // Gather up to 2 beasts
            await ctx.GatherUpTo(2, TokenType.Beast);

            // each beast deals:
            // 1 fear
            ctx.AddFear(beasts.Count);
            // 2 damage to invaders
            await ctx.DamageInvaders(beasts.Count * 2);

            // and 2 damage to dahan.
            await ctx.DamageDahan(beasts.Count);

            // Destroy 1 beast.
            await beasts.Destroy(1);
        }
예제 #13
0
    static public async Task ActAsymc(TargetSpaceCtx ctx)
    {
        // Destroy 1 town
        await ctx.Invaders.Destroy(1, Invader.Town);

        // discard the top card of the minor power deck.
        var card = ctx.GameState.MinorCards.FlipNext();

        // Show the card to the user
        _ = await ctx.Self.SelectPowerCard(OverenthusiasticArson.Name + " turned up:", new PowerCard[] { card }, CardUse.Other, Present.Always);

        // IF it provides fire:
        if (card.Elements.Contains(Element.Fire))
        {
            // 1 fear
            ctx.AddFear(1);

            // 2 damage,
            await ctx.DamageInvaders(2);

            // add 1 blight
            await ctx.AddBlight(1);
        }
    }