It is currently 07 Sep 2025, 04:36
   
Text Size

Developing Bugs

Post MTG Forge Related Programming Questions Here

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

Re: Developing Bugs

Postby 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.
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: Developing Bugs

Postby Doublestrike » 21 Oct 2012, 06:10

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).
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: Developing Bugs

Postby Sloth » 21 Oct 2012, 06:17

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).
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: Developing Bugs

Postby Max mtg » 21 Oct 2012, 07:06

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.
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

Postby Doublestrike » 21 Oct 2012, 08:44

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...
---
A joke is a very serious thing.
User avatar
Doublestrike
UI Programmer
 
Posts: 715
Joined: 08 Aug 2011, 09:07
Location: Bali
Has thanked: 183 times
Been thanked: 161 times

Re: Developing Bugs

Postby Max mtg » 21 Oct 2012, 08:55

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.
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

Postby 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:
| 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.)
User avatar
RumbleBBU
 
Posts: 394
Joined: 18 Aug 2012, 04:24
Has thanked: 29 times
Been thanked: 66 times

Re: Developing Bugs

Postby 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.
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

Postby 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
User avatar
ArsenalNut
 
Posts: 512
Joined: 08 Jul 2011, 03:49
Has thanked: 27 times
Been thanked: 121 times

Re: Developing Bugs

Postby Max mtg » 23 Oct 2012, 18:20

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.
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

Postby friarsol » 23 Oct 2012, 18:24

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.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Developing Bugs

Postby Max mtg » 23 Oct 2012, 19:16

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"?
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

Postby 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. :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)
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: Developing Bugs

Postby 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
User avatar
ArsenalNut
 
Posts: 512
Joined: 08 Jul 2011, 03:49
Has thanked: 27 times
Been thanked: 121 times

Re: Developing Bugs

Postby Max mtg » 24 Oct 2012, 18:33

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.
Single class for single responsibility.
Max mtg
Programmer
 
Posts: 1997
Joined: 02 Jul 2011, 14:26
Has thanked: 173 times
Been thanked: 334 times

PreviousNext

Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 32 guests

Main Menu

User Menu

Our Partners


Who is online

In total there are 32 users online :: 0 registered, 0 hidden and 32 guests (based on users active over the past 10 minutes)
Most users ever online was 7303 on 15 Jul 2025, 20:46

Users browsing this forum: No registered users and 32 guests

Login Form