Page 14 of 32

Re: Developing Bugs

PostPosted: 21 Oct 2012, 05:53
by Doublestrike
I've put a bit of time into the targeting overlay. The button visualizing and preferences are now working fine, but the overall mechanism just isn't coming out as I planned.

So, I've fully disabled it for now, until I (or someone else) feels like taking it on. Perhaps if and when the card PlayArea class (where the cards are displayed) are updated.

Re: Developing Bugs

PostPosted: 21 Oct 2012, 06:10
by Doublestrike
Doublestrike wrote:I get that too...also, for the last two days:

| Open
Read decks: 254 constructed, 1 sealed, 0 draft, 3 cubes.
java.lang.NullPointerException
at forge.Card.determineColor(Card.java:1736)
at forge.CardUtil.getColors(CardUtil.java:151)
at forge.gui.GuiDisplayUtil.getBorder(GuiDisplayUtil.java:81)
at forge.gui.CardDetailPanel.setCard(CardDetailPanel.java:158)
at forge.gui.match.controllers.CDetail.showCard(CDetail.java:51)
at forge.gui.deckeditor.CDeckEditorUI.setCard(CDeckEditorUI.java:53)
at forge.gui.deckeditor.tables.EditorTableModel.showSelectedCard(EditorTableModel.java:193)
at forge.gui.deckeditor.tables.EditorTableModel$1.valueChanged(EditorTableModel.java:216)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442)
at javax.swing.JTable.changeSelectionModel(JTable.java:2352)
at javax.swing.JTable.changeSelection(JTable.java:2421)
at javax.swing.plaf.basic.BasicTableUI$Handler.adjustSelection(BasicTableUI.java:1085)
at javax.swing.plaf.basic.BasicTableUI$Handler.mousePressed(BasicTableUI.java:1008)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
at java.awt.Component.processMouseEvent(Component.java:6285)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
java.lang.NullPointerException
at forge.Card.determineColor(Card.java:1736)
at forge.CardUtil.getColors(CardUtil.java:151)
at forge.gui.GuiDisplayUtil.getBorder(GuiDisplayUtil.java:81)
at forge.gui.CardDetailPanel.setCard(CardDetailPanel.java:158)
at forge.gui.match.controllers.CDetail.showCard(CDetail.java:51)
at forge.gui.deckeditor.CDeckEditorUI.setCard(CDeckEditorUI.java:53)
at forge.gui.deckeditor.tables.EditorTableModel.showSelectedCard(EditorTableModel.java:193)
at forge.gui.deckeditor.tables.EditorTableModel$2.focusGained(EditorTableModel.java:227)
at java.awt.AWTEventMulticaster.focusGained(AWTEventMulticaster.java:203)
at java.awt.Component.processFocusEvent(Component.java:6177)
at java.awt.Component.processEvent(Component.java:6044)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:901)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:513)
at java.awt.Component.dispatchEventImpl(Component.java:4523)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.SequencedEvent.dispatch(SequencedEvent.java:101)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1046)
at java.awt.Dialog$3.run(Dialog.java:1098)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1096)
at java.awt.Component.show(Component.java:1584)
at java.awt.Component.setVisible(Component.java:1536)
at java.awt.Window.setVisible(Window.java:842)
at java.awt.Dialog.setVisible(Dialog.java:986)
at forge.error.ErrorViewer.showDialog(ErrorViewer.java:192)
at forge.error.ErrorViewer.showError(ErrorViewer.java:117)
at forge.error.ErrorViewer.showError(ErrorViewer.java:79)
at forge.error.ExceptionHandler.handle(ExceptionHandler.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.awt.EventDispatchThread.handleException(EventDispatchThread.java:385)
at java.awt.EventDispatchThread.processException(EventDispatchThread.java:291)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:285)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Fixed r17612 (@max you may want to have a quick look).

Re: Developing Bugs

PostPosted: 21 Oct 2012, 06:17
by Sloth
friarsol wrote:
Max mtg wrote:As for mulligan, I didn't reproduce it. (AI has turn and does not advance behind Untap) Made a change to code that might help.
Does anyone else see this? I don't have any local changes right now and here's the screenshot of the AI with a land already played while I have a prompt to Mulligan. This is just in a quick constructed match.

http://imgur.com/xTIlk
I was able to reproduce this by setting the AI's upkeep and draw step to skip (screenshots help).

Re: Developing Bugs

PostPosted: 21 Oct 2012, 07:06
by Max mtg
Doublestrike wrote:Fixed r17612 (@max you may want to have a quick look).
Who was trying to learn card's color outside of the game, I wonder?
It's generally fine to set checks for game != null, but theese calls should not happen when the match has not started a game yet.

Ah... deck editor's panel that needs a Card object. It surelly needs refactoring (to stop creating Cards outside of a game), I'll reach that class one day.

Re: Developing Bugs

PostPosted: 21 Oct 2012, 08:44
by Doublestrike
Max mtg wrote:Ah... deck editor's panel that needs a Card object. It surelly needs refactoring (to stop creating Cards outside of a game), I'll reach that class one day.
Just FYI the reference to the Card object is from way back (it's in the "arcane" package, whatever that means), related to the PlayArea class (used for hands and battlefields). If I remember, that class uses a mouse motion listener (!) and sends the moused-over card to the picture panel.

This whole refactor is a big job in itself - there's a lot of things that could be improved. I didn't touch it on the UI rebuild (if it ain't broke...) but it was very tempting...

Re: Developing Bugs

PostPosted: 21 Oct 2012, 08:55
by Max mtg
Doublestrike wrote:
Max mtg wrote:Ah... deck editor's panel that needs a Card object. It surelly needs refactoring (to stop creating Cards outside of a game), I'll reach that class one day.
Just FYI the reference to the Card object is from way back (it's in the "arcane" package, whatever that means), related to the PlayArea class (used for hands and battlefields). If I remember, that class uses a mouse motion listener (!) and sends the moused-over card to the picture panel.

This whole refactor is a big job in itself - there's a lot of things that could be improved. I didn't touch it on the UI rebuild (if it ain't broke...) but it was very tempting...
Ok then, deckeditor would need a different class if that one is used somewhere else.

Re: Developing Bugs

PostPosted: 23 Oct 2012, 06:30
by RumbleBBU
Two observations, playing the quest mode in the latest SVN checkout...

1) It seems that if you are auto-skipping phases (for example, I have set all combat phases except DA and DB to 'red', i.e., autoskip in normal circumstances), the game will continue autoskipping them even when the game is over (perhaps because the defending player just died!). Without auto-skipping, I have also sometimes achieved this with the spacebar (which remains active and skips phases even when the win/lose view is visible).
Advancing phases when the game is over has several bad consequences. One of them is that the QuestWinLose::populateCustomPanel() method is invoked several times (once per each phase), and you get the Boooster selection menu several times, possibly with different options. Only your last choice remains in effect...
The best solution would IMO be if the game no longer advanced to the next phase, at all, when the game is over.

2) Got this crash when I tried to start a challenge that had predefined cards in play:
| Open
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at forge.view.arcane.PlayArea.positionAllCards(PlayArea.java:257)
at forge.view.arcane.PlayArea.doLayout(PlayArea.java:248)
at forge.view.arcane.CardPanelContainer.addCard(CardPanelContainer.java:264)
at forge.gui.GuiDisplayUtil.setupPlayZone(GuiDisplayUtil.java:274)
at forge.gui.match.nonsingleton.CField$17.update(CField.java:148)
at java.util.Observable.notifyObservers(Unknown Source)
at java.util.Observable.notifyObservers(Unknown Source)
at forge.util.MyObservable.updateObservers(MyObservable.java:38)
at forge.game.GameNew.newGame(GameNew.java:130)
at forge.game.MatchController.startRound(MatchController.java:127)
at forge.gui.home.quest.SSubmenuQuestUtil$2.doInBackground(SSubmenuQuestUtil.java:304)
at javax.swing.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at javax.swing.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

(The cards didn't show up.)

Re: Developing Bugs

PostPosted: 23 Oct 2012, 07:38
by Max mtg
1. that is possible to add a lock to phasehandler to and inputcontrol to stop any phase advancement when the game is over

2. That's a nightmare. I don't know what to do about it.

Re: Developing Bugs

PostPosted: 23 Oct 2012, 13:54
by ArsenalNut
The restart button is still not behaving properly in constructed games. It appears that match score is not reset. I hit restart and a new game is started, but whoever wins that new game, wins the match 2-1.

Re: Developing Bugs

PostPosted: 23 Oct 2012, 18:20
by Max mtg
ArsenalNut wrote:The restart button is still not behaving properly in constructed games. It appears that match score is not reset. I hit restart and a new game is started, but whoever wins that new game, wins the match 2-1.
What's wrong about that? Restart applies to the last game you played, not the whole match.

Re: Developing Bugs

PostPosted: 23 Oct 2012, 18:24
by friarsol
Max mtg wrote:
ArsenalNut wrote:The restart button is still not behaving properly in constructed games. It appears that match score is not reset. I hit restart and a new game is started, but whoever wins that new game, wins the match 2-1.
What's wrong about that? Restart applies to the last game you played, not the whole match.
That's not how the Restart button has functioned in the past.

Re: Developing Bugs

PostPosted: 23 Oct 2012, 19:16
by Max mtg
friarsol wrote:
Max mtg wrote:
ArsenalNut wrote:The restart button is still not behaving properly in constructed games. It appears that match score is not reset. I hit restart and a new game is started, but whoever wins that new game, wins the match 2-1.
What's wrong about that? Restart applies to the last game you played, not the whole match.
That's not how the Restart button has functioned in the past.
Why don't you just write "it is supposed to restart the whole match"?

Re: Developing Bugs

PostPosted: 24 Oct 2012, 12:05
by Sloth
Ok, here's a funny one:
I played an Archenemy game against two opponents. When i was killed, the game just went on (only to be seen in the console). The AI's were still attacking, casting spells and having fun without me. :cry:

After about a minute:
| Open
Code: Select all
java.lang.StackOverflowError
   at java.awt.AWTEventMulticaster.populateListenerArray(Unknown Source)
   at java.awt.AWTEventMulticaster.getListeners(Unknown Source)
   at java.awt.Component.getListeners(Unknown Source)
   at java.awt.Container.getListeners(Unknown Source)
   at javax.swing.JComponent.getListeners(Unknown Source)
   at java.awt.Component.getMouseMotionListeners(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonUI.getButtonListener(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonUI.installKeyboardActions(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonUI.installUI(Unknown Source)
   at javax.swing.JComponent.setUI(Unknown Source)
   at javax.swing.AbstractButton.setUI(Unknown Source)
   at javax.swing.JButton.updateUI(Unknown Source)
   at javax.swing.AbstractButton.init(Unknown Source)
   at javax.swing.JButton.<init>(Unknown Source)
   at javax.swing.JButton.<init>(Unknown Source)
   at javax.swing.plaf.basic.BasicArrowButton.<init>(Unknown Source)
   at javax.swing.plaf.basic.BasicArrowButton.<init>(Unknown Source)
   at javax.swing.plaf.metal.MetalScrollButton.<init>(Unknown Source)
   at javax.swing.plaf.metal.MetalScrollBarUI.createIncreaseButton(Unknown Source)
   at javax.swing.plaf.basic.BasicScrollBarUI.installComponents(Unknown Source)
   at javax.swing.plaf.basic.BasicScrollBarUI.installUI(Unknown Source)
   at javax.swing.JComponent.setUI(Unknown Source)
   at javax.swing.JScrollBar.setUI(Unknown Source)
   at javax.swing.JScrollBar.updateUI(Unknown Source)
   at javax.swing.JScrollBar.<init>(Unknown Source)
   at javax.swing.JScrollBar.<init>(Unknown Source)
   at javax.swing.JScrollPane$ScrollBar.<init>(Unknown Source)
   at javax.swing.JScrollPane.createVerticalScrollBar(Unknown Source)
   at javax.swing.JScrollPane.<init>(Unknown Source)
   at forge.gui.toolbox.FScrollPane.<init>(FScrollPane.java:32)
   at forge.gui.toolbox.FScrollPane.<init>(FScrollPane.java:21)
   at forge.gui.match.ViewWinLose.<init>(ViewWinLose.java:156)
   at forge.GameAction.checkStateEffects(GameAction.java:1035)
   at forge.game.phase.PhaseHandler.handleBeginPhase(PhaseHandler.java:239)
   at forge.control.input.InputControl.getActualInput(InputControl.java:186)
   at forge.gui.GuiInput.update(GuiInput.java:50)
   at java.util.Observable.notifyObservers(Unknown Source)
   at java.util.Observable.notifyObservers(Unknown Source)
   at forge.util.MyObservable.updateObservers(MyObservable.java:38)
   at forge.game.phase.PhaseHandler.nextPhase(PhaseHandler.java:494)
   at forge.game.phase.PhaseHandler.passPriority(PhaseHandler.java:711)
   at forge.control.input.InputCleanup.showMessage(InputCleanup.java:46)
   at forge.gui.GuiInput.setInput(GuiInput.java:70)
   at forge.gui.GuiInput.update(GuiInput.java:53)
   at java.util.Observable.notifyObservers(Unknown Source)
   at java.util.Observable.notifyObservers(Unknown Source)
   at forge.util.MyObservable.updateObservers(MyObservable.java:38)
   at forge.control.input.InputControl.resetInput(InputControl.java:140)
   at forge.control.input.InputControl.resetInput(InputControl.java:136)
   at forge.game.phase.PhaseHandler.passPriority(PhaseHandler.java:719)
   at forge.control.input.InputCleanup.showMessage(InputCleanup.java:46)
   at forge.gui.GuiInput.setInput(GuiInput.java:70)
   at forge.gui.GuiInput.update(GuiInput.java:53)
   at java.util.Observable.notifyObservers(Unknown Source)
   at java.util.Observable.notifyObservers(Unknown Source)
   at forge.util.MyObservable.updateObservers(MyObservable.java:38)
   at forge.game.phase.PhaseHandler.nextPhase(PhaseHandler.java:494)
   at forge.game.phase.PhaseHandler.passPriority(PhaseHandler.java:711)
   at forge.game.player.ComputerAIGeneral.playSpellAbilitiesStackEmpty(ComputerAIGeneral.java:88)
   at forge.game.player.ComputerAIGeneral.playSpellAbilities(ComputerAIGeneral.java:347)

Re: Developing Bugs

PostPosted: 24 Oct 2012, 14:03
by ArsenalNut
Forge r17699 crashes with NPE when the AI wins a game in constructed mode. I looked at the stack trace. The AI is still thinking about trying to play spell abilities even after it has dealt lethal damage. I tried to fix the first NPE I got by putting some null checks but this just led to another null down the line. At this point I gave up trying to fix the problem because I think there is larger issue that needs to be addressed which is the fact that the AI is still trying to play after it has already won the game.

Re: Developing Bugs

PostPosted: 24 Oct 2012, 18:33
by Max mtg
Sloth wrote:Ok, here's a funny one:
I played an Archenemy game against two opponents. When i was killed, the game just went on (only to be seen in the console). The AI's were still attacking, casting spells and having fun without me. :cry:
Starting from r17703 AI won't have fun without you :)

Yet, that's not a good news to learn that AI is playing without human deep into stack.
Should address that too.