It is currently 19 Jul 2019, 03:37
   
Text Size

Bug Reports (snapshot builds)

Post MTG Forge Related Programming Questions Here

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

Re: Bug Reports (snapshot builds)

Postby Hanmac » 19 Jul 2016, 18:57

@Agetian totally my fault, i will try to fix it later.

seems i need to overload chooseSingleEntity instead of the easier chooseSinglePlayer :/

(stupid planeswalker, makes the logic more complicated)

PS: you guys feel free to change something if you think it would make the AI better.

HM now i looking for a AI point where it can choose if it should attack a player or a planeswalker, does exist something like that there?
Hanmac
 
Posts: 942
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 153 times

Re: Bug Reports (snapshot builds)

Postby Agetian » 19 Jul 2016, 19:04

Hmm I'm not exactly sure, to be honest, but my impression is that the AI for the most part used to send the "spawned" tokens at whatever the main creature was sent at. I may be wrong though. :/ It seems like a good idea though that if the creature from which the token was spawned was sent at a planeswalker that the token(s) are sent at that planeswalker too to try to get rid of it. Not always optimal, of course, but seems to be a half-decent "basic default"?

- Agetian
Agetian
Programmer
 
Posts: 3341
Joined: 14 Mar 2011, 05:58
Has thanked: 641 times
Been thanked: 495 times

Re: Bug Reports (snapshot builds)

Postby Hanmac » 19 Jul 2016, 19:13

there was no AI before so it did show me a warning so i tried to add some logic into it.

didn't know that it would result into a crash for some cards.

chooseSingleEntity want its target to be mono conform (same type)
i will try to find some way for that.

is there somewhere a logic if it should attack a Planeswalker or the Player?

===
I fixed "can't gain or have" problem, i split it so that HiddenKeywords does use ABILITY1 for this special keywords too.

===
the problem with Splitcards: thats mostly a graphical problem ... i already tried to fix that, but it seems it didn't work that way yet ...

i for myself would like it that the visual representation of the Split cards are reworked ...

currently they show a combined face, but with a transform swirl for the right one.
then after casting they don't show it anymore.

(and about the state while casting and its on the stack it does look broken sometimes too, even if it isn't)
Hanmac
 
Posts: 942
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 153 times

Re: Bug Reports (snapshot builds)

Postby Agetian » 19 Jul 2016, 19:36

In r31584 I attempted to work around this issue to at least prevent the game from crashing. My fix required to change the return type of changeSinglePlayer because of a possibility of choosing a planeswalker, this is most likely not desirable but I'm not sure how to make this better and cleaner, please consider improving... The current logic is very basic - if the creature that spawned the token was sent at a planeswalker, then all the spawned tokens from it are also sent at that planeswalker. Otherwise, the AI goes through the standard "can't be blocked profitably" routine to determine which target (player/planeswalker) to choose.

- Agetian
Agetian
Programmer
 
Posts: 3341
Joined: 14 Mar 2011, 05:58
Has thanked: 641 times
Been thanked: 495 times

Re: Bug Reports (snapshot builds)

Postby fmartel » 19 Jul 2016, 19:52

Description: [Starting a 4 player Commander game]
It does this in 4p and more

NullPointerException | Open
Code: Select all
Forge Version:    1.5.55-SNAPSHOT-r31583
Operating System: Windows 7 6.1 amd64
Java Version:     1.7.0_25 Oracle Corporation

java.lang.NullPointerException
   at forge.game.staticability.StaticAbility.generateLayer(StaticAbility.java:155)
   at forge.game.staticability.StaticAbility.<init>(StaticAbility.java:204)
   at forge.game.staticability.StaticAbility.<init>(StaticAbility.java:190)
   at forge.game.card.Card.addStaticAbility(Card.java:3338)
   at forge.game.card.CardFactory.buildAbilities(CardFactory.java:329)
   at forge.game.card.CardFactory.getCard(CardFactory.java:273)
   at forge.game.card.CardFactory.getCard(CardFactory.java:265)
   at forge.game.card.Card.fromPaperCard(Card.java:6712)
   at forge.game.Match.preparePlayerLibrary(Match.java:193)
   at forge.game.Match.prepareAllZones(Match.java:257)
   at forge.game.Match.startGame(Match.java:83)
   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)
Last edited by fmartel on 19 Jul 2016, 20:18, edited 1 time in total.
fmartel
 
Posts: 277
Joined: 31 Dec 2013, 19:27
Location: Québec City
Has thanked: 8 times
Been thanked: 4 times

Re: Bug Reports (snapshot builds)

Postby Hanmac » 19 Jul 2016, 19:56

Hm your fix looks good (I was already in bed and wanted it to fix tomorrow)

Hm my idea would be to add more Filterung. Like it does try to kill the player instead of the planeswalker. (I thought there might be some logic like that somewhere)

===
My plans for tomorrow:
  • try to apply my local Keyword fixes, and some more changes to some cards I didn't committed yet.
  • try to rework MayPlay: and add limitation for that. (Like only once each turn)
    For that I might work on some core classes like SpellAbillity. I need to see if I can get it working in the GUI (like "May be played with <card>")
  • looking if I can get the Escalate working, Bonus if I can get it working as Keyword.
  • probably not tomorrow but hopefully this week I want to get Meld working. I did read some rulings for it in commander I want to apply.


@fmartel:
Arg! Damit! I will look at it tomorrow if not someone else is faster.
Hanmac
 
Posts: 942
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 153 times

Re: Bug Reports (snapshot builds)

Postby friarsol » 19 Jul 2016, 23:17

Hanmac wrote:[*] looking if I can get the Escalate working, Bonus if I can get it working as Keyword.
I'd recommend duplicating ManaCostAdjustment as 'CostAdjustment' and have it apply earlier in the spell casting routine. After announcement and targeting, but before you start paying ANY costs should be fine. Then adjust all the existing Cost adjustments to use the new class, and remove the instances of the existing class. Then all the new Escalate cards should be fine + all the other non-mana cost adjustments.
friarsol
Global Moderator
 
Posts: 7455
Joined: 15 May 2010, 04:20
Has thanked: 240 times
Been thanked: 930 times

Re: Bug Reports (snapshot builds)

Postby tjtillman » 20 Jul 2016, 04:07

r31564

Turn 2 CPU played Pale Rider of Trostad, discarding Voldaren Pariah. Voldaren Pariah went into exile as the madness trigger went on the stack, CPU couldn't pay the madness cost as it was tapped out, but then for the rest of the game Voldaren Pariah remained in exile rather than go to the graveyard.
tjtillman
 
Posts: 198
Joined: 16 Sep 2013, 17:47
Has thanked: 0 time
Been thanked: 2 times

Re: Bug Reports (snapshot builds)

Postby rigged » 20 Jul 2016, 04:35

Description: crashes as soon as a start a new game.
5 color sliver deck vs Marcin Staciwa - Mono Blue

NullPointerException | Open
Code: Select all
Forge Version:    1.5.55-SNAPSHOT-r31584
Operating System: Windows 7 6.1 amd64
Java Version:     1.8.0_92 Oracle Corporation

java.lang.NullPointerException
   at forge.game.staticability.StaticAbility.generateLayer(StaticAbility.java:155)
   at forge.game.staticability.StaticAbility.<init>(StaticAbility.java:204)
   at forge.game.staticability.StaticAbility.<init>(StaticAbility.java:190)
   at forge.game.card.Card.addStaticAbility(Card.java:3338)
   at forge.game.card.CardFactory.buildAbilities(CardFactory.java:329)
   at forge.game.card.CardFactory.getCard(CardFactory.java:273)
   at forge.game.card.CardFactory.getCard(CardFactory.java:265)
   at forge.game.card.Card.fromPaperCard(Card.java:6712)
   at forge.game.Match.preparePlayerLibrary(Match.java:193)
   at forge.game.Match.prepareAllZones(Match.java:257)
   at forge.game.Match.startGame(Match.java:83)
   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)
rigged
 
Posts: 56
Joined: 16 Feb 2010, 10:26
Has thanked: 3 times
Been thanked: 2 times

Re: Bug Reports (snapshot builds)

Postby stormcat » 20 Jul 2016, 07:24

:r31588
When a creature with +1/+1 counter dies, it go to the graveyard still have counters.
stormcat
 
Posts: 354
Joined: 17 Jun 2015, 05:32
Has thanked: 0 time
Been thanked: 6 times

Re: Bug Reports (snapshot builds)

Postby Hanmac » 20 Jul 2016, 15:44

r31615:
Falkenrath Gorger currently has a bug if you discard a card that does already have madness:

instead of which of the Replacements you want to apply it just exiles it and put both of on the stack. (the newer one above the other)

first is the Madness from Falkenrath Gorger
below is the Madness from the creature itself.

if you now cancel the first cast, it does go to the graveyard.
and then it is casted from the graveyard. (that is very wrong)

and if you cast it the first time, it ask you to cast it again. (what you can do, which is also wrong.)

i am currently trying to rework it to make it more safer. (i might not fix it totally)

hm i think the first problem is that both ReplacementEffects has the exact same text: Thats why the GUI is helpful and select the first one.
Probably True for the Trigger. If i can make them Different, i maybe can get it working that it work as it should. (probably)

i am currently trying to make it "double proof", which checking:
Code: Select all
ConditionDefined$ Self | ConditionPresent$ Card.StrictlySelf+inZoneExile
Edit:
i pushed my code for Madness. in most cases it sees to be fixed.

i had it that if i discard a card with its own madness, sometimes Falkenrath Gorger does not trigger, but i could not 100% reproduce it when that happens.

Probably when you discard a vamp with two madness, then you select that you want to play it for its own madness, but then cancel the cast, it is possible that the next time you want to discard a vamp with two madness, the one for the Gorger does not trigger :/
Hanmac
 
Posts: 942
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 153 times

Re: Bug Reports (snapshot builds)

Postby fmartel » 20 Jul 2016, 19:21

Description: [In a commander game, attacking AI1 w Olivia Voldaren & Vampire Nighthawk, AI2 w Heirs of Stromkirk & Malakir Bloodwitch, resulting in killing both opponents]

ConcurrentModificationException | Open
Code: Select all
Forge Version:    1.5.55-SNAPSHOT-r31588
Operating System: Windows 7 6.1 amd64
Java Version:     1.7.0_25 Oracle Corporation

java.util.ConcurrentModificationException
   at java.util.TreeMap$PrivateEntryIterator.nextEntry(Unknown Source)
   at java.util.TreeMap$EntryIterator.next(Unknown Source)
   at java.util.TreeMap$EntryIterator.next(Unknown Source)
   at forge.game.card.Card.removeTempController(Card.java:2256)
   at forge.game.Game.onPlayerLost(Game.java:571)
   at forge.game.GameAction.checkGameOverCondition(GameAction.java:1081)
   at forge.game.GameAction.checkStateEffects(GameAction.java:771)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:931)
   at forge.game.GameAction.startGame(GameAction.java:1481)
   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)
fmartel
 
Posts: 277
Joined: 31 Dec 2013, 19:27
Location: Québec City
Has thanked: 8 times
Been thanked: 4 times

Re: Bug Reports (snapshot builds)

Postby fmartel » 20 Jul 2016, 20:13

Description: [In a commander game, attacking AI2 w 5x Angel (token), AI3 2x Angel (token) 6x Saproling (token)]

StackOverflowError | Open
Code: Select all
Forge Version:    1.5.55-SNAPSHOT-r31588
Operating System: Windows 7 6.1 amd64
Java Version:     1.7.0_25 Oracle Corporation

java.lang.StackOverflowError
   at forge.game.card.Card.hasProperty(Card.java:3650)
   at forge.game.card.Card.isValid(Card.java:3639)
   at forge.game.GameObject.isValid(GameObject.java:27)
   at forge.game.card.CardPredicates$16.apply(CardPredicates.java:178)
   at forge.game.card.CardPredicates$16.apply(CardPredicates.java:175)
   at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
   at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
   at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
   at forge.util.collect.FCollection.<init>(FCollection.java:90)
   at forge.game.card.CardCollection.<init>(CardCollection.java:115)
   at forge.game.card.CardLists.filter(CardLists.java:255)
   at forge.game.card.CardLists.getValidCards(CardLists.java:185)
   at forge.game.cost.CostSacrifice.canPay(CostSacrifice.java:93)
   at forge.game.cost.CostPayment.canPayAdditionalCosts(CostPayment.java:96)
   at forge.game.spellability.AbilityActivated.canPlay(AbilityActivated.java:117)
   at forge.game.spellability.SpellAbilityView.updateCanPlay(SpellAbilityView.java:57)
   at forge.game.spellability.SpellAbility.setActivatingPlayer(SpellAbility.java:282)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:648)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:289)
   at forge.ai.ComputerUtilCombat.lifeInSeriousDanger(ComputerUtilCombat.java:453)
   at forge.ai.ComputerUtil.getCardPreference(ComputerUtil.java:326)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:260)
   at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:313)
   at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:660)
   at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1761)
   at forge.ai.ComputerUtilCombat.shieldDamage(ComputerUtilCombat.java:607)
   at forge.ai.ComputerUtilCombat.totalShieldDamage(ComputerUtilCombat.java:586)
   at forge.ai.ComputerUtilCombat.lifeThatWouldRemain(ComputerUtilCombat.java:2
... (truncated)
fmartel
 
Posts: 277
Joined: 31 Dec 2013, 19:27
Location: Québec City
Has thanked: 8 times
Been thanked: 4 times

Re: Bug Reports (snapshot builds)

Postby tjtillman » 21 Jul 2016, 23:28

Very minor, r31588

TriggerDescription for Extricator of Sin references Autumnal Gloom instead of itself
tjtillman
 
Posts: 198
Joined: 16 Sep 2013, 17:47
Has thanked: 0 time
Been thanked: 2 times

Re: Bug Reports (snapshot builds)

Postby Hanmac » 22 Jul 2016, 06:16

r31630:

Life's Finale destroys all my creatures.
One of them was a Zulaport Cutthroat or Wayward Disciple.
Zulaport Cutthroat does only trigger for itself,
the Trigger for the other creatures did not happen.

for a different card like Damnation it does work as it should.

Probably something wrong with the ChangesZone Trigger?

===

Work:

does not Work:

What it does look like is that ChangesZoneTrigger has problems with Cards that uses DestroyAll, but with SubAbility.

Someone with more Experience than I might look at this :/
But i will try to Investigate what that problem might be.

===
Edit: i manage to fix it a bit.

with changes in LKICopy and TriggerHandler, i manage to get it working for Zulaport Cutthroat. But it still does not work for Wayward Disciple.

Probably the Trigger seems to be removed, because TriggerChangesZone does not trigger.
Last edited by Hanmac on 22 Jul 2016, 09:30, edited 1 time in total.
Hanmac
 
Posts: 942
Joined: 06 May 2013, 18:44
Has thanked: 229 times
Been thanked: 153 times

PreviousNext

Return to Developer's Corner

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 287 on 31 Mar 2019, 04:11

Users browsing this forum: No registered users and 10 guests

Login Form