It is currently 09 Jul 2025, 18:57
   
Text Size

Card Bug Report

Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins

Re: Card Bug Report

Postby GandoTheBard » 12 Sep 2008, 10:17

Not 100% sure this is correctly a bug or merely an oddity. It depends on whether shapeshifter counts as Artifact Creature...as far as I remember artifact or any supertype is not included in the Shapeshifter type. I found that the Shapeshift tokens created by cribswap can block fear creatures.
visit my personal homepage here: http://outofthebrokensky.com

Listen to my podcast with famed AJ_Impy "Freed from the Real" on http://puremtgo.com
User avatar
GandoTheBard
Tester
 
Posts: 1043
Joined: 06 Sep 2008, 18:43
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby Mr.Chaos » 12 Sep 2008, 11:20

The AI used Sower of Temptation to steal my Essence Warden. As a result, the AI started gaining life when a creature came into play.
So far, so good.
Then I attacked with a 9/9 pumped Llanowar Elves and the AI used the Sower to block.
Needless to say the sower died. :lol:
As a result, I got my Essence warden back. Thank you.
But... every time a creature came into play, the AI gained a life from the Essence Warden! MY Essence Warden! That life should go to me! :evil:
I want my life back!... Ok, that sounds plain weird. :lol:

So, where is the error? Essence Warden works correctly in all other instances.
Sower of Temptation did not do anything wrong either.
And yet, somewhere in the middle, code got mangled and distorted and gained life gets redirected the wrong way around.
Maybe the program just cannot handle the fact that the warden changed controllers twice. The first change of control was handled correct, the second was not.
](*,) = coder at work, according to a coder.It does explain some of the bugs. :wink:
Mr.Chaos
Tester
 
Posts: 625
Joined: 06 Sep 2008, 08:15
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby DennisBergkamp » 12 Sep 2008, 20:13

Bitterblossom does exactly what it's supposed to do (lose 1 life, makes a 1/1 flying token) but it also makes me draw another card.

By the way, how do you "highlight" card names in these posts? I was hoping "Bitterblossom" would automatically get a highlighted black :)
User avatar
DennisBergkamp
AI Programmer
 
Posts: 2602
Joined: 09 Sep 2008, 15:46
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby Huggybaby » 13 Sep 2008, 02:51

DennisBergkamp wrote:By the way, how do you "highlight" card names in these posts?
That's a good question. Cards are automatically highlighted by some kind of modification that Goblin Hero made to this forum. I don't know where the card database for that mod originates, or how it gets updated, but I have also noticed cards missing.
User avatar
Huggybaby
Administrator
 
Posts: 3226
Joined: 15 Jan 2006, 19:44
Location: Finally out of Atlanta
Has thanked: 741 times
Been thanked: 601 times

Re: Card Bug Report

Postby Mr.Chaos » 13 Sep 2008, 05:54

Dennis, are you using the latest beta version (dated september 4) of MTG forge?
Because I am and as far as I can tell after playtesting, Bitterblossom no longer gives an extra card at the beginning of your turn.
Actually, I remember Forge telling me that he fixed this bug when he e-mailed me about the 09-04 beta update.

Edit: Hey, in my post Bitterblossom is highlighted correctly! Weird.
](*,) = coder at work, according to a coder.It does explain some of the bugs. :wink:
Mr.Chaos
Tester
 
Posts: 625
Joined: 06 Sep 2008, 08:15
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby DennisBergkamp » 13 Sep 2008, 20:58

I *think* I got the latest version. Maybe not, since Forge explicitly said he fixed it. I'll check to make sure once I'm near my desktop, maybe I accidentally ran a previous version.

And hey! That's weird, it's black for you. Let me try again: Bitterblossom !!

EDIT: Yes, it works this time!
User avatar
DennisBergkamp
AI Programmer
 
Posts: 2602
Joined: 09 Sep 2008, 15:46
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby jpb » 14 Sep 2008, 16:50

GandoTheBard wrote:Swords To Plowshards gives the OWNER the life not the controller :/
I tested the 09-04 beta and Swords to Plowshares gave the controller the life. Perhaps there was a bug with the card which switched controllers of the creature so Swords To Plowshares thought the wrong player was the controller.

Here is the code in CardFactory.java for Swords to Plowshares that give the controller the life.
Code: Select all
//add life
            String player = getTargetCard().getController();
            PlayerLife life = AllZone.GameAction.getPlayerLife(player);
            life.addLife(getTargetCard().getAttack());
jpb
 
Posts: 132
Joined: 05 Sep 2008, 13:12
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby jpb » 14 Sep 2008, 17:13

Mr.Chaos wrote:The AI used Sower of Temptation to steal my Essence Warden.
The AI code for Sower of Temptation would not ever steal an Essence Warden. A creature's power must be > 3 and have flying, or be > 4 and not have flying. Essence Warden has power of 1. I tested this with the 09-04 beta and the AI never stole an Essence Warden.

So, where is the error?
Sower of Temptation's code does not call c.setController(c.getOwner()) like it should. I noticed another bug with Sower of Temptation while checking this one. Sower of Temptation makes an incorrect assumption in it's logic. That assumption is that whatever creature Sower of Temptation targets is a creature that is under the control of it's owner. This is not always true and is dangerous when control is always given back to the owner and not the player who should have control of it.
jpb
 
Posts: 132
Joined: 05 Sep 2008, 13:12
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby Mr.Chaos » 18 Sep 2008, 17:58

The ai played Bribery on me and took Flametongue Kavu.
At the time, the ai had Immaculate Magistrate in play as its only other creature. (I had no creatures in play)
So... the Kavu's "come into play" effect should have killed either the Magistrate or the Kavu itself.
But the effect did not happen at all.
Since Flametongue Kavu works normal when played from your hand, I can only assume that the effect did not happen because it was brought into play with Bribery.
Whether the blame lies with Bribery, Flametongue Kavu or another piece of code, that is for you techie-types to figure out.

The ai used Gando's wgu-elves deck.
I used my kikidoll deck. (Both decks are available for download in the deck section of this forum)

EDIT: This bug was found in the 09-04 beta, I just saw that a new beta is available.
](*,) = coder at work, according to a coder.It does explain some of the bugs. :wink:
Mr.Chaos
Tester
 
Posts: 625
Joined: 06 Sep 2008, 08:15
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby GandoTheBard » 19 Sep 2008, 06:57

Terramophic Expanse is still bugged in the hand. If you click it while there is something on the stack it activates as if you sacrificed it and then when you play it, it loses the sacrifice ability being a dead card on the table.
visit my personal homepage here: http://outofthebrokensky.com

Listen to my podcast with famed AJ_Impy "Freed from the Real" on http://puremtgo.com
User avatar
GandoTheBard
Tester
 
Posts: 1043
Joined: 06 Sep 2008, 18:43
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby jpb » 19 Sep 2008, 08:49

Here is fix for Terramorphic Expanse. To apply it replace the current code for Terramorphic Expanse in CardFactory.java with this code and rebuild the project. I think this will prevent it from letting you play it as an instant, stop it from asking you to pay a mana cost, and prevent you from playing it when it's already tapped. Let me know if it works in all the scenarios you can come up with.

Code: Select all
    //*************** START *********** START **************************
    else if(cardName.equals("Terramorphic Expanse"))
    {
      //tap sacrifice
      final Ability_Tap ability = new Ability_Tap(card, "0")
      {
        public boolean canPlayAI()
        {
          return false;
        }
        public void chooseTargetAI()
        {
          AllZone.GameAction.sacrifice(card);
        }
        public boolean canPlay()
        {
           PlayerZone play    = AllZone.getZone(Constant.Zone.Play   , card.getController());
            CardList cards = new CardList(play.getCards());
           
            //only continue if this card is in play. This prevents playing as an instant from your hand.
            if(cards.contains(card)){
               //only continue if this card is untapped. This prevents playing it over and over before it's sacrificed.
               if(!card.isTapped()){
                   PlayerZone library = AllZone.getZone(Constant.Zone.Library, card.getController());
                 CardList list = new CardList(library.getCards());
                 list = list.getType("Basic");
                 return list.size() > 0;
               }
               else{
                 return false;
               }
            }
            else{
               return false;
            }
        }//canPlay()
        public void resolve()
        {
          if(owner.equals(Constant.Player.Human))
            humanResolve();
          else
            computerResolve();
        }
        public void computerResolve()
        {           
          AllZone.GameAction.sacrifice(card);
          CardList play = new CardList(AllZone.Computer_Play.getCards());
          play = play.getType("Basic");

          CardList library = new CardList(AllZone.Computer_Library.getCards());
          library = library.getType("Basic");

          //this shouldn't happen, but it is defensive programming, haha
          if(library.isEmpty())
            return;

          Card land = null;

          //try to find a basic land that isn't in play
          for(int i = 0; i < library.size(); i++)
            if(! play.containsName(library.get(i)))
            {
              land = library.get(i);
              break;
            }

          //if not found
          //library will have at least 1 basic land because canPlay() checks that
          if(land == null)
            land = library.get(0);

          land.tap();
          AllZone.Computer_Library.remove(land);
          AllZone.Computer_Play.add(land);

          AllZone.GameAction.shuffle(Constant.Player.Computer);
        }//computerResolve()

        public void humanResolve()
        {
          AllZone.GameAction.sacrifice(card);
          PlayerZone library = AllZone.getZone(Constant.Zone.Library, card.getController());
          PlayerZone play    = AllZone.getZone(Constant.Zone.Play   , card.getController());

          CardList basicLand = new CardList(library.getCards());
          basicLand = basicLand.getType("Basic");

          play.remove(card);
          Object o = AllZone.Display.getChoiceOptional("Choose a basic land", basicLand.toArray());
          if(o != null)
          {
            Card land = (Card)o;
            land.tap();

            library.remove(land);
            play.add(land);
          }
          AllZone.GameAction.shuffle(card.getController());
        }//resolve()
      };//SpellAbility

      Input runtime = new Input()
      {
        boolean once = true;
        public void showMessage()
        {
          //this is necessary in order not to have a StackOverflowException
          //because this updates a card, it creates a circular loop of observers
          if(once)
          {
            once = false;

            ability.setStackDescription("Search your library for a basic land card and put it into play tapped. Then shuffle your library.");
            AllZone.Stack.add(ability);

            stop();
          }
        }//showMessage()
      };
      card.addSpellAbility(ability);
      ability.setDescription("tap, Sacrifice Terramorphic Expanse: Search your library for a basic land card and put it into play tapped. Then shuffle your library.");
      ability.setBeforePayMana(runtime);
    }//*************** END ************ END **************************
I also noticed a bug in That Which Was Taken (if computer has it on opening hand you would get a stack dump and the game would stall). Here is a fix. To apply it replace the current code for That Which Was Taken in CardFactory.java with this code and rebuild the project.

Code: Select all
    //*************** START *********** START **************************
    else if(cardName.equals("That Which Was Taken"))
    {
      final SpellAbility ability = new Ability_Tap(card, "4")
      {
        public void resolve()
        {
          Card c = getTargetCard();

          if(AllZone.GameAction.isCardInPlay(c))
            c.addKeyword("Indestructible");
        }
        public boolean canPlayAI()
        {
          return 0 < getCreatures().size();
        }
        public void chooseTargetAI()
        {
          Card c = CardFactoryUtil.AI_getBestCreature(getCreatures());
          setTargetCard(c);
        }
        CardList getCreatures()
        {
          CardList list = new CardList();
          list.addAll(AllZone.Computer_Play.getCards());
          //remove That Which Was Taken from the list.
          CardList twwtCardList = list.getName("That Which Was Taken");
          if(twwtCardList.size() != 0){
             Card twwtCard = twwtCardList.getCard(0);
             list.remove(twwtCard);
          }
          return list.getType("Creature");
        }
      };//SpellAbility

      Input target = new Input()
      {
        public void showMessage()
        {
          AllZone.Display.showMessage("Select target permanent");
          ButtonUtil.enableOnlyCancel();
        }
        public void selectButtonCancel() {stop();}
        public void selectCard(Card c, PlayerZone zone)
        {
          if(zone.is(Constant.Zone.Play) && c != card)//cannot target self
          {
            ability.setTargetCard(c);
            stopSetNext(new Input_PayManaCost(ability));
          }
        }
      };//Input -- target

      ability.setBeforePayMana(target);
      ability.setDescription("4, tap: Tap a divinity counter on target permanent other than That Which Was Taken.");

      card.addSpellAbility(ability);
    }//*************** END ************ END **************************
jpb
 
Posts: 132
Joined: 05 Sep 2008, 13:12
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby GandoTheBard » 20 Sep 2008, 06:44

the AI with Kiki Jiki, Mirror Breaker still targets enemy creatures...however it seems the tokens never appear. So now there are two bugs associated with this card and the ai.
visit my personal homepage here: http://outofthebrokensky.com

Listen to my podcast with famed AJ_Impy "Freed from the Real" on http://puremtgo.com
User avatar
GandoTheBard
Tester
 
Posts: 1043
Joined: 06 Sep 2008, 18:43
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby jpb » 20 Sep 2008, 22:03

There is a bug with Chittering Rats. It should let you select the card you put on top of your library. In MTG Forge it is randomly selected.
jpb
 
Posts: 132
Joined: 05 Sep 2008, 13:12
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby GandoTheBard » 22 Sep 2008, 22:30

Sower of Temptation does not give the creature back when removed from the game, as it should.
visit my personal homepage here: http://outofthebrokensky.com

Listen to my podcast with famed AJ_Impy "Freed from the Real" on http://puremtgo.com
User avatar
GandoTheBard
Tester
 
Posts: 1043
Joined: 06 Sep 2008, 18:43
Has thanked: 0 time
Been thanked: 0 time

Re: Card Bug Report

Postby GandoTheBard » 25 Sep 2008, 20:49

Naturalized an Oblivion Ring that was targetting a creature I controlled...Instead of that creature coming back to play the ring "returned" an elf that it and I had never played to its side of the table.

The next turn it disappeared.
visit my personal homepage here: http://outofthebrokensky.com

Listen to my podcast with famed AJ_Impy "Freed from the Real" on http://puremtgo.com
User avatar
GandoTheBard
Tester
 
Posts: 1043
Joined: 06 Sep 2008, 18:43
Has thanked: 0 time
Been thanked: 0 time

PreviousNext

Return to Forge

Who is online

Users browsing this forum: No registered users and 32 guests

Main Menu

User Menu

Our Partners


Who is online

In total there are 32 users online :: 0 registered, 0 hidden and 32 guests (based on users active over the past 10 minutes)
Most users ever online was 5050 on 26 Jun 2025, 06:02

Users browsing this forum: No registered users and 32 guests

Login Form