Developing Bugs
Post MTG Forge Related Programming Questions Here
Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins
Re: Developing Bugs
by moomarc » 27 Jan 2012, 15:57
I was doing some testing with Hinterland Hermit//Hinterland Scourge and it seems that if more than one creature with "CARDNAME must be blocked this turn if able." keyword attacks in the same attack, not all of them will be assigned at least one blocker. Instead it seems that the AI will first try gang up on one of them to kill it. In my test four transformed Hinterlanders attacked into two 1/1 token test subjects. Both blocked the first attacker, whereas I would think that the blockers should first be assigned to an attacker with the keyword, then apply further blocking logics to decide how to handle things.
-Marc
-
moomarc - Pixel Commander
- Posts: 2091
- Joined: 04 Jun 2010, 15:22
- Location: Johannesburg, South Africa
- Has thanked: 371 times
- Been thanked: 372 times
Re: Developing Bugs
by moomarc » 01 Feb 2012, 07:37
Is random foiling still working for anyone? I tried it out for the first time in a while to see if the duplicate foils across cards of the same name was still happening. But it seems that nothing is being foiled, ever. In the eclipse console I'm getting errors along the lines of
- Code: Select all
INFO: Symbol not recognized "foil09" in string: foil09
-Marc
-
moomarc - Pixel Commander
- Posts: 2091
- Joined: 04 Jun 2010, 15:22
- Location: Johannesburg, South Africa
- Has thanked: 371 times
- Been thanked: 372 times
Re: Developing Bugs
by Doublestrike » 01 Feb 2012, 08:29
@moomarc - fixed.
---
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 moomarc » 08 Jun 2012, 12:48
Sloth, your recent change to GainControl AF broke the 'until EOT' duration. Creatures don't return to the original controller at end of turn, but they do get summoning sickness as though they have a new controller. Easy test to check both sides of that Memory Plunder/Mark of Mutiny bug is the following deck for each player: 1x Mark of Mutiny, 1x Memory Plunder, 1x Ornithopter, 4x Mox Ruby
Edit: Just tested and it affects all LoseControl$ EOT spells (not abilities)
Edit: Just tested and it affects all LoseControl$ EOT spells (not abilities)
-Marc
-
moomarc - Pixel Commander
- Posts: 2091
- Joined: 04 Jun 2010, 15:22
- Location: Johannesburg, South Africa
- Has thanked: 371 times
- Been thanked: 372 times
Re: Developing Bugs
by Sloth » 08 Jun 2012, 14:52
Fixed! Thanks marc. [AF GainControl needs to be cleaned up one day, the whole Controller being a GameEntity looks fishy]moomarc wrote:Sloth, your recent change to GainControl AF broke the 'until EOT' duration. Creatures don't return to the original controller at end of turn, but they do get summoning sickness as though they have a new controller. Easy test to check both sides of that Memory Plunder/Mark of Mutiny bug is the following deck for each player: 1x Mark of Mutiny, 1x Memory Plunder, 1x Ornithopter, 4x Mox Ruby
Edit: Just tested and it affects all LoseControl$ EOT spells (not abilities)
-
Sloth - Programmer
- Posts: 3498
- Joined: 23 Jun 2009, 19:40
- Has thanked: 125 times
- Been thanked: 507 times
Re: Developing Bugs
by Hellfish » 18 Jun 2012, 20:39
I think Snow mana may have been overlooked in the recent mana rewrite. Trying to pay Phyrexian Ironfoot's ability, for instance, results in a cold(hah!) crash:
- Code: Select all
java.lang.RuntimeException: Not found: mana shard with profile = 0
at forge.card.mana.ManaCostShard.valueOf(ManaCostShard.java:288)
at forge.card.mana.ManaCostParser.next(ManaCostParser.java:96)
at forge.card.mana.ManaCostParser.next(ManaCostParser.java:1)
at forge.card.CardManaCost.<init>(CardManaCost.java:71)
at forge.card.mana.ManaCost.<init>(ManaCost.java:62)
at forge.card.cost.Cost.changeCost(Cost.java:390)
at forge.card.cost.CostPayment.changeCost(CostPayment.java:320)
at forge.GameAction.playSpellAbility(GameAction.java:2508)
at forge.GameAction.playCard(GameAction.java:1704)
at forge.control.input.InputPassPriority.selectCard(InputPassPriority.java:88)
at forge.gui.match.nonsingleton.CField.cardclickAction(CField.java:480)
at forge.gui.match.nonsingleton.CField.access$7(CField.java:431)
at forge.gui.match.nonsingleton.CField$8.mousePressed(CField.java:101)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)
at java.awt.Component.processMouseEvent(Component.java:6501)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4489)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
So now you're
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
-
Hellfish - Programmer
- Posts: 1297
- Joined: 07 Jun 2009, 10:41
- Location: South of the Pumphouse
- Has thanked: 110 times
- Been thanked: 169 times
Re: Developing Bugs
by moomarc » 19 Jun 2012, 19:26
Did you have 'Play unlimited lands' mode enabled in Dev mode? I know I had issues with that and snow mana in the past.Hellfish wrote:I think Snow mana may have been overlooked in the recent mana rewrite. Trying to pay Phyrexian Ironfoot's ability, for instance, results in a cold(hah!) crash:
- Code: Select all
java.lang.RuntimeException: Not found: mana shard with profile = 0
at forge.card.mana.ManaCostShard.valueOf(ManaCostShard.java:288)
at forge.card.mana.ManaCostParser.next(ManaCostParser.java:96)
at forge.card.mana.ManaCostParser.next(ManaCostParser.java:1)
at forge.card.CardManaCost.<init>(CardManaCost.java:71)
at forge.card.mana.ManaCost.<init>(ManaCost.java:62)
at forge.card.cost.Cost.changeCost(Cost.java:390)
at forge.card.cost.CostPayment.changeCost(CostPayment.java:320)
at forge.GameAction.playSpellAbility(GameAction.java:2508)
at forge.GameAction.playCard(GameAction.java:1704)
at forge.control.input.InputPassPriority.selectCard(InputPassPriority.java:88)
at forge.gui.match.nonsingleton.CField.cardclickAction(CField.java:480)
at forge.gui.match.nonsingleton.CField.access$7(CField.java:431)
at forge.gui.match.nonsingleton.CField$8.mousePressed(CField.java:101)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)
at java.awt.Component.processMouseEvent(Component.java:6501)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4489)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
-Marc
-
moomarc - Pixel Commander
- Posts: 2091
- Joined: 04 Jun 2010, 15:22
- Location: Johannesburg, South Africa
- Has thanked: 371 times
- Been thanked: 372 times
Re: Developing Bugs
by Hellfish » 19 Jun 2012, 20:08
Tried with and without Play Unlimited Lands, with and without Dev mode and without fail that same crash appears. Either when I try to activate the ability (I don't get as far as paying, I worded the other post poorly) or when the AI evaluates the ability.
So now you're
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
-
Hellfish - Programmer
- Posts: 1297
- Joined: 07 Jun 2009, 10:41
- Location: South of the Pumphouse
- Has thanked: 110 times
- Been thanked: 169 times
Re: Developing Bugs
by mark » 20 Jul 2012, 19:26
There is a bug with Blood Artist:
play it 4 times and play 4 other creatures (e.g. 2x Dragon Fodder) and then destroy them with Akroma's Vengeance: the number of times, Blood Artist triggers varies always, I tested it three times by adding the cards in developer mode and the result was 10, 14, 22 times.
With a fixed deck like
Edit: in another test with different play order it triggered 22 times with this deck.
In another test, the AI unsummoned one token, so with 4 Artists and 3 Tokens it also triggered 22 times...
It should be triggered 20 times (death of 4 Artists + 4 Artists * 4 Tokens), if I'm not wrong.
play it 4 times and play 4 other creatures (e.g. 2x Dragon Fodder) and then destroy them with Akroma's Vengeance: the number of times, Blood Artist triggers varies always, I tested it three times by adding the cards in developer mode and the result was 10, 14, 22 times.
With a fixed deck like
- Code: Select all
[metadata]
Name=AA
[main]
4 Blood Artist
2 Dragon Fodder
1 Akroma's Vengeance
[sideboard]
Edit: in another test with different play order it triggered 22 times with this deck.
In another test, the AI unsummoned one token, so with 4 Artists and 3 Tokens it also triggered 22 times...
It should be triggered 20 times (death of 4 Artists + 4 Artists * 4 Tokens), if I'm not wrong.
Re: Developing Bugs
by Sloth » 21 Jul 2012, 20:39
Sol, I noticed a bug after revision 16280:
When the AI counters one of my spells with Counterspell, i don't get priority, it just resolves.
When the AI counters one of my spells with Counterspell, i don't get priority, it just resolves.
-
Sloth - Programmer
- Posts: 3498
- Joined: 23 Jun 2009, 19:40
- Has thanked: 125 times
- Been thanked: 507 times
Re: Developing Bugs
by friarsol » 21 Jul 2012, 21:39
Alright, I've reverted for now. I can't tell where Priority is getting hosed, but it seems like it must be in MagicStack.push(). I don't have time to look into it tonight.Sloth wrote:Sol, I noticed a bug after revision 16280:
When the AI counters one of my spells with Counterspell, i don't get priority, it just resolves.
Edit: As usual an updateObservers() call is screwing with priority. It looks like I can put the priority setting inside the push, just after the stack addition, but before the updateObservers to get the functionality I want. I'll try to do some more testing with this tomorrow to confirm it works in a few more cases. But the City of Brass and Counterspell cases seem to both be functional using that method.
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Developing Bugs
by mark » 22 Jul 2012, 10:23
This looks like the Blood Artist bug posted before: Whenever creatures die, triggering this does not work correctly.
I had Unruly Mob with 1 counter and Village Cannibals without counters on the battlefield. Then I attacked with Thraben Sentry (a 2/2 Human Soldier with Vigilance, transforms to Thraben Militia, a 5/4 Human Soldier with Trample) and AI blocked it with a 2/2 Young Wolf, so both creatures died. This did not trigger the "whenever another (human) creature dies, put a counter on foo".
I had Unruly Mob with 1 counter and Village Cannibals without counters on the battlefield. Then I attacked with Thraben Sentry (a 2/2 Human Soldier with Vigilance, transforms to Thraben Militia, a 5/4 Human Soldier with Trample) and AI blocked it with a 2/2 Young Wolf, so both creatures died. This did not trigger the "whenever another (human) creature dies, put a counter on foo".
Re: Developing Bugs
by friarsol » 22 Jul 2012, 13:26
I just tested this and it seems like the front face of double faced cards aren't triggering properly, but the back face and single faced cards are. Not sure if this is an LKI thing or something else.mark wrote:This looks like the Blood Artist bug posted before: Whenever creatures die, triggering this does not work correctly.
I had Unruly Mob with 1 counter and Village Cannibals without counters on the battlefield. Then I attacked with Thraben Sentry (a 2/2 Human Soldier with Vigilance, transforms to Thraben Militia, a 5/4 Human Soldier with Trample) and AI blocked it with a 2/2 Young Wolf, so both creatures died. This did not trigger the "whenever another (human) creature dies, put a counter on foo".
- friarsol
- Global Moderator
- Posts: 7593
- Joined: 15 May 2010, 04:20
- Has thanked: 243 times
- Been thanked: 965 times
Re: Developing Bugs
by mark » 01 Aug 2012, 06:44
I had Unruly Mob and Doomed Traveler on the battlefield, attacked with Doomed Traveler, which caused him to die and be replaced by a 1/1 Spirit -> no counters on Unruly Mob.
edit: Later, I had Village Cannibals out and Unruly Mob got destroyed by Doomblade -> no counter on Village Cannibals.
edit2: I Sacrificed Doomed Traveler for Falkenrath Torturer -> no counter on Falkenrath Torturer
edit: Later, I had Village Cannibals out and Unruly Mob got destroyed by Doomblade -> no counter on Village Cannibals.
edit2: I Sacrificed Doomed Traveler for Falkenrath Torturer -> no counter on Falkenrath Torturer
Re: Developing Bugs
by Milod » 01 Aug 2012, 10:05
this is the second time it crashes while entering the deck editor the frist time i reinstalled it worked again but after some dueling i come back to deck editor it happend again using version from 31 july
This is a Crash Report. An error has occurred. Please save this message to a file.
Please follow the instructions at this address to submit this Crash Report, plus what you were doing at the time:
http://tinyurl.com/3zzrnyb
Reporting bugs in Forge is very important. We thank you for your time.
3
Version:
Forge version 1.2.11-SNAPSHOT
OS: Windows 7 Version: 6.1 Architecture: x86
Java Version: 1.7.0_04 Vendor: Oracle Corporation
Detailed error trace:
java.lang.ArrayIndexOutOfBoundsException: 3
at forge.gui.deckeditor.tables.TableModel.setup(TableModel.java:93)
at forge.gui.deckeditor.tables.TableView.setup(TableView.java:110)
at forge.gui.deckeditor.controllers.CEditorConstructed.init(CEditorConstructed.java:145)
at forge.gui.deckeditor.CDeckEditorUI.updateController(CDeckEditorUI.java:121)
at forge.gui.deckeditor.CDeckEditorUI.setCurrentEditorController(CDeckEditorUI.java:85)
at forge.gui.home.utilities.CSubmenuDeckEditor.showDeckEditor(CSubmenuDeckEditor.java:36)
at forge.gui.home.utilities.CSubmenuDeckEditor.access$000(CSubmenuDeckEditor.java:15)
at forge.gui.home.utilities.CSubmenuDeckEditor$1.execute(CSubmenuDeckEditor.java:47)
at forge.gui.home.VMainMenu$2$1.run(VMainMenu.java:219)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
This is a Crash Report. An error has occurred. Please save this message to a file.
Please follow the instructions at this address to submit this Crash Report, plus what you were doing at the time:
http://tinyurl.com/3zzrnyb
Reporting bugs in Forge is very important. We thank you for your time.
3
Version:
Forge version 1.2.11-SNAPSHOT
OS: Windows 7 Version: 6.1 Architecture: x86
Java Version: 1.7.0_04 Vendor: Oracle Corporation
Detailed error trace:
java.lang.ArrayIndexOutOfBoundsException: 3
at forge.gui.deckeditor.tables.TableModel.setup(TableModel.java:93)
at forge.gui.deckeditor.tables.TableView.setup(TableView.java:110)
at forge.gui.deckeditor.controllers.CEditorConstructed.init(CEditorConstructed.java:145)
at forge.gui.deckeditor.CDeckEditorUI.updateController(CDeckEditorUI.java:121)
at forge.gui.deckeditor.CDeckEditorUI.setCurrentEditorController(CDeckEditorUI.java:85)
at forge.gui.home.utilities.CSubmenuDeckEditor.showDeckEditor(CSubmenuDeckEditor.java:36)
at forge.gui.home.utilities.CSubmenuDeckEditor.access$000(CSubmenuDeckEditor.java:15)
at forge.gui.home.utilities.CSubmenuDeckEditor$1.execute(CSubmenuDeckEditor.java:47)
at forge.gui.home.VMainMenu$2$1.run(VMainMenu.java:219)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Who is online
Users browsing this forum: No registered users and 39 guests