static public Task Act(TargetSpaceCtx ctx)
 {
     return(ctx.SelectActionOption(
                new SpaceAction($"Each dahan deals 1 damage to a different invader", ctx => ctx.Apply1DamageToDifferentInvaders(ctx.Dahan.Count)),
                new SpaceAction("push up to 3 dahan", ctx => ctx.PushUpToNDahan(3))
                ));
 }
 static public Task Act(TargetSpaceCtx ctx)
 {
     return(ctx.SelectActionOption(
                new SpaceAction("push up to 4 dahan", ctx => ctx.PushUpToNDahan(4)).Matches(x => x.Dahan.Any),
                new SpaceAction("2 fear", ctx => ctx.AddFear(2)).Matches(x => x.Tokens.HasInvaders())
                ));
 }
Exemple #3
0
 static public Task ActAsync(TargetSpaceCtx ctx)
 {
     return(ctx.SelectActionOption(
                new SpaceAction("remove 1 blight", ctx => ctx.RemoveBlight()),
                new SpaceAction("push up to 3 dahan", ctx => ctx.PushUpToNDahan(3))
                ));
 }
Exemple #4
0
    static async Task ActInnerAsync(TargetSpaceCtx ctx)
    {
        bool hasDahan    = ctx.Dahan.Any;
        bool hasInvaders = ctx.HasInvaders;

        // If no dahan / Invaders are present: Remove 1 blight.
        if (!hasDahan && !hasInvaders)
        {
            await ctx.RemoveBlight();
        }

        // If invaders are present: they Build, then Ravage
        if (hasInvaders)
        {
            await ctx.GameState.GetBuildEngine()
            .Exec(
                new BuildingEventArgs(ctx.GameState, new Dictionary <Space, BuildingEventArgs.BuildType>()),
                ctx.Tokens,
                ctx.GameState
                );

            await new RavageAction(ctx.GameState, ctx.Invaders).Exec();
        }

        // If dahan are present: Add 1 dahan. Push up to 2 dahan.
        if (hasDahan)
        {
            await ctx.Dahan.Add(1);

            await ctx.PushUpToNDahan(2);
        }
    }
    static public async Task ActAsync(TargetSpaceCtx ctx)
    {
        // Add 1 badland.
        await ctx.Badlands.Add(1);

        // Push up to 2 dahan.
        await ctx.PushUpToNDahan(2);
    }
Exemple #6
0
    static public async Task OptionAsync(TargetSpaceCtx ctx)
    {
        var elements    = ctx.Self.Elements;
        int gatherCount = elements[Element.Air];
        int pushCount   = elements[Element.Sun];

        await ctx.GatherUpToNDahan(gatherCount);

        await ctx.PushUpToNDahan(pushCount);
    }
Exemple #7
0
    static public async Task ActAsync(TargetSpaceCtx ctx)
    {
        // 2 damange.
        await ctx.DamageInvaders(2);

        // Push up to 2 dahan.
        await ctx.PushUpToNDahan(2);

        // When your Powers would destroy invaders, instead they generate fear and/or push those invaders
        // NO! - Bringer gets this by default
        // If this card is traded to another spirit, it is too hard to swap out their InvaderGroup builder
    }
Exemple #8
0
    static public async Task ActionAsync(TargetSpaceCtx ctx)
    {
        // Push up to 2 dahan.
        var destinationSpaces = await ctx.PushUpToNDahan(2);

        // if pushed dahan into town or city
        bool pushedToBuildingSpace = destinationSpaces
                                     .Any(neighbor => ctx.Target(neighbor).Tokens.HasAny(Invader.Town, Invader.City));

        if (pushedToBuildingSpace)
        {
            ctx.AddFear(1);
        }
    }
Exemple #9
0
	static public async Task ActAsync(TargetSpaceCtx ctx ) {

		// 1 fear.
		ctx.AddFear(1);

		// add 1 badlands.
		await ctx.Badlands.Add(1);

		// Add 1 beast within 1 range.
		var spaceCtx = await ctx.SelectSpace("Add beast", ctx.FindSpacesWithinRangeOf(1,Target.Any));
		await spaceCtx.Beasts.Add(1);

		// Push up to 2 dahan.
		await ctx.PushUpToNDahan(2);
	}
    public static async Task ActAsync(TargetSpaceCtx ctx)
    {
        // 2 damage per dahan in target land
        await ctx.DamageInvaders(2 *ctx.Dahan.Count);

        if (await ctx.YouHave("3 sun,2 animal"))
        {
            // you may push up to 2 dahan.
            var pushedToLands = await ctx.PushUpToNDahan(2);

            // 2 damage per dahan
            foreach (var neighbor in pushedToLands.Distinct())
            {
                await DahanDeal2DamageEach(ctx.Target(neighbor));
            }
        }
    }
    static public async Task ActionAsync(TargetSpaceCtx ctx)
    {
        // for each dahan in target land, 1 damage and defend 2

        // -- damage --
        await ctx.DamageInvaders(ctx.Dahan.Count);

        // if you have 2 sun, 2 earth, 2 plant
        if (await ctx.YouHave("2 sun, 2 earth, 2 plant"))
        {
            // you may push up to 2 dahan
            Space[] dest = await ctx.PushUpToNDahan(2);

            // defend pushed
            foreach (var d in dest)
            {
                ctx.Target(d).Defend(2);
            }
        }

        // -- defend remaining --
        ctx.Defend(ctx.Dahan.Count * 2);
    }
 static public Task Option1(TargetSpaceCtx ctx)
 {
     return(ctx.PushUpToNDahan(1));
 }
    static public async Task ActAsync(TargetSpaceCtx ctx)
    {
        await ctx.GatherUpToNDahan(3);

        await ctx.PushUpToNDahan(3);
    }