Problem with Carcassonne?

Can anyone who plays this module please tell me what maximum heap size they use, as I am getting frustrated trying to figure it out. The problem is I only become aware of a problem during a game when returning a meeple to the start board (Ctrl-R), then the game and system freezes usually resulting in a reboot of the computer. I have 960MB of free RAM memory.

Ron

Thus spake “ron the cabbie”:

The Carcassonne module should work with the default heap settings.

Anyway, the problem you’re having has nothing to do with memory. The
problem is either that the meeples were built incorrectly by the module
designer, or we have a bug in VASSAL.

I’d like to get the attention of Brent and Tim for this one.

To reproduce the problem:

  1. Open the Carcassonne module and start a new game as the Red player.
  2. Open the Game Window.
  3. Drag a red meeple (the little red guy in the red box below the scoring
    track) onto the grid.
  4. With the meeple selected, hit CTRL-R.

Be careful when you do this—there’s a good chance that it might hang
your machine, so do it from a debugger and stop VASSAL right away.

Here’s a portion of the stack trace when I do that:

[1,150] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,151] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,152] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,153] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,154] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,155] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,156] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,157] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,158] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,159] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,160] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,161] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,162] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,163] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,164] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,165] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,166] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,167] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,168] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,169] VASSAL.counters.TriggerAction.myKeyEvent (TriggerAction.java:159)
[1,170] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:121)
[1,171] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,172] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,173] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,174] VASSAL.counters.TriggerAction.myKeyEvent (TriggerAction.java:159)
[1,175] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:121)
[1,176] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,177] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,178] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,179] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,180] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,181] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,182] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,183] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,184] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,185] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,186] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,187] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,188] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,189] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,190] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,191] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,192] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,193] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,194] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,195] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,196] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,197] VASSAL.counters.ReturnToDeck.myKeyEvent (ReturnToDeck.java:125)
[1,198] VASSAL.counters.Decorator.keyEvent (Decorator.java:255)
[1,199] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,200] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,201] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,202] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,203] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,204] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,205] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,206] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,207] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,208] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,209] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,210] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,211] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,212] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,213] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,214] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,215] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,216] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,217] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,218] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:120)
[1,219] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,220] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,221] VASSAL.counters.TriggerAction.myKeyEvent (TriggerAction.java:159)
[1,222] VASSAL.counters.TriggerAction.keyEvent (TriggerAction.java:121)
[1,223] VASSAL.counters.Decorator.keyEvent (Decorator.java:256)
[1,224] VASSAL.counters.ReportState.keyEvent (ReportState.java:116)
[1,225] VASSAL.counters.KeyBuffer.keyCommand (KeyBuffer.java:118)
[1,226] VASSAL.counters.KeyCommand.actionPerformed (KeyCommand.java:111)
[1,227] javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java:2,012)

It looks like it’s getting into a loop.


J.


Messages mailing list
Messages@forums.vassalengine.org
forums.vassalengine.org/mailman/ … engine.org

Post generated using Mail2Forum (mail2forum.com)

There is definitely a bug in the way the Meeples are set up that is generating an infinite loop, but the handling of the infinite loop error message is causing the Out of Memory error. I’m looking into this now, but the infinite loop in the meeples is being caused by the ‘Jail processing’, but started initially by the ‘Stand up when bouncing’ Trigger Action. You can generate the same error by dragging a second meeple onto the scoring track.

I am looking into the Out of Memory error now, but this module has a serious looping problem.

B.

*********** REPLY SEPARATOR ***********

On 9/08/2009 at 11:24 PM Joel Uckelman wrote:


Messages mailing list
Messages@forums.vassalengine.org
forums.vassalengine.org/mailman/ … engine.org

Post generated using Mail2Forum (mail2forum.com)

Thus spake “Brent Easton”:

Huh. I never got an OOME. The first time I tried this it just locked
up my machine. Funny how this differs from machine to machine.

Thanks for taking a look.


J.


Messages mailing list
Messages@forums.vassalengine.org
forums.vassalengine.org/mailman/ … engine.org

Post generated using Mail2Forum (mail2forum.com)

A cursory dig reminds me of the Trait A,B,C doing a B,A,C execution you
explained to me a long time ago Brent where B can do A but A cant do C
because of their order.
This use to cause a stack overflow error a long time ago when we first
encountered it.

Post generated using Mail2Forum (mail2forum.com)

This is a really weird one. I can reproduce it - it is definitely a bug in the Carcasonne module caused by a Map auto-move key triggering a move to the same map. The RecursionLimiter is firing off, but it is not stopping the hotkey loop and you get a cascade of looping Exceptions and ongoing looping until the whole thing melts down.

Still working on this one.

B.

*********** REPLY SEPARATOR ***********

On 10/08/2009 at 12:24 AM Joel Uckelman wrote:


Messages mailing list
Messages@forums.vassalengine.org
forums.vassalengine.org/mailman/ … engine.org

Post generated using Mail2Forum (mail2forum.com)

I love playing Carcassonne, and it’s not that complex a game… so why is the module so complex? I looked at the code to try to debug it because I kept getting the Infinite Loop errors… :confused: all the excessive Prototype Definitions? and auto-executing commands for everything? I gave up and just made my own.

vassalengine.org/community/i … ule_id=834

Yes, it is VERY simple… :bulb: but it works.
I’ll be adding the Expansions in the files ares as Module Extensions as I build them.

Shift-click terrain tiles to re-select them once set, and play by the rules… don’t touch other player’s pieces… it’s all open, just like sitting at a table with your friends/family/kids. If someone wants to be a jerk and toss the pieces aside… well, don’t invite them back to your table (virtual or real).

Enjoy!
:smiley:

Well, I know this module used to work fine. Does anyone know what version of VASSAL it is playable in (network version)? Looking to play some network games, but can’t play with expansions at all in the current situation.

When I play the Carc module that’s available on Vassal (not the new, simplified one, but the one with the infinite loops), I don’t run out of memory - I just get 6 error messages and then can continue on with my game. Still annoying, so I looked into the module. (Note: I’ve been using Vassal for about 5 days, so what I’m describing might be destructive to other parts of the module.)

In the Game Piece Prototype Definitions, I modified some of the colored meeples and ubermeeples. I removed all the Trigger Actions, since that’s what was causing the loops, and I took one of the “Return to Deck” traits, which didn’t have a menu title, and named it “Return to Supply” and set the deck to the appropriate color’s supply of meeples/ubermeeples.

I now don’t SEEM to have any problem with moving meeples and ubermeeples around, as long as I use the Return to Deck menu option I created. I can’t drag the meeples back into their appropriate supplies, but that’s ok with me - right clicking is easier. (The shortcut key combo also works.)

For the cloth, wine, and wheat chits, I encountered similar loops. I removed all the Trigger actions again and made each Return to Deck trait send the chit to the appropriate color’s supply (or back to the supply of chits). It’s annoying because it includes, for example, “Return to Grey’s Supply” even if Grey is not an active player, but again, that’s something I can live with. Also kind of annoying is that to give out a single chit, you have to drag it off the stack and then right-click to use the Return to Deck menus. But at least no infinite loops.

I’m still running into issues with the Builder and the Pig, mostly because I can’t find their info in the module. I’m 85% positive the problem here is again with the Trigger Actions. All the Trigger Actions seem to be set up to trigger themselves, or trigger one another in some weird loop, and I didn’t see the need for any of the Trigger Actions. The meeples seem to return to their appropriate place in the “standing up” orientation, regardless of how they were laid on the main map.

I’m not sure if:

a) anyone is listening,
b) this is helpful at all, and
c) if anyone knows where to find things like the builder and pig tokens.

As a follow-up, after a little sleep, I was able to quickly locate the remaining pieces like the builder and pig, and am pretty sure I have removed all the infinite loops (by removing all the as-I-see-it unnecessary trigger actions). I believe my modified module is now fully functional and doesn’t have problems. However, I haven’t play-tested it very much - just trying to imagine how it would be used in an actual game.

Being relatively new to Vassal, and having modified an existing module, I’m not sure if I should submit the new module now under a different name, keep it and playtest it, or something else. Any guidance on how to proceed would be appreciated.

Im just learning my way around vassal. I’ve been using the 2.0+/Corrected version. How do you move just one of the guys on the scoreboard? I can right click and add 50 to the top. Or I can click and drag and move all 6 of them (or however many players there are). But I don’t see a way to move just one.