Page 400 of 487

Re: Bug Reports (snapshot builds)

PostPosted: 01 Jan 2017, 18:53
by Djebb
Yo !

This happens anytime i attack with an Identity Thief

Code: Select all
Description: [describe what you were doing when the crash occurred]

[spoiler=ClassCastException][code]
Forge Version:    1.5.58-SNAPSHOT-r32843
Operating System: Windows 10 10.0 amd64
Java Version:     1.8.0_111 Oracle Corporation

java.lang.ClassCastException: forge.game.ability.AbilityApiBased cannot be cast to forge.game.spellability.AbilitySub
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:415)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:237)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:131)
   at forge.game.trigger.TriggerHandler.runSingleTrigger(TriggerHandler.java:553)
   at forge.game.trigger.TriggerHandler.runNonStaticTriggersForPlayer(TriggerHandler.java:416)
   at forge.game.trigger.TriggerHandler.runWaitingTrigger(TriggerHandler.java:358)
   at forge.game.trigger.TriggerHandler.runWaitingTriggers(TriggerHandler.java:307)
   at forge.game.zone.MagicStack.unfreezeStack(MagicStack.java:163)
   at forge.game.phase.PhaseHandler.onPhaseBegin(PhaseHandler.java:268)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:977)
   at forge.game.GameAction.startGame(GameAction.java:1456)
   at forge.game.Match.startGame(Match.java:95)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)
[/spoiler]

Re: Bug Reports (snapshot builds)

PostPosted: 01 Jan 2017, 19:26
by Hanmac
@Djebb: fixed in r32921.

Re: Bug Reports (snapshot builds)

PostPosted: 01 Jan 2017, 20:31
by Nekoatl
Description: This happens when a sliver is played while Mesmeric Sliver is on the battlefield.

RuntimeException | Open
Code: Select all
Forge Version:    1.5.58-SNAPSHOT-r32716
Operating System: Windows 10 10.0 amd64
Java Version:     1.8.0_101 Oracle Corporation

java.lang.RuntimeException: AbilityFactory : getAbility -- Manaweft Sliver has no SVar: ChooseP
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:137)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:131)
   at forge.game.trigger.TriggerHandler.runSingleTrigger(TriggerHandler.java:553)
   at forge.game.trigger.TriggerHandler.runNonStaticTriggersForPlayer(TriggerHandler.java:416)
   at forge.game.trigger.TriggerHandler.runWaitingTrigger(TriggerHandler.java:358)
   at forge.game.trigger.TriggerHandler.runWaitingTriggers(TriggerHandler.java:307)
   at forge.game.zone.MagicStack.unfreezeStack(MagicStack.java:163)
   at forge.game.zone.MagicStack.finishResolving(MagicStack.java:543)
   at forge.game.zone.MagicStack.resolveStack(MagicStack.java:521)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:980)
   at forge.game.GameAction.startGame(GameAction.java:1451)
   at forge.game.Match.startGame(Match.java:95)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)

Re: Bug Reports (snapshot builds)

PostPosted: 01 Jan 2017, 22:08
by Marek14
Shrine of the Forsaken Gods has a typo in its second ability (the cost is listed twice).

Re: Bug Reports (snapshot builds)

PostPosted: 01 Jan 2017, 22:10
by Djebb
Hanmac wrote:@Djebb: fixed in r32921.
nice !

Re: Bug Reports (snapshot builds)

PostPosted: 02 Jan 2017, 04:58
by Agetian
Nekoatl wrote:Description: This happens when a sliver is played while Mesmeric Sliver is on the battlefield.

RuntimeException | Open
Code: Select all
Forge Version:    1.5.58-SNAPSHOT-r32716
Operating System: Windows 10 10.0 amd64
Java Version:     1.8.0_101 Oracle Corporation

java.lang.RuntimeException: AbilityFactory : getAbility -- Manaweft Sliver has no SVar: ChooseP
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:137)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:131)
   at forge.game.trigger.TriggerHandler.runSingleTrigger(TriggerHandler.java:553)
   at forge.game.trigger.TriggerHandler.runNonStaticTriggersForPlayer(TriggerHandler.java:416)
   at forge.game.trigger.TriggerHandler.runWaitingTrigger(TriggerHandler.java:358)
   at forge.game.trigger.TriggerHandler.runWaitingTriggers(TriggerHandler.java:307)
   at forge.game.zone.MagicStack.unfreezeStack(MagicStack.java:163)
   at forge.game.zone.MagicStack.finishResolving(MagicStack.java:543)
   at forge.game.zone.MagicStack.resolveStack(MagicStack.java:521)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:980)
   at forge.game.GameAction.startGame(GameAction.java:1451)
   at forge.game.Match.startGame(Match.java:95)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)
Fixed (r32930).

- Agetian

Re: Bug Reports (snapshot builds)

PostPosted: 02 Jan 2017, 05:00
by Agetian
Marek14 wrote:Shrine of the Forsaken Gods has a typo in its second ability (the cost is listed twice).
Fixed (r32931).

- Agetian

Re: Bug Reports (snapshot builds)

PostPosted: 02 Jan 2017, 20:14
by Devilman06
There seems to be an Issue with planechase in relation to commander. It doesn't use the custom planechase decks and instead opts for a random deck everytime. When you choose the decks then choose the planechase deck it blanks out the opponents deck every time.

Re: Bug Reports (snapshot builds)

PostPosted: 03 Jan 2017, 01:35
by sugus
This happens when 'Faerie Artisans' ability is put on the stack:

Code: Select all
Description: [describe what you were doing when the crash occurred]

[spoiler=NullPointerException][code]
Forge Version:    1.5.58-SNAPSHOT-r32816
Operating System: Windows 8.1 6.3 x86
Java Version:     1.8.0_31 Oracle Corporation

java.lang.NullPointerException
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:236)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:415)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:229)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:131)
   at forge.game.trigger.TriggerHandler.runSingleTrigger(TriggerHandler.java:553)
   at forge.game.trigger.TriggerHandler.runNonStaticTriggersForPlayer(TriggerHandler.java:416)
   at forge.game.trigger.TriggerHandler.runWaitingTrigger(TriggerHandler.java:362)
   at forge.game.trigger.TriggerHandler.runWaitingTriggers(TriggerHandler.java:307)
   at forge.game.zone.MagicStack.unfreezeStack(MagicStack.java:163)
   at forge.game.zone.MagicStack.finishResolving(MagicStack.java:543)
   at forge.game.zone.MagicStack.resolveStack(MagicStack.java:521)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:980)
   at forge.game.GameAction.startGame(GameAction.java:1456)
   at forge.game.Match.startGame(Match.java:95)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

Re: Bug Reports (snapshot builds)

PostPosted: 03 Jan 2017, 06:28
by Agetian
sugus wrote:This happens when 'Faerie Artisans' ability is put on the stack:
<...>
Hm, this is an odd card. It crashes because of a typo and AB/DB thing (AB$ with Cost 0 needs to be changed to DB$), but even if that is corrected, the card still works incorrectly, and in a big way - basically it exiles every single card on the battlefield, completely wiping it. I took at look at the code and it looks like the way it's trying to do it (via ChangeZoneAll and Imprinted) does not work since that returns all the cards instead of only the imprinted ones as expected by the script (no idea if that's intentional in that ChangeZoneAll code path, btw). How should we best rewrite this card? :/ Can using Imprint be avoided in this script?

Here's a script that does not crash but it wipes the entire battlefield in one big swoosh:
Code: Select all
Name:Faerie Artisans
ManaCost:3 U
Types:Creature Faerie Artificer
PT:2/2
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonToken+OppCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigImprint | TriggerDescription$Whenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except that it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
SVar:TrigImprint:DB$ Pump | ImprintCards$ Remembered | SubAbility$ DBCopy
SVar:DBCopy:DB$ CopyPermanent | Defined$ TriggeredCard | Controller$ You | AddTypes$ Artifact | RememberCopied$ True | SubAbility$ DBChangeZoneAll
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Imprinted
DeckHas:Ability$Token
SVar:Picture:http://www.wizards.com/global/images/magic/general/faerie_artisans.jpg
Oracle:Flying\nWhenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except that it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
- Agetian

Re: Bug Reports (snapshot builds)

PostPosted: 03 Jan 2017, 14:21
by friarsol
Agetian wrote:
sugus wrote:This happens when 'Faerie Artisans' ability is put on the stack:
<...>
Hm, this is an odd card. It crashes because of a typo and AB/DB thing (AB$ with Cost 0 needs to be changed to DB$), but even if that is corrected, the card still works incorrectly, and in a big way - basically it exiles every single card on the battlefield, completely wiping it. I took at look at the code and it looks like the way it's trying to do it (via ChangeZoneAll and Imprinted) does not work since that returns all the cards instead of only the imprinted ones as expected by the script (no idea if that's intentional in that ChangeZoneAll code path, btw). How should we best rewrite this card? :/ Can using Imprint be avoided in this script?

Here's a script that does not crash but it wipes the entire battlefield in one big swoosh:
Code: Select all
Name:Faerie Artisans
ManaCost:3 U
Types:Creature Faerie Artificer
PT:2/2
K:Flying
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Creature.nonToken+OppCtrl | TriggerZones$ Battlefield | OptionalDecider$ You | Execute$ TrigImprint | TriggerDescription$Whenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except that it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
SVar:TrigImprint:DB$ Pump | ImprintCards$ Remembered | SubAbility$ DBCopy
SVar:DBCopy:DB$ CopyPermanent | Defined$ TriggeredCard | Controller$ You | AddTypes$ Artifact | RememberCopied$ True | SubAbility$ DBChangeZoneAll
SVar:DBChangeZoneAll:DB$ ChangeZoneAll | Origin$ Battlefield | Destination$ Exile | ChangeType$ Imprinted
DeckHas:Ability$Token
SVar:Picture:http://www.wizards.com/global/images/magic/general/faerie_artisans.jpg
Oracle:Flying\nWhenever a nontoken creature enters the battlefield under an opponent's control, create a token that's a copy of that creature except that it's an artifact in addition to its other types. Then exile all other tokens created with Faerie Artisans.
- Agetian
I think ChangeType goes through the "Valid" path not the "Defined" path. So it would need to be Card.IsImprinted (or whatever the appropriate name is).

Re: Bug Reports (snapshot builds)

PostPosted: 03 Jan 2017, 14:33
by Agetian
Thanks, Sol! That did the trick! :)

- Agetian

Re: Bug Reports (snapshot builds)

PostPosted: 03 Jan 2017, 18:59
by Marek14
I still notice some odd failures to play AI suspend cards, but in addition, the ability of Curse of the Cabal doesn't trigger.

Re: Bug Reports (snapshot builds)

PostPosted: 05 Jan 2017, 05:39
by stormcat
:r32968
Mulligan's rule in multiplayer game has not applied to the commander game.(rule 103.4c)

Re: Bug Reports (snapshot builds)

PostPosted: 05 Jan 2017, 19:10
by pfps
Ordering of Simultaneous Abilities
Revision: 32943

[I put an initial report on this problem in the beta list, but I've been
working on it from the current SVN so I guess reporting here is best.]

The ordering of simultaneous abilities isn't working correctly. The problem
is that these abilities are represented by their toString() values, which
are insufficient to distinguish between abilities whose odering matters.
For example, Evolve abilities all have the same toString() value, but it is
often best to evolve Renegade Krasis last, and all Amulet of Vigor untap
abilities have the same toString() value, but sometimes the untaps should be
done in a particular order. With the recent addition of automatic ordering
there is no way to reorder these abilities so this has changed from an
annoyance to a bug.

I have made some changes to fix the problem:

0/ Add the ability to see the card of the trigger of a wrapped ability in
a dual list box. This doesn't do anything to fix the problem, but is a nice
addition to the desktop gui, I think. It is a small self-contained change
to forge-gui-desktop/src/main/java/forge/gui/DualListBox.java

1/ Use the stack description as the toString() of a wrapped ability. This
adds in most of the relevant information. I have made this change in
forge-game/src/main/java/forge/game/trigger/WrappedAbility.java
without lifting the final status of toString() higher up. It might be
better to change the status of toString() to allow a nicer change.

2/ Augment the stack description with the toString() of the host card if the
stack description doesn't include it already and the stack description
includes 'this' as a word. This is to fix evolve, which has text
"Evolve (Whenever a creature enters the battlefield under your control, if
that creature has greater power or toughness than this creature, put a +1/+1
counter on this creature.)". Perhaps a better solution would be to modify
all these abilities to include CARDNAME, but that would require looking at
all the card descriptions.

3/ Use the toString() of a card as the replacement for CARDNAME and
EFFECTSOURCE instead of the name of the card, to distinguish between
different cards with the same name. I have made this change in
forge-game/src/main/java/forge/game/trigger/Trigger.java

These changes are overkill in that abilities that do the same thing can end
up looking different but a real solution would require a major amount
of work.

I can commit these changes if it is felt that they are reasonable.