Bug Reports (snapshot builds)
Post MTG Forge Related Programming Questions Here
Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins
Re: Bug Reports (snapshot builds)
by krevett » 20 Aug 2014, 18:10
Or just revert to the old system when you hit end turn the phase pause when the AI attacks or plays a spell? This way you have all the time needed for an answer. Since the implementation of this delay I don't use this button anymore...
- krevett
- Posts: 109
- Joined: 21 Feb 2012, 22:24
- Location: France
- Has thanked: 18 times
- Been thanked: 9 times
Re: Bug Reports (snapshot builds)
by Agetian » 20 Aug 2014, 18:22
Yes this might be a good idea too, at least as an option.krevett wrote:Or just revert to the old system when you hit end turn the phase pause when the AI attacks or plays a spell? This way you have all the time needed for an answer. Since the implementation of this delay I don't use this button anymore...
I agree that the only time this button is useful as it is right now is when you're tapped out and have no other abilities (e.g. the ones activated purely by tapping) that you may want to consider in response to the opponent's action.
- Agetian
- Agetian
- Programmer
- Posts: 3486
- Joined: 14 Mar 2011, 05:58
- Has thanked: 683 times
- Been thanked: 569 times
Re: Bug Reports (snapshot builds)
by Fizanko » 20 Aug 2014, 19:24
I just noticed that the quest challenge decks are available in the Preconstructed game mode if you set the deck list to "Quest Opponent Decks" .
Instead of the name of the deck you have the deck listed as questxxx with xxx being the number/id assigned to the challenge.
The problem is that if you select one of those list questxxx decks for yourself or for the AI, when you press Start you have :
Description: [describe what you were doing when the crash occurred]
I never noticed they were available prior this snapshot since i play Forge, so i can't say if they worked before or if the bug is new.
Instead of the name of the deck you have the deck listed as questxxx with xxx being the number/id assigned to the challenge.
The problem is that if you select one of those list questxxx decks for yourself or for the AI, when you press Start you have :
Description: [describe what you were doing when the crash occurred]
- NoSuchElementException | Open
- Code: Select all
Forge Version: 1.5.25-SNAPSHOT-r27084 (mixed revisions detected; please update from the root directory)
Operating System: Windows XP 5.1 x86
Java Version: 1.7.0_10 Oracle Corporation
java.util.NoSuchElementException
at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154)
at com.google.common.collect.Iterators.find(Iterators.java:712)
at com.google.common.collect.Iterables.find(Iterables.java:642)
at forge.deck.DeckgenUtil.getQuestEvent(DeckgenUtil.java:93)
at forge.deckchooser.FDeckChooser.getPlayer(FDeckChooser.java:233)
at forge.screens.home.sanctioned.CSubmenuConstructed.startGame(CSubmenuConstructed.java:193)
at forge.screens.home.sanctioned.CSubmenuConstructed.access$100(CSubmenuConstructed.java:46)
at forge.screens.home.sanctioned.CSubmenuConstructed$2.actionPerformed(CSubmenuConstructed.java:158)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
I never noticed they were available prior this snapshot since i play Forge, so i can't say if they worked before or if the bug is new.
probably outdated by now so you should avoid : Innistrad world for Forge (updated 17/11/2014)
Duel Decks for Forge - Forge custom decks (updated 25/10/2014)
Duel Decks for Forge - Forge custom decks (updated 25/10/2014)
Re: Bug Reports (snapshot builds)
by drdev » 20 Aug 2014, 19:26
How about this. What if I made it so spells/abilities on the stack already when you click End Turn are auto-yielded, but it doesn't auto-yield if a new spell or activated ability goes on the stack after that. That way you can use the End Turn button to auto-yield to a storm spell nicely and avoid needing to manually OK abilities at end of turn, but aren't caught off guard by a spell or ability you didn't expect. I could also try to make it smart enough to still yield to new spells if you have nothing you can do in response (aka, no spell you can cast or abilities you can activate).
Would that alleviate everyone's concerns without adding unnecessary settings? Or would people still want settings to tweak the delays?
As for the issue with skipping the attack phase for must-attack creatures, should you still be given the option to declare other attackers, are should it just auto-attack with only those creatures that must attack and not prompt you for any input?
Would that alleviate everyone's concerns without adding unnecessary settings? Or would people still want settings to tweak the delays?
As for the issue with skipping the attack phase for must-attack creatures, should you still be given the option to declare other attackers, are should it just auto-attack with only those creatures that must attack and not prompt you for any input?
Last edited by drdev on 20 Aug 2014, 19:46, edited 3 times in total.
- drdev
- Programmer
- Posts: 1958
- Joined: 27 Jul 2013, 02:07
- Has thanked: 189 times
- Been thanked: 565 times
Re: Bug Reports (snapshot builds)
by Fizanko » 20 Aug 2014, 19:33
To my surprise i became used to the slightly slower delay, so i'm not sure what would be a better choice, assuming there's any.
probably outdated by now so you should avoid : Innistrad world for Forge (updated 17/11/2014)
Duel Decks for Forge - Forge custom decks (updated 25/10/2014)
Duel Decks for Forge - Forge custom decks (updated 25/10/2014)
Re: Bug Reports (snapshot builds)
by Thesaguy » 20 Aug 2014, 23:33
I don't think the "lifelink" on the card Eternal Thirst (M15) is working.
I don't seem to get any life from it.
I don't seem to get any life from it.
Re: Bug Reports (snapshot builds)
by friarsol » 21 Aug 2014, 00:05
Works fine for me. Are you sure there aren't any cards in play that prevent you from gaining life?Thesaguy wrote:I don't think the "lifelink" on the card Eternal Thirst (M15) is working.
I don't seem to get any life from it.
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Bug Reports (snapshot builds)
by friarsol » 21 Aug 2014, 01:21
Got the following crash in an AI vs AI game:
AI had an Apostle's Blessing in hand, and two fairly non-descript creatures in play.
AI had an Apostle's Blessing in hand, and two fairly non-descript creatures in play.
- NullPointerException | Open
- Code: Select all
Forge Version: SVN
Operating System: Windows 8 6.2 amd64
Java Version: 1.7.0_51 Oracle Corporation
java.lang.NullPointerException
at forge.ai.AiAttackController.toProtectAttacker(AiAttackController.java:1092)
at forge.ai.ability.ProtectAi$1.apply(ProtectAi.java:146)
at forge.ai.ability.ProtectAi$1.apply(ProtectAi.java:107)
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 com.google.common.collect.Iterators.addAll(Iterators.java:356)
at com.google.common.collect.Lists.newArrayList(Lists.java:147)
at com.google.common.collect.Lists.newArrayList(Lists.java:129)
at forge.game.card.CardLists.filter(CardLists.java:225)
at forge.ai.ability.ProtectAi.getProtectCreatures(ProtectAi.java:107)
at forge.ai.ability.ProtectAi.protectTgtAI(ProtectAi.java:248)
at forge.ai.ability.ProtectAi.canPlayAI(ProtectAi.java:231)
at forge.ai.SpellAbilityAi.canPlayAIWithSubs(SpellAbilityAi.java:23)
at forge.ai.AiController.canPlaySa(AiController.java:650)
at forge.ai.AiController.canPlayAndPayFor(AiController.java:637)
at forge.ai.AiController.chooseSpellAbilyToPlay(AiController.java:1173)
at forge.ai.AiController.getSpellAbilityToPlay(AiController.java:1154)
at forge.ai.AiController.choooseSpellAbilityToPlay(AiController.java:1110)
at forge.ai.PlayerControllerAi.chooseSpellAbilityToPlay(PlayerControllerAi.java:415)
at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:1012)
at forge.game.GameAction.startGame(GameAction.java:1558)
at forge.game.Match.startGame(Match.java:81)
at forge.control.FControl$4.run(FControl.java:447)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Bug Reports (snapshot builds)
by Agetian » 21 Aug 2014, 03:52
Thr proposal about not yielding to new spells and abilities sounds very reasonable, i think it'll work just fine. As far as attacking goes - not sure, to be honest. Probably it's ok not to stop cause the player wanted to explicitly end the turn, but if blockers are declared by the opponent (e.g. for the auto-attacking creature), i think it's worth to stop and let the player respond, like with the other new events.drdev wrote:How about this. What if I made it so spells/abilities on the stack already when you click End Turn are auto-yielded, but it doesn't auto-yield if a new spell or activated ability goes on the stack after that. That way you can use the End Turn button to auto-yield to a storm spell nicely and avoid needing to manually OK abilities at end of turn, but aren't caught off guard by a spell or ability you didn't expect. I could also try to make it smart enough to still yield to new spells if you have nothing you can do in response (aka, no spell you can cast or abilities you can activate).
Would that alleviate everyone's concerns without adding unnecessary settings? Or would people still want settings to tweak the delays?
As for the issue with skipping the attack phase for must-attack creatures, should you still be given the option to declare other attackers, are should it just auto-attack with only those creatures that must attack and not prompt you for any input?
- Agetian
- Programmer
- Posts: 3486
- Joined: 14 Mar 2011, 05:58
- Has thanked: 683 times
- Been thanked: 569 times
Re: Bug Reports (snapshot builds)
by krevett » 21 Aug 2014, 07:44
I agree with Agetian, I think there's no need to have multiple options for handling this just make it so that the human player can't be surprised by something he didn't expect. And as suggested adding a pause if blockers are declared to adjust is a good idea!
- krevett
- Posts: 109
- Joined: 21 Feb 2012, 22:24
- Location: France
- Has thanked: 18 times
- Been thanked: 9 times
Re: Bug Reports (snapshot builds)
by excessum » 21 Aug 2014, 12:22
I have no idea what is causing this or the earlier version in viewtopic.php?f=26&t=14610&p=153946&hilit=goblin+wizard#p153946. I did not see errors with Goblin Wizard granting itself protection and attacking even with the original version of my code in r26262. Similarly, I do not see any errors with Apostle's Blessing in the HEAD revision.friarsol wrote:Got the following crash in an AI vs AI game:
AI had an Apostle's Blessing in hand, and two fairly non-descript creatures in play.
Do you still remember the exact board state? AiAttackController.java:1092 is referring to "color" in the switch block and I fail to see how you can get a null pointer at that stage.
Re: Bug Reports (snapshot builds)
by friarsol » 21 Aug 2014, 13:56
It was a draft tournament with Scars of Mirrodin decks, and it was fast forwarding through the AI match, so I wasn't watching that closely. The active player had two creatures, neither of which seemed to have any relevant abilities. The defending player had two blockers. Don't know which colors the blocker had, since that's probably the information that is being looked up. Maybe one was an artifact so it was coming back as colorless?excessum wrote:Do you still remember the exact board state? AiAttackController.java:1092 is referring to "color" in the switch block and I fail to see how you can get a null pointer at that stage.
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Bug Reports (snapshot builds)
by fmartel » 21 Aug 2014, 16:39
Hello all. In playing a Gauntlet, in the middle of a game I got this crash.
- NullPointerException | Open
- Code: Select all
Forge Version: 1.5.24-r27072
Operating System: Windows 7 6.1 amd64
Java Version: 1.8.0_11 Oracle Corporation
java.lang.NullPointerException
at forge.game.ability.AbilityUtils.applyAbilityTextChangeEffects(AbilityUtils.java:1521)
at forge.game.ability.AbilityUtils.getDefinedCards(AbilityUtils.java:84)
at forge.ai.ComputerUtilCombat.predictPowerBonusOfAttacker(ComputerUtilCombat.java:1133)
at forge.ai.ComputerUtilCombat.damageIfUnblocked(ComputerUtilCombat.java:127)
at forge.ai.AiAttackController.declareAttackers(AiAttackController.java:690)
at forge.ai.AiController.declareAttackers(AiController.java:1126)
at forge.ai.PlayerControllerAi.declareAttackers(PlayerControllerAi.java:405)
at forge.game.phase.PhaseHandler.declareAttackersTurnBasedAction(PhaseHandler.java:474)
at forge.game.phase.PhaseHandler.onPhaseBegin(PhaseHandler.java:291)
at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:1060)
at forge.game.GameAction.startGame(GameAction.java:1558)
at forge.game.Match.startGame(Match.java:81)
at forge.control.FControl$4.run(FControl.java:442)
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: 281
- Joined: 31 Dec 2013, 19:27
- Location: Québec City
- Has thanked: 8 times
- Been thanked: 4 times
Re: Bug Reports (snapshot builds)
by Nanaki404 » 21 Aug 2014, 19:53
Forge Version: 1.5.23-r26900
Mana Reflection seems to produce too much mana when using mana abilities during the casting of a spell (i.e., with 1 mana reflection in play, if I try to play a spell, each land tapped reduce the remaining cost by 4 instead of 2).
Happens both with lands and creatures (such as Rofellos, Llanowar Emissary).
If I have several (n) Mana Reflection, instead of procuding 2^n mana, it produces twice that (2^(n+1)), so as if I had one more.
Mana Reflection seems to produce too much mana when using mana abilities during the casting of a spell (i.e., with 1 mana reflection in play, if I try to play a spell, each land tapped reduce the remaining cost by 4 instead of 2).
Happens both with lands and creatures (such as Rofellos, Llanowar Emissary).
If I have several (n) Mana Reflection, instead of procuding 2^n mana, it produces twice that (2^(n+1)), so as if I had one more.
- Nanaki404
- Posts: 3
- Joined: 07 Aug 2014, 22:11
- Has thanked: 0 time
- Been thanked: 0 time
Re: Bug Reports (snapshot builds)
by fmartel » 21 Aug 2014, 20:04
this is when playing a contructed format "vanguard" (I think)
- ConcurrentModificationException | Open
- Code: Select all
Forge Version: 1.5.24-r27072
Operating System: Windows 7 6.1 amd64
Java Version: 1.8.0_11 Oracle Corporation
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at com.google.common.collect.AbstractMapBasedMultimap$Itr.next(AbstractMapBasedMultimap.java:1150)
at forge.game.combat.Combat.getAttackers(Combat.java:197)
at forge.screens.match.TargetingOverlay.addArcsForCard(TargetingOverlay.java:234)
at forge.screens.match.TargetingOverlay.assembleArcs(TargetingOverlay.java:139)
at forge.screens.match.TargetingOverlay.access$100(TargetingOverlay.java:48)
at forge.screens.match.TargetingOverlay$OverlayPanel.paintComponent(TargetingOverlay.java:354)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1100(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
- fmartel
- Posts: 281
- Joined: 31 Dec 2013, 19:27
- Location: Québec City
- Has thanked: 8 times
- Been thanked: 4 times
Who is online
Users browsing this forum: No registered users and 68 guests