It is currently 04 Mar 2021, 00:55
   
Text Size

Developing Bugs

Post MTG Forge Related Programming Questions Here

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

Re: Developing Bugs

Postby 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
User avatar
moomarc
Pixel Commander
 
Posts: 2091
Joined: 04 Jun 2010, 15:22
Location: Johannesburg, South Africa
Has thanked: 371 times
Been thanked: 371 times

Re: Developing Bugs

Postby 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
User avatar
moomarc
Pixel Commander
 
Posts: 2091
Joined: 04 Jun 2010, 15:22
Location: Johannesburg, South Africa
Has thanked: 371 times
Been thanked: 371 times

Re: Developing Bugs

Postby Doublestrike » 01 Feb 2012, 08:29

@moomarc - fixed.
---
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 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)
-Marc
User avatar
moomarc
Pixel Commander
 
Posts: 2091
Joined: 04 Jun 2010, 15:22
Location: Johannesburg, South Africa
Has thanked: 371 times
Been thanked: 371 times

Re: Developing Bugs

Postby Sloth » 08 Jun 2012, 14:52

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)
Fixed! Thanks marc. [AF GainControl needs to be cleaned up one day, the whole Controller being a GameEntity looks fishy]
User avatar
Sloth
Programmer
 
Posts: 3498
Joined: 23 Jun 2009, 19:40
Has thanked: 125 times
Been thanked: 507 times

Re: Developing Bugs

Postby 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
User avatar
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

Postby moomarc » 19 Jun 2012, 19:26

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)
Did you have 'Play unlimited lands' mode enabled in Dev mode? I know I had issues with that and snow mana in the past.
-Marc
User avatar
moomarc
Pixel Commander
 
Posts: 2091
Joined: 04 Jun 2010, 15:22
Location: Johannesburg, South Africa
Has thanked: 371 times
Been thanked: 371 times

Re: Developing Bugs

Postby 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
User avatar
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

Postby 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
Code: Select all
[metadata]
Name=AA
[main]
4 Blood Artist
2 Dragon Fodder
1 Akroma's Vengeance
[sideboard]
and generating mana it was always 10 times in 4 tries.

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.
mark
 
Posts: 138
Joined: 28 Dec 2011, 11:32
Has thanked: 6 times
Been thanked: 11 times

Re: Developing Bugs

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

Re: Developing Bugs

Postby friarsol » 21 Jul 2012, 21:39

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

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: 7565
Joined: 15 May 2010, 04:20
Has thanked: 242 times
Been thanked: 953 times

Re: Developing Bugs

Postby 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".
mark
 
Posts: 138
Joined: 28 Dec 2011, 11:32
Has thanked: 6 times
Been thanked: 11 times

Re: Developing Bugs

Postby friarsol » 22 Jul 2012, 13:26

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".
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.
friarsol
Global Moderator
 
Posts: 7565
Joined: 15 May 2010, 04:20
Has thanked: 242 times
Been thanked: 953 times

Re: Developing Bugs

Postby 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
mark
 
Posts: 138
Joined: 28 Dec 2011, 11:32
Has thanked: 6 times
Been thanked: 11 times

Re: Developing Bugs

Postby 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)
Milod
 
Posts: 360
Joined: 20 Jul 2011, 08:57
Has thanked: 4 times
Been thanked: 5 times

PreviousNext

Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 28 guests


Who is online

In total there are 28 users online :: 0 registered, 0 hidden and 28 guests (based on users active over the past 10 minutes)
Most users ever online was 1371 on 09 Feb 2020, 16:22

Users browsing this forum: No registered users and 28 guests

Login Form