Page 402 of 491

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 18:20
by fmartel
timmermac wrote:
fmartel wrote:Description: [in commander, choosing a land with Sword of the Animist]

OutOfMemoryError | Open
Code: Select all
Forge Version:    1.5.58-SNAPSHOT-r32997
Operating System: Windows 7 6.1 amd64
Java Version:     1.8.0_25 Oracle Corporation

java.lang.OutOfMemoryError: GC overhead limit exceeded
   at net.miginfocom.layout.Grid.addToSizeGroup(Unknown Source)
   at net.miginfocom.layout.Grid.calcRowsOrColsSizes(Unknown Source)
   at net.miginfocom.layout.Grid.checkSizeCalcs(Unknown Source)
   at net.miginfocom.layout.Grid.layout(Unknown Source)
   at net.miginfocom.swing.MigLayout.layoutContainer(Unknown Source)
   at java.awt.Container.layout(Unknown Source)
   at java.awt.Container.doLayout(Unknown Source)
   at java.awt.Container.validateTree(Unknown Source)
   at java.awt.Container.validateTree(Unknown Source)
   at java.awt.Container.validateTree(Unknown Source)
   at java.awt.Container.validateTree(Unknown Source)
   at java.awt.Container.validateTree(Unknown Source)
   at java.awt.Container.validateTree(Unknown Source)
   at java.awt.Container.validateTree(Unknown Source)
   at java.awt.Container.validate(Unknown Source)
   at javax.swing.RepaintManager$3.run(Unknown Source)
   at javax.swing.RepaintManager$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
   at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
   at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
   at java.awt.event.InvocationEvent.dispatch(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$400(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)
Note that I have 24GB RAM machine
The amount of physical RAM your machine has isn't relevant here. The key is how much of that is allocated for use by Java. If you right-click on forge.exe and click properties, you should see a window that, among other things, has a box that lists some parameters. Where it says Xms, you'll want to modify the number there to 4096. That means that Java now has access to 4 gigs of memory. I'm not sure if Java will let you allocate more or not.
Hmm, I'm not sure to follow you on that, is it on the Forge exucable (as you mentionned) or on the parameters of (global) Java ?
Attached is a picture of the détailed propreties of Forge.exe
Capture.PNG
Propreties of Forge.exe

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 18:35
by stormcat
:r32997
When Paradox Engine triggered, Artifacts ought to untap.

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 18:44
by friarsol
stormcat wrote::r32997
When Paradox Engine triggered, Artifacts ought to untap.
Hey Stormcat,

Could you post any Aether Revolt related issues in viewtopic.php?f=52&t=19629 at least until we have a release that contains the set?

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 19:16
by pfps
Agetian wrote:
pfps wrote:OK, I'm running r32993 and things are mostly working.

It also occurs to me that the ordering confirmation box isn't necessary. Just make that the initial order instead (and say something in the dual list box title, I guess). I'll see if I can make this work.
Well, the ordering confirmation was implemented to be able to change the order if necessary, that was discussed before and there were cases where this was relevant. It would be nice to still be able to change the order.

- Agetian
The idea is to not have a separate confirmation box. Instead, if there is a relevant ordering make that the initial ordering in the dual list box. The user can either accept that initial ordering or revise it using the usual methods.

peter

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 19:22
by pfps
pfps wrote:OK, I'm running r32993 and things are mostly working.

I am seeing something strange with repeated ordering. I had 2 Amulets out and untapped using them first and then bounced a bounce land back. The next time I was offered to untap, then bounce, then untap, which wasn't what I had just done. I'll investigate further.
I found the bug. It turns out that the code that saves the ordering is saving a mapping from final to initial instead of from intial to final. This works OK if the reordering is diagonal, which will always be true with two abilities. With three or more abilities the wrong thing could happen.

The patch is
Code: Select all
-                    for (SpellAbility sa : activePlayerSAs) {
-                        savedOrder.add(orderedSAs.indexOf(sa));
+                    for (SpellAbility sa : orderedSAs) {
+                        savedOrder.add(activePlayerSAs.indexOf(sa));
This can be applied to the reverted code, I think, but I'm running on the new code that appears to affect AutoYield, so I shouldn't just commit what I have.

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 19:28
by pfps
friarsol wrote:
fmartel wrote:-r32997, in commander, the "Auto yeild" does not work for Soul Warden. I always have to push "Entre" to confirm the action. Even If I right-click and tell it to "Atomate" it.
This is definitely related to the ordering change. Since the triggers no longer "match" it isn't passed for auto-trigger handling.
Is there a discussion of how Auto yield is supposed to work? I can think of several variants ranging from same underlying ability (i.e., same internal id) to same text to same effect.

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 19:30
by Agetian
@ pfps: Thanks a lot, your changes sound reasonable, it'd be nice to have the ordering a part of the list box (though the existence of mobile Forge probably needs to be accounted for in that case, I can test if it works well in mobile Forge if necessary).

I also committed your modification to the ordering save logic, thanks! :)

- Agetian

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 19:33
by Agetian
pfps wrote:
friarsol wrote:
fmartel wrote:-r32997, in commander, the "Auto yeild" does not work for Soul Warden. I always have to push "Entre" to confirm the action. Even If I right-click and tell it to "Atomate" it.
This is definitely related to the ordering change. Since the triggers no longer "match" it isn't passed for auto-trigger handling.
Is there a discussion of how Auto yield is supposed to work? I can think of several variants ranging from same underlying ability (i.e., same internal id) to same text to same effect.
Umm good question, actually I'm not sure what the best approach is, I'd love to hear opinions on this. :)

- Agetian

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 20:14
by friarsol
pfps wrote:
friarsol wrote:
fmartel wrote:-r32997, in commander, the "Auto yeild" does not work for Soul Warden. I always have to push "Entre" to confirm the action. Even If I right-click and tell it to "Atomate" it.
This is definitely related to the ordering change. Since the triggers no longer "match" it isn't passed for auto-trigger handling.
Is there a discussion of how Auto yield is supposed to work? I can think of several variants ranging from same underlying ability (i.e., same internal id) to same text to same effect.
I believe it's always been a single card's ability. So if I have two different Soul Sisters in play, I have to enable auto-accept for each one. I think the key is that a single trigger should be handled this way, no matter what triggered it. I think I'd be ok if this was expanded so that autoyielding to a single Soul Sister would autoyield to them all, but it's possible that people would want the flexibility of doing it individually.

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 20:19
by fmartel
Agetian wrote:
pfps wrote:Is there a discussion of how Auto yield is supposed to work? I can think of several variants ranging from same underlying ability (i.e., same internal id) to same text to same effect.
Umm good question, actually I'm not sure what the best approach is, I'd love to hear opinions on this. :)

- Agetian
The old way was working fine for me. i.e., I have Rampaging Balloths OTB, I play a land, his mechanics works (droping a 4/4 Beast Token). I press the "Y" key to automate its actions. there could be an option (as I saw here viewtopic.php?f=26&t=1516&p=208107#p208107). but why the sudden change ?

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 20:37
by Agetian
I agree with Sol's reasoning about flexibility, it's better to do it on a per-card basis (so, another card with the same ability would need to be auto-yielded separately).

- Agetian

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 21:13
by stormcat
:r33003
The cards of return to library top by ability of Scroll Rack become reverse order of my intention.

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 22:24
by pfps
fmartel wrote:
Agetian wrote:
pfps wrote:Is there a discussion of how Auto yield is supposed to work? I can think of several variants ranging from same underlying ability (i.e., same internal id) to same text to same effect.
Umm good question, actually I'm not sure what the best approach is, I'd love to hear opinions on this. :)

- Agetian
The old way was working fine for me. i.e., I have Rampaging Balloths OTB, I play a land, his mechanics works (droping a 4/4 Beast Token). I press the "Y" key to automate its actions. there could be an option (as I saw here viewtopic.php?f=26&t=1516&p=208107#p208107). but why the sudden change ?
The old (current, I guess, with the recent reversion) way has a game problem
with simultaneous actions. Two simultaneous actions that did the different
things looked exactly the same. This used to cause problems with manual
ordering as users had to guess which Amulet of Vigor effect untapped which
land. With the recent changes to the effect ordering code there isn't any
way to affect the order at all.

What I did was to add in more information to trigger descriptions so that
triggers with different effects looked different. This meant that some
triggers that had the same effect looked different (e.g., add one life
when a creature enters the battlefield when two creatures enter at once).
This then affects auto yield as auto yield uses the same description.

Re: Bug Reports (snapshot builds)

PostPosted: 06 Jan 2017, 22:33
by pfps
Agetian wrote:I agree with Sol's reasoning about flexibility, it's better to do it on a per-card basis (so, another card with the same ability would need to be auto-yielded separately).

- Agetian
I think that this is not how auto-yield worked. I tried auto-yielding (in a version that doesn't have my changes) on an Evolve effect and Evolve auto-yielded for all creatures.

I agree that this view of auto-yield is best. Implementing it is a separate issue if ordering is to be fixed as well. I see two possibilities:
1/ autoyield remembers the original effect
2/ autoyield remembers the description of the original effect and the card it came from
However, I don't know how to access the original effect, i.e., one that isn't wrapped.

Re: Bug Reports (snapshot builds)

PostPosted: 07 Jan 2017, 02:58
by tasteful
Description: In draft, AI's Thalakos Deceiver stalls out the game with this error whenever it activates its ability.

NullPointerException | Open
Code: Select all
Forge Version:    1.5.58-SNAPSHOT-r-1
Operating System: Mac OS X 10.12 x86_64
Java Version:     1.8.0_111 Oracle Corporation

java.lang.NullPointerException
   at forge.ai.ability.ControlGainAi$1.apply(ControlGainAi.java:139)
   at forge.ai.ability.ControlGainAi$1.apply(ControlGainAi.java:128)
   at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
   at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
   at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
   at forge.util.collect.FCollection.<init>(FCollection.java:90)
   at forge.game.card.CardCollection.<init>(CardCollection.java:115)
   at forge.game.card.CardLists.filter(CardLists.java:255)
   at forge.ai.ability.ControlGainAi.canPlayAI(ControlGainAi.java:128)
   at forge.ai.ability.ControlGainAi.chkAIDrawback(ControlGainAi.java:286)
   at forge.ai.SpellAbilityAi.chkDrawbackWithSubs(SpellAbilityAi.java:241)
   at forge.ai.SpellAbilityAi.doTriggerNoCostWithSubs(SpellAbilityAi.java:128)
   at forge.ai.SpellAbilityAi.doTriggerAI(SpellAbilityAi.java:119)
   at forge.ai.AiController.doTrigger(AiController.java:1205)
   at forge.ai.PlayerControllerAi.prepareSingleSa(PlayerControllerAi.java:707)
   at forge.ai.PlayerControllerAi.orderAndPlaySimultaneousSa(PlayerControllerAi.java:695)
   at forge.game.zone.MagicStack.chooseOrderOfSimultaneousStackEntry(MagicStack.java:863)
   at forge.game.zone.MagicStack.addAllTriggeredAbilitiesToStack(MagicStack.java:829)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:911)
   at forge.game.GameAction.startGame(GameAction.java:1462)
   at forge.game.Match.startGame(Match.java:95)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)
Description: Same thing happens when the same AI plays its Legacy's Allure

NullPointerException | Open
Code: Select all
Forge Version:    1.5.58-SNAPSHOT-r-1
Operating System: Mac OS X 10.12 x86_64
Java Version:     1.8.0_111 Oracle Corporation

java.lang.NullPointerException
   at forge.ai.ability.ControlGainAi$1.apply(ControlGainAi.java:139)
   at forge.ai.ability.ControlGainAi$1.apply(ControlGainAi.java:128)
   at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
   at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
   at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
   at forge.util.collect.FCollection.<init>(FCollection.java:90)
   at forge.game.card.CardCollection.<init>(CardCollection.java:115)
   at forge.game.card.CardLists.filter(CardLists.java:255)
   at forge.ai.ability.ControlGainAi.canPlayAI(ControlGainAi.java:128)
   at forge.ai.SpellAbilityAi.canPlayAIWithSubs(SpellAbilityAi.java:29)
   at forge.ai.AiController.canPlaySa(AiController.java:654)
   at forge.ai.AiController.canPlayAndPayFor(AiController.java:641)
   at forge.ai.AiController.chooseSpellAbilityToPlay(AiController.java:1158)
   at forge.ai.AiController.getSpellAbilityToPlay(AiController.java:1133)
   at forge.ai.AiController.chooseSpellAbilityToPlay(AiController.java:1072)
   at forge.ai.PlayerControllerAi.chooseSpellAbilityToPlay(PlayerControllerAi.java:392)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:925)
   at forge.game.GameAction.startGame(GameAction.java:1462)
   at forge.game.Match.startGame(Match.java:95)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)