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 RumbleBBU » 07 Feb 2014, 07:06
Current SVN (r24709).
1) Minor bug. Whenever I go to the Quest decks screen, the first deck becomes selected (instead of retaining the previous deck selection). That's not how it used to work.
2) Bug or user stupidity. I can't figure out how to resize the columns in the spell shop anymore. The default price column size is too narrow to display card prices that are in thousands. Clicking to drag and stretch does not work anymore.
Not really bugs (except in the sense that these bug me...
)
- Autotapping is cool. Except when it autotaps something when you expect your spacebar simply to skip to the next phase. Case in point, I attack with my looting bird pet, and hit space...now resulting in autotap and looting. Not cool when I had exactly one spell - that I was planning to cast this turn - and now no longer have the untapped mana to do so, and also must discard either that spell or the card I just drew. Very uncool ...but I don't really know how solve this elegantly. Maybe I'll just have to learn to play more cautiously, especially with certain cards in play.
- Is there an option to turn off the confirmation to sell/buy cards in the spell store? If not, perhaps there should be.
1) Minor bug. Whenever I go to the Quest decks screen, the first deck becomes selected (instead of retaining the previous deck selection). That's not how it used to work.
2) Bug or user stupidity. I can't figure out how to resize the columns in the spell shop anymore. The default price column size is too narrow to display card prices that are in thousands. Clicking to drag and stretch does not work anymore.
Not really bugs (except in the sense that these bug me...

- Autotapping is cool. Except when it autotaps something when you expect your spacebar simply to skip to the next phase. Case in point, I attack with my looting bird pet, and hit space...now resulting in autotap and looting. Not cool when I had exactly one spell - that I was planning to cast this turn - and now no longer have the untapped mana to do so, and also must discard either that spell or the card I just drew. Very uncool ...but I don't really know how solve this elegantly. Maybe I'll just have to learn to play more cautiously, especially with certain cards in play.
- Is there an option to turn off the confirmation to sell/buy cards in the spell store? If not, perhaps there should be.
Re: Bug Reports (snapshot builds)
by drdev » 07 Feb 2014, 15:21
RumbleBBU, you're not doing anything wrong. I marked certain columns with a fixed size so that Swing would resize other columns like name as is ideal. I think what I will do is make it so, when you mouse down to begin a resize, the size restriction is removed temporarily then restored after you finish resizing. That should improve usability while still supporting Swing in good autosizing.
The quest deck issue I'll look into, and I can add a setting to not show confirmation prompts for buying and selling cards, though the default will remain to show them.
How's that sound?
The quest deck issue I'll look into, and I can add a setting to not show confirmation prompts for buying and selling cards, though the default will remain to show them.
How's that sound?
- drdev
- Programmer
- Posts: 1958
- Joined: 27 Jul 2013, 02:07
- Has thanked: 189 times
- Been thanked: 565 times
Re: Bug Reports (snapshot builds)
by friarsol » 07 Feb 2014, 23:46
r24715
The popup that you receive whenever an opponent chooses a color is fine for most things, but when the AI is paying mana it's very.. jarring. Just right now my opponent has 3 Vivid lands, and I have to click-through 3 popups just to find out what he's casting. The game before this he had 3 Forbidden Orchard. I'm starting to feel like it's the late 90s internet.
The popup that you receive whenever an opponent chooses a color is fine for most things, but when the AI is paying mana it's very.. jarring. Just right now my opponent has 3 Vivid lands, and I have to click-through 3 popups just to find out what he's casting. The game before this he had 3 Forbidden Orchard. I'm starting to feel like it's the late 90s internet.
- 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 » 08 Feb 2014, 04:29
I agree that this feature practically sounds like a bug when it comes to the AI opponent paying mana... I think a better way to show this will be to move this over to the log (so that if the player is interested in how exactly the colors were chosen, e.g. to make sure the AI didn't cheat, he can look in the log).friarsol wrote:r24715
The popup that you receive whenever an opponent chooses a color is fine for most things, but when the AI is paying mana it's very.. jarring. Just right now my opponent has 3 Vivid lands, and I have to click-through 3 popups just to find out what he's casting. The game before this he had 3 Forbidden Orchard. I'm starting to feel like it's the late 90s internet.
- 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 friarsol » 08 Feb 2014, 05:01
r24717
Ok, I've finally run into my first issue with the trigger fixes that Max committed last week.
Here's the setup:
Add an Overburden to the AIs battlefield, make sure you have a land or two in play. And cast any creature. In most cases when your creature ETB, the Overburden trigger does not hit the stack immediately like it should. (Maybe because the owner of the trigger doesn't have priority yet?) So I press spacebar to pass priority, and then the trigger hits the stack. I cast and resolved a creature with Flash during my opponent's Declare Attackers step, and the trigger hit the stack after resolution as expected.
Additionally, it seems like when I pass priority that the trigger hits the stack and resolves immediately, so there definitely seems like there's some oddities going on here.
Ok, I've finally run into my first issue with the trigger fixes that Max committed last week.
Here's the setup:
Add an Overburden to the AIs battlefield, make sure you have a land or two in play. And cast any creature. In most cases when your creature ETB, the Overburden trigger does not hit the stack immediately like it should. (Maybe because the owner of the trigger doesn't have priority yet?) So I press spacebar to pass priority, and then the trigger hits the stack. I cast and resolved a creature with Flash during my opponent's Declare Attackers step, and the trigger hit the stack after resolution as expected.
Additionally, it seems like when I pass priority that the trigger hits the stack and resolves immediately, so there definitely seems like there's some oddities going on here.
- 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 » 08 Feb 2014, 08:13
r24719: Ok, this was amazingly weird and random... I hit Space to auto-tap mana for my Vampiric Nighthawk. It was the very beginning of the game, I had one Island and two Swamps in play and nothing else. My opponent had two Islands. Once I hit the auto-tap, the exception below appeared, and then it seems AI took over the game completely and the game proceeded in an AI vs. AI fashion at lightning speed, and in less than a second I got a message that I won the match (both players were controlled by the AI and there was a lot of stuff cast indeed, both on my side and on the opponent's side). This is the first time ever I see an exception like that (with the mentioned consequences).
- NoSuchElementException | Open
- Code: Select all
Forge Version: 1.5.13-SNAPSHOT-r${forge.revision}${forge.specialStatus} (mixed revisions detected; please update from the root directory)
Operating System: Linux 3.8.0-26-generic amd64
Java Version: 1.7.0_51 Oracle Corporation
java.util.NoSuchElementException
at java.util.concurrent.LinkedBlockingDeque.removeFirst(LinkedBlockingDeque.java:450)
at java.util.concurrent.LinkedBlockingDeque.pop(LinkedBlockingDeque.java:773)
at forge.control.InputQueue.removeInput(InputQueue.java:55)
at forge.gui.input.InputSyncronizedBase.stop(InputSyncronizedBase.java:48)
at forge.gui.input.InputPayMana.onStateChanged(InputPayMana.java:361)
at forge.gui.input.InputPayMana$3.run(InputPayMana.java:309)
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)
- Agetian
- Programmer
- Posts: 3486
- Joined: 14 Mar 2011, 05:58
- Has thanked: 683 times
- Been thanked: 569 times
Re: Bug Reports (snapshot builds)
by drdev » 08 Feb 2014, 18:02
I hit this every time I try to start a booster draft with the full cardpool. Could this have something to do with the BoosterGenerator changes?
- NullPointerException | Open
- Code: Select all
Forge Version: SVN
Operating System: Windows 7 6.1 amd64
Java Version: 1.7.0_25 Oracle Corporation
java.lang.NullPointerException
at java.util.TreeMap.getEntry(Unknown Source)
at java.util.TreeMap.get(Unknown Source)
at forge.util.storage.StorageBase.get(StorageBase.java:58)
at forge.card.CardEdition$Collection.get(CardEdition.java:345)
at forge.card.BoosterGenerator.getBoosterPack(BoosterGenerator.java:72)
at forge.card.UnOpenedProduct.get(UnOpenedProduct.java:63)
at forge.card.UnOpenedProduct.get(UnOpenedProduct.java:1)
at forge.limited.BoosterDraft.get8BoosterPack(BoosterDraft.java:252)
at forge.limited.BoosterDraft.createDraft(BoosterDraft.java:159)
at forge.gui.home.sanctioned.CSubmenuDraft.setupDraft(CSubmenuDraft.java:153)
at forge.gui.home.sanctioned.CSubmenuDraft.access$2(CSubmenuDraft.java:148)
at forge.gui.home.sanctioned.CSubmenuDraft$2.run(CSubmenuDraft.java:61)
at forge.gui.toolbox.FLabel._doMouseAction(FLabel.java:307)
at forge.gui.toolbox.FLabel.access$3(FLabel.java:304)
at forge.gui.toolbox.FLabel$4.onLeftClick(FLabel.java:345)
at forge.gui.toolbox.FMouseAdapter.mouseReleased(FMouseAdapter.java:246)
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)
- drdev
- Programmer
- Posts: 1958
- Joined: 27 Jul 2013, 02:07
- Has thanked: 189 times
- Been thanked: 565 times
Re: Bug Reports (snapshot builds)
by Agetian » 08 Feb 2014, 18:24
Should be fixed in r24737.drdev wrote:I hit this every time I try to start a booster draft with the full cardpool. Could this have something to do with the BoosterGenerator changes?
- NullPointerException | Open
- Code: Select all
Forge Version: SVN
Operating System: Windows 7 6.1 amd64
Java Version: 1.7.0_25 Oracle Corporation
java.lang.NullPointerException
at java.util.TreeMap.getEntry(Unknown Source)
at java.util.TreeMap.get(Unknown Source)
at forge.util.storage.StorageBase.get(StorageBase.java:58)
at forge.card.CardEdition$Collection.get(CardEdition.java:345)
at forge.card.BoosterGenerator.getBoosterPack(BoosterGenerator.java:72)
at forge.card.UnOpenedProduct.get(UnOpenedProduct.java:63)
at forge.card.UnOpenedProduct.get(UnOpenedProduct.java:1)
at forge.limited.BoosterDraft.get8BoosterPack(BoosterDraft.java:252)
at forge.limited.BoosterDraft.createDraft(BoosterDraft.java:159)
at forge.gui.home.sanctioned.CSubmenuDraft.setupDraft(CSubmenuDraft.java:153)
at forge.gui.home.sanctioned.CSubmenuDraft.access$2(CSubmenuDraft.java:148)
at forge.gui.home.sanctioned.CSubmenuDraft$2.run(CSubmenuDraft.java:61)
at forge.gui.toolbox.FLabel._doMouseAction(FLabel.java:307)
at forge.gui.toolbox.FLabel.access$3(FLabel.java:304)
at forge.gui.toolbox.FLabel$4.onLeftClick(FLabel.java:345)
at forge.gui.toolbox.FMouseAdapter.mouseReleased(FMouseAdapter.java:246)
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)
- 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 Max mtg » 08 Feb 2014, 18:57
Exactly for that reason.friarsol wrote:r24717
Here's the setup:
Add an Overburden to the AIs battlefield, make sure you have a land or two in play. And cast any creature. In most cases when your creature ETB, the Overburden trigger does not hit the stack immediately like it should. (Maybe because the owner of the trigger doesn't have priority yet?)
Trigger hits the stack when its owner gains priority. What has to be changed there? Should all other players be allowed to place their triggers onto the stack right after priority owner (AP) is finished?friarsol wrote:So I press spacebar to pass priority, and then the trigger hits the stack. I cast and resolved a creature with Flash during my opponent's Declare Attackers step, and the trigger hit the stack after resolution as expected.
Additionally, it seems like when I pass priority that the trigger hits the stack and resolves immediately, so there definitely seems like there's some oddities going on here.
Single class for single responsibility.
- Max mtg
- Programmer
- Posts: 1997
- Joined: 02 Jul 2011, 14:26
- Has thanked: 173 times
- Been thanked: 334 times
Re: Bug Reports (snapshot builds)
by friarsol » 08 Feb 2014, 19:31
No. All triggers hit the stack when any player gains priority, not when the controller of the trigger gains priority. Triggers go on the stack in APNAP order.Max mtg wrote:Trigger hits the stack when its owner gains priority. What has to be changed there? Should all other players be allowed to place their triggers onto the stack right after priority owner (AP) is finished?
603.3. Once an ability has triggered, its controller puts it on the stack as an object that's not a card the next time a player would receive priority. See rule 116, "Timing and Priority." The ability becomes the topmost object on the stack. It has the text of the ability that created it, and no other characteristics. It remains on the stack until it's countered, it resolves, a rule causes it to be removed from the stack, or an effect moves it elsewhere.
603.3b If multiple abilities have triggered since the last time a player received priority, each player, in APNAP order, puts triggered abilities he or she controls on the stack in any order he or she chooses. (See rule 101.4.) Then the game once again checks for and resolves state-based actions until none are performed, then abilities that triggered during this process go on the stack. This process repeats until no new state-based actions are performed and no abilities trigger. Then the appropriate player gets priority.
- 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 Max mtg » 08 Feb 2014, 20:39
Ok, I've done the following:
When any player gains priority, he or she adds their triggers to the stack (acting as AP at that moment), then all other players (NAP) are asked to arrange their triggers.
To be precise with implementation I'd have to count the number of abilities added to stack this way, and then it's greater than one check SBA and add triggers to stack again. However this re-run is not yet done. Will return to that a bit later.
When any player gains priority, he or she adds their triggers to the stack (acting as AP at that moment), then all other players (NAP) are asked to arrange their triggers.
To be precise with implementation I'd have to count the number of abilities added to stack this way, and then it's greater than one check SBA and add triggers to stack again. However this re-run is not yet done. Will return to that a bit later.
Single class for single responsibility.
- Max mtg
- Programmer
- Posts: 1997
- Joined: 02 Jul 2011, 14:26
- Has thanked: 173 times
- Been thanked: 334 times
Re: Bug Reports (snapshot builds)
by friarsol » 08 Feb 2014, 20:44
r24746
I was looking at adding the color conversion stuff as a Continuous static ability (which feels like the right place), and happened to notice that Spectral Procession is currently broken. I thought it might have something to do with the (test version of) Sunglasses of Urza I had in play, but after I destroyed it, the hybrid cost was still busted. Can someone confirm that when you tap a Plains to pay for Spectral Procession only a colorless mana is removed from the hybrid Mana Shard instead of a White?
I was looking at adding the color conversion stuff as a Continuous static ability (which feels like the right place), and happened to notice that Spectral Procession is currently broken. I thought it might have something to do with the (test version of) Sunglasses of Urza I had in play, but after I destroyed it, the hybrid cost was still busted. Can someone confirm that when you tap a Plains to pay for Spectral Procession only a colorless mana is removed from the hybrid Mana Shard instead of a White?
- 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 » 08 Feb 2014, 20:46
Unless I'm reading this wrong, this sounds incorrect. The Active Player isn't the player who is about to gain Priority. The Active Player is the Player whose turn it is.Max mtg wrote:When any player gains priority, he or she adds their triggers to the stack (acting as AP at that moment), then all other players (NAP) are asked to arrange their triggers.
102.1. A player is one of the people in the game. The active player is the player whose turn it is. The other players are nonactive players.
- 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 Max mtg » 08 Feb 2014, 20:53
Sol,
it's hybrid mana {2/C} payment broken then
Ok, first player to add triggers changed to turn owner
it's hybrid mana {2/C} payment broken then
Ok, first player to add triggers changed to turn owner
Single class for single responsibility.
- Max mtg
- Programmer
- Posts: 1997
- Joined: 02 Jul 2011, 14:26
- Has thanked: 173 times
- Been thanked: 334 times
Re: Bug Reports (snapshot builds)
by friarsol » 08 Feb 2014, 22:21
r24749
Max, I have a compile error from one of your commits in PhaseHandler.java:
addedAnythingToStack |= game.getStack().chooseOrderOfSimultaneousStackEntry(whoAddsToStack);
since that function doesn't seem to actually return a boolean. Did you have changes in MagicStack.java that aren't committed? I'd prefer not to have to revert commits without allowing the person who broke it to fix.
Max, I have a compile error from one of your commits in PhaseHandler.java:
addedAnythingToStack |= game.getStack().chooseOrderOfSimultaneousStackEntry(whoAddsToStack);
since that function doesn't seem to actually return a boolean. Did you have changes in MagicStack.java that aren't committed? I'd prefer not to have to revert commits without allowing the person who broke it to fix.
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Who is online
Users browsing this forum: No registered users and 40 guests