Developing Bugs
Post MTG Forge Related Programming Questions Here
Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins
Re: Developing Bugs
by Doublestrike » 21 Oct 2012, 05:53
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.
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.
---
A joke is a very serious thing.
A joke is a very serious thing.
-
Doublestrike - UI Programmer
- Posts: 715
- Joined: 08 Aug 2011, 09:07
- Location: Bali
- Has thanked: 183 times
- Been thanked: 161 times
Re: Developing Bugs
by Doublestrike » 21 Oct 2012, 06:10
Fixed r17612 (@max you may want to have a quick look).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)
---
A joke is a very serious thing.
A joke is a very serious thing.
-
Doublestrike - UI Programmer
- Posts: 715
- Joined: 08 Aug 2011, 09:07
- Location: Bali
- Has thanked: 183 times
- Been thanked: 161 times
Re: Developing Bugs
by Sloth » 21 Oct 2012, 06:17
I was able to reproduce this by setting the AI's upkeep and draw step to skip (screenshots help).friarsol wrote: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.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.
http://imgur.com/xTIlk
-
Sloth - Programmer
- Posts: 3498
- Joined: 23 Jun 2009, 19:40
- Has thanked: 125 times
- Been thanked: 507 times
Re: Developing Bugs
by Max mtg » 21 Oct 2012, 07:06
Who was trying to learn card's color outside of the game, I wonder?Doublestrike wrote:Fixed r17612 (@max you may want to have a quick look).
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.
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: Developing Bugs
by Doublestrike » 21 Oct 2012, 08:44
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.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.
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...
---
A joke is a very serious thing.
A joke is a very serious thing.
-
Doublestrike - UI Programmer
- Posts: 715
- Joined: 08 Aug 2011, 09:07
- Location: Bali
- Has thanked: 183 times
- Been thanked: 161 times
Re: Developing Bugs
by Max mtg » 21 Oct 2012, 08:55
Ok then, deckeditor would need a different class if that one is used somewhere else.Doublestrike wrote: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.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.
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...
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: Developing Bugs
by RumbleBBU » 23 Oct 2012, 06:30
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:
(The cards didn't show up.)
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
by Max mtg » 23 Oct 2012, 07:38
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.
2. That's a nightmare. I don't know what to do about it.
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: Developing Bugs
by ArsenalNut » 23 Oct 2012, 13:54
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.
So many cards, so little time
-
ArsenalNut - Posts: 512
- Joined: 08 Jul 2011, 03:49
- Has thanked: 27 times
- Been thanked: 121 times
Re: Developing Bugs
by Max mtg » 23 Oct 2012, 18:20
What's wrong about that? Restart applies to the last game you played, not the whole match.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.
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: Developing Bugs
by friarsol » 23 Oct 2012, 18:24
That's not how the Restart button has functioned in the past.Max mtg wrote:What's wrong about that? Restart applies to the last game you played, not the whole match.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.
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Developing Bugs
by Max mtg » 23 Oct 2012, 19:16
Why don't you just write "it is supposed to restart the whole match"?friarsol wrote:That's not how the Restart button has functioned in the past.Max mtg wrote:What's wrong about that? Restart applies to the last game you played, not the whole match.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.
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: Developing Bugs
by Sloth » 24 Oct 2012, 12:05
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.
After about a minute:
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.

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)
-
Sloth - Programmer
- Posts: 3498
- Joined: 23 Jun 2009, 19:40
- Has thanked: 125 times
- Been thanked: 507 times
Re: Developing Bugs
by ArsenalNut » 24 Oct 2012, 14:03
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.
So many cards, so little time
-
ArsenalNut - Posts: 512
- Joined: 08 Jul 2011, 03:49
- Has thanked: 27 times
- Been thanked: 121 times
Re: Developing Bugs
by Max mtg » 24 Oct 2012, 18:33
Starting from r17703 AI won't have fun without youSloth 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.![]()

Yet, that's not a good news to learn that AI is playing without human deep into stack.
Should address that too.
Single class for single responsibility.
- Max mtg
- Programmer
- Posts: 1997
- Joined: 02 Jul 2011, 14:26
- Has thanked: 173 times
- Been thanked: 334 times
Who is online
Users browsing this forum: No registered users and 32 guests