It is currently 19 Apr 2024, 05:23
   
Text Size

Shadows over Innistrad

Moderators: North, BetaSteward, noxx, jeffwadsworth, JayDi, TheElk801, LevelX, CCGHQ Admins

Shadows over Innistrad

Postby LevelX » 26 Mar 2016, 13:59

There are still a lot of cards not implemented yet.

I'll try to realease an update to the public servers tomorrow.
Starting from next monday I'm away for one week. So the next update for the public servers after the one tomorrow will be later than 2016-04-05.

Missing cards

WHITE
Done | Open
4|Apothecary Geist
9|Cathar's Companion
10|Chaplain's Blessing
12|Declaration in Stone
17|Emissary of the Sleepless
11|Dauntless Cathar
24|Inquisitor's Ox
26|Militant Inquisitor
27|Moorland Drifter
29|Nearheath Caplain
30|Not Forgotten
31|Odric, Lunarch Marshal
32|Open the Armory
38|Spectral Shepherd
39|Stern Constable
40|Strength of Arms
42|Tenacity
46a|Town Gossipmonger
46b|Incited Rabbled

7|Bound by Moonsilver


BLUE
Done | Open
50|Broken Concentration
55|Deny Existence
56|Drownyard Explorers
57|Drunau Corpse Trawler
59|Epiphany at the Drownyard
60|Erdwal Illuminator
61|Essence Flux
62|Fleeting Memories
63|Forgotten Creation
66|Ghostly Wings
67|Gone Missing
69|Jace, Unraveler of Secrets
74|Nagging Thoughts
80|Press for Answers
85|Silburlind Snapper
88a|Startled Awake
88b|Persistent Nightmare
96|Welcome to the Fold


BLACK
Done | Open
98|Alms of the Vein
100|Behind the Scenes
102|Biting Rain
112|Ghoulcaller's Accomplice
113|Ghoulsteed
114|Gisa's Bidding
115|Grotesque Mutation
119a|Kindly Stranger
119b|Demon-Possessed Witch
125|Morkrut Necropod
126|Murderous Compulsion
128|Pale Rider of Trostad
133|Sanitarium Skeleton
136|Stallion of AShmouth

97a|Accursed Witch
97b|Infectious Curse
99|Asylum Visitor
104|Creeping Death
111|From Under the Floorboards
129|Pick the Brain

RED
Done | Open
145|Avacyn's Judgment
146|Bloodmad Vampire
152|Dissension in the Rank
153|Dual Shot
158a|Gatstaf Arsonists
158b|Gatstaf Ravagers
159a|Geier Reach Bandit
159b|Vildin-Pack Alpha
160|Geistblast
164|Howlpack Wolf
167|Inner Struggle
168|Insolent Neonate
169a|Kessig Forgemaster
169b|Flameheart Werewolf
173|Malevolent Whispers
174|Pyre Hound
176|Reduce to Ashes
177|Rush of Adrenaline
180|Senseless Rage
183|Spiteful Motives
184|Stensia Masquerade
187|Ulrich's Kindred
188|Uncaged Fury


GREEN
Done | Open
196|Byway Courier
198|Confront the Unknown
199|Crawling Sensation
200|Cryptolith Rite
201|Cult of the Waxing Moon
204|Equestrian Skill
205|Fork in the Road
207|Graf Mole
209a|Hermit of the Natterknolls
209b|Lone Wolf of the Natterknolls
213|Intrepid Provisioner
214|Kessig Dire Swine
216|Loam Dryad
217|Might Beyond Reason
218|Moldgraf Scavenger
219|Moonlight Hunt
224|Root Out
226|Seasons Past
229a|Solitary Hunter
229b|One of the Pack
238|Veteran Cathar
240|Weirding Wood


MULTICOLOR
241|Altered Ego (DONE 1.4.9v4)
245|The Gitrog Monster (DONE 1.4.9v4)
249|Prized Amalgam (DONE 1.4.9v4)

ARTFACTS
Done | Open
254|Epitaph Golem
257|Haunted Cloak
259|Murderer's Axe
261|Runaway Carriage
263|Skeleton Key
264|Slayer's Plate
267|True-Faith Censer
269|Wild-Field Scarecrow

253|Corrupted Grafstone
256a|Harvest Hand
256b|Scrounged Scythe
260a|Neglected Heirloom
260b|Ashmouth Blade
User avatar
LevelX
DEVELOPER
 
Posts: 1677
Joined: 08 Dec 2011, 15:08
Has thanked: 174 times
Been thanked: 374 times

Re: Shadows over Innistrad

Postby LevelX » 26 Mar 2016, 14:00

I'm going to implement some green cards.
User avatar
LevelX
DEVELOPER
 
Posts: 1677
Joined: 08 Dec 2011, 15:08
Has thanked: 174 times
Been thanked: 374 times

Re: Shadows over Innistrad

Postby escplan9 » 26 Mar 2016, 15:01

I'll work on some white cards.
escplan9
 
Posts: 257
Joined: 10 Aug 2015, 22:38
Has thanked: 26 times
Been thanked: 40 times

Re: Shadows over Innistrad

Postby LevelX » 26 Mar 2016, 17:25

Green finished, I'm doing some red cards now.
User avatar
LevelX
DEVELOPER
 
Posts: 1677
Joined: 08 Dec 2011, 15:08
Has thanked: 174 times
Been thanked: 374 times

Re: Shadows over Innistrad

Postby escplan9 » 26 Mar 2016, 19:25

Finished 6 white cards:

Apothecary Geist
Cathar's Companion
Chaplain's Blessing
Declaration in Stone
Emissary of the Sleepless
Dauntless Cathar

Taking a break for a little while and going out in a couple hours. Should be able to get a few more cards done by the end of tonight.

edit: back to working on white cards...
Last edited by escplan9 on 26 Mar 2016, 23:16, edited 1 time in total.
escplan9
 
Posts: 257
Joined: 10 Aug 2015, 22:38
Has thanked: 26 times
Been thanked: 40 times

Re: Shadows over Innistrad

Postby fireshoes » 26 Mar 2016, 21:05

I'll work on some black cards.
User avatar
fireshoes
 
Posts: 536
Joined: 20 Aug 2014, 03:51
Has thanked: 201 times
Been thanked: 49 times

Re: Shadows over Innistrad

Postby LevelX » 26 Mar 2016, 22:24

Doing some blue cards now.
User avatar
LevelX
DEVELOPER
 
Posts: 1677
Joined: 08 Dec 2011, 15:08
Has thanked: 174 times
Been thanked: 374 times

Re: Shadows over Innistrad

Postby escplan9 » 27 Mar 2016, 00:47

Finished 6 more white cards:

Inquisitor's Ox
Militant Inquisitor
Moorland Drifter
Nearheath Chaplain
Not Forgotten
Odric, Lunarch Marshal

Taking a break for a little and my GF is coming back home in a minute. Might be able to bust out the last few cards tonight or early tomorrow morning. I'll try to fit in whatever I can. Only 9 white cards left...
escplan9
 
Posts: 257
Joined: 10 Aug 2015, 22:38
Has thanked: 26 times
Been thanked: 40 times

Re: Shadows over Innistrad

Postby fireshoes » 27 Mar 2016, 05:36

Working on some blue cards
User avatar
fireshoes
 
Posts: 536
Joined: 20 Aug 2014, 03:51
Has thanked: 201 times
Been thanked: 49 times

Re: Shadows over Innistrad

Postby escplan9 » 27 Mar 2016, 06:24

Finished all white cards EXCEPT Bound by Moonsilver. Bound by Moonsilver still needs to be implemented then white is done.
escplan9
 
Posts: 257
Joined: 10 Aug 2015, 22:38
Has thanked: 26 times
Been thanked: 40 times

Re: Shadows over Innistrad

Postby halljared » 27 Mar 2016, 20:09

escplan9 wrote:Finished all white cards EXCEPT Bound by Moonsilver. Bound by Moonsilver still needs to be implemented then white is done.
I'm looking at Bound by Moonsilver. The transform thing is the tricky bit, but it seems I'm making progress. Since I'm new to the project I'm okay with doing this as a learning experience without adding my code. If I do get it right I'll push the code to my fork so you can check it out.
halljared
 
Posts: 11
Joined: 27 Mar 2016, 20:05
Has thanked: 1 time
Been thanked: 3 times

Re: Shadows over Innistrad

Postby escplan9 » 27 Mar 2016, 20:23

Yeah that's what tripped me up with the card too. The rest is just pacifism and an activated ability.
escplan9
 
Posts: 257
Joined: 10 Aug 2015, 22:38
Has thanked: 26 times
Been thanked: 40 times

Re: Shadows over Innistrad

Postby halljared » 27 Mar 2016, 21:35

Think I got [[Bound by Moonsilver]] . The transform part works so I'm doing the ability now then I'll test it out and pull request.
halljared
 
Posts: 11
Joined: 27 Mar 2016, 20:05
Has thanked: 1 time
Been thanked: 3 times

Re: Shadows over Innistrad

Postby escplan9 » 28 Mar 2016, 05:33

Last edited by escplan9 on 28 Mar 2016, 18:54, edited 3 times in total.
escplan9
 
Posts: 257
Joined: 10 Aug 2015, 22:38
Has thanked: 26 times
Been thanked: 40 times

Re: Shadows over Innistrad

Postby escplan9 » 28 Mar 2016, 05:36

Working on Asylum Visitor...

I'm spending way too much time on this card and up way too late. Right now it appears to trigger when ANY player has 0 cards in hand during an upkeep. I'm sure I'm overlooking a simple way to resolve this:

Code: Select all
/*
 *  Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without modification, are
 *  permitted provided that the following conditions are met:
 *
 *     1. Redistributions of source code must retain the above copyright notice, this list of
 *        conditions and the following disclaimer.
 *
 *     2. Redistributions in binary form must reproduce the above copyright notice, this list
 *        of conditions and the following disclaimer in the documentation and/or other materials
 *        provided with the distribution.
 *
 *  THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
 *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 *  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 *  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  The views and conclusions contained in the software and documentation are those of the
 *  authors and should not be interpreted as representing official policies, either expressed
 *  or implied, of BetaSteward_at_googlemail.com.
 */
package mage.sets.shadowsoverinnistrad;

import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbility;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.CardsInHandCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.LoseLifeSourceControllerEffect;
import mage.abilities.keyword.MadnessAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.TargetController;

/**
 *
 * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
 */
public class AsylumVisitor extends CardImpl {
   
    private static final String rule = "At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life.";

    public AsylumVisitor(UUID ownerId) {
        super(ownerId, 99, "Asylum Visitor", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{B}");
        this.expansionSetCode = "SOI";
        this.subtype.add("Vampire");
        this.subtype.add("Wizard");
        this.power = new MageInt(3);
        this.toughness = new MageInt(1);

        // At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life.
        Condition condition = new CardsInHandCondition(CardsInHandCondition.CountType.EQUAL_TO, 0);
        TriggeredAbility ability = new BeginningOfUpkeepTriggeredAbility(new DrawCardSourceControllerEffect(1), TargetController.YOU, false);
        ability.addEffect(new LoseLifeSourceControllerEffect(1));
        this.addAbility(new ConditionalTriggeredAbility(ability, condition, rule));
         
        // Madness {1}{B}
        this.addAbility(new MadnessAbility(this, new ManaCostsImpl("{1}{B}")));
    }

    public AsylumVisitor(final AsylumVisitor card) {
        super(card);
    }

    @Override
    public AsylumVisitor copy() {
        return new AsylumVisitor(this);
    }
}
All I need is the CardsInHandCondition to just apply to whoever is the controller of the current turn. TargetController does not seem to have something of the sort that I'm seeing?

Created tests for the card as well for easy testing:
Code: Select all
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.mage.test.cards.single.soi;

import java.util.Set;
import mage.cards.Card;
import mage.constants.PhaseStep;
import mage.constants.Zone;
import org.junit.Test;
import org.mage.test.serverside.base.CardTestPlayerBase;

/**
 * Tests for Asylum Visitor:
 * {1}{B} 3/1 Vampire Wizard Creature
 *
 * At the beginning of each player's upkeep, if that player has no cards in hand, you draw a card and you lose 1 life.
 * Madness {1}{B}
 *
 * @author escplan9 (Derek Monturo - dmontur1 at gmail dot com)
 */
public class AsylumVisitorTest extends CardTestPlayerBase {
   
    /**
     * No cards in own hand.
     */
    @Test
    public void testNoCardsInOwnHand() {
       
        addCard(Zone.BATTLEFIELD, playerA, "Asylum Visitor", 1);

        setStopAt(1, PhaseStep.UPKEEP);
        execute();

        Set<Card> hand = playerA.getHand().getCards(currentGame);
        assertLife(playerA, 19);
        assertHandCount(playerA, 1);
    }   
   
    /**
     * Cards in own hand.
     */
    @Test
    public void testCardsInOwnHand() {
       
        addCard(Zone.BATTLEFIELD, playerA, "Asylum Visitor", 1);
        addCard(Zone.HAND, playerA, "Bronze Sable", 3); // 2/1 artifact creature

        setStopAt(1, PhaseStep.UPKEEP);
        execute();

        Set<Card> hand = playerA.getHand().getCards(currentGame);
        assertLife(playerA, 20);
        assertHandCount(playerA, 3); // 3 bronze sables!
    }   
   
    /**
     * No cards in opponent's hand.
     */
    @Test
    public void testNoCardsInOpponentsHand() {
       
        addCard(Zone.HAND, playerA, "Asylum Visitor", 1);
        addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3);
        castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Asylum Visitor");
       
        setStopAt(2, PhaseStep.UPKEEP);
        execute();

        Set<Card> hand = playerB.getHand().getCards(currentGame);
        assertLife(playerA, 19);
        assertHandCount(playerA, 1);
    }   
   
    /**
     * Cards in opponent's hand.
     */
    @Test
    public void testCardsInOpponentsHand() {
       
        addCard(Zone.HAND, playerA, "Asylum Visitor", 1);
        addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3);
        addCard(Zone.HAND, playerB, "Bronze Sable", 3); // 2/1 artifact creature
        castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Asylum Visitor");
        setStopAt(2, PhaseStep.UPKEEP);
        execute();

        Set<Card> hand1 = playerA.getHand().getCards(currentGame);
        Set<Card> hand2 = playerB.getHand().getCards(currentGame);
        assertLife(playerA, 20);
        assertHandCount(playerB, 3); // 3 bronze sables!
    }
}
escplan9
 
Posts: 257
Joined: 10 Aug 2015, 22:38
Has thanked: 26 times
Been thanked: 40 times

Next

Return to Developers Talk

Who is online

Users browsing this forum: No registered users and 10 guests


Who is online

In total there are 10 users online :: 0 registered, 0 hidden and 10 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 10 guests

Login Form