Bug: The duplicate name detection code for network players is now
   failing with the new initialization timing -- oscillating fixNames
   between dripton and dripton4

Bug: 2-high titan stack did not run away even though it could be caught
   on 4-6 by a 6-high stack:
Gold rolls a 4 for movement
considering risk of leaving Gd01 in Brush hex 109
got enemies that can attack on a 1 :[Rd04]
got enemies that can attack on a 2 :[Rd04, Rd11]
got enemies that can attack on a 3 :[Rd04, Rd11]
got enemies that can attack on a 4 :[Rd02, Rd04, Rd11]
got enemies that can attack on a 5 :[Rd01, Rd02, Rd04, Rd11]
got enemies that can attack on a 6 :[Rd01, Rd02, Rd04, Rd11]
EVAL Gd01 stay in Brush hex 109 = 0
considering risk of moving Gd01 to Plains hex 105
got enemies that can attack on a 5 :[Bu03]
got enemies that can attack on a 6 :[Bu03]
EVAL Gd01 move to Plains hex 105 = 0

Bug: Loaded a game with 2 human players and 4 AIs.  Only got one board.

Bug: Out of memory error after many consecutive Load Game actions.  Find leak.
   Not enough memory to copy history from from savegame JDOM tree to new one?

Bug: After clicking on engagement, after computer declined to flee and I
   declined to concede:
Rd10 (Star) (dripton) attacks Br08 (Ram) (Brown) in Brush hex 17
java.lang.NullPointerException
        at net.sf.colossus.client.HexMap.getHexByLabel(HexMap.java:583)
        at net.sf.colossus.client.BattleMap.getEntrance(BattleMap.java:385)
        at net.sf.colossus.server.Battle.placeLegion(Battle.java:93)
        at net.sf.colossus.server.Battle.<init>(Battle.java:87)
        at net.sf.colossus.server.Game.fight(Game.java:2660)
        at net.sf.colossus.server.Game.makeProposal(Game.java:2606)
        at net.sf.colossus.server.Server.makeProposal(Server.java:880)
        at net.sf.colossus.server.SocketServerThread.callMethod(SocketServerThread.java:188)
        at net.sf.colossus.server.SocketServerThread.parseLine(SocketServerThread.java:104)
        at net.sf.colossus.server.SocketServerThread.run(SocketServerThread.java:65)

Bug: During a battle against an opponent's titan stack, right-clicking on
another one of his stacks showed a titan with a ?.  Looks like we're not
updating certainties at the beginning of the engagement.  This fixes itself at
the end of the battle.

Bug: Blue's turn, number 24
- We can safely split AND attack with Bu01
- We can safely split AND attack with Bu01
- We can safely split AND attack with Bu01
- We can safely split AND attack with Bu01
- We can safely split AND attack with Bu01
- We can safely split AND attack with Bu01
- Client.doSplit Bu01 Bu07 Gorgon,Gorgon
- From client Blue: doSplit ~ Bu01 ~ Bu07 ~ Gorgon,Gorgon
- Server.doSplit Bu01 Bu07 Gorgon,Gorgon
2 creatures are split off from legion Bu01 (Anchor) into new legion Bu07 (Fountain)
- Server.didSplit 134 Bu01 Bu07 2
java.util.ConcurrentModificationException
        at java.util.TreeMap$EntryIterator.nextEntry(TreeMap.java:1026)
        at java.util.TreeMap$KeyIterator.next(TreeMap.java:1051)
        at java.util.Collections$1.next(Collections.java:996)
        at net.sf.colossus.util.Glob.glob(Glob.java:58)
        at net.sf.colossus.server.Player.getStatusInfo(Player.java:770)
        at net.sf.colossus.server.Server.getPlayerInfo(Server.java:1309)
        at net.sf.colossus.server.Server.allUpdatePlayerInfo(Server.java:292)
        at net.sf.colossus.server.Server.allUpdatePlayerInfo(Server.java:298)
        at net.sf.colossus.server.Server.allSetupSplit(Server.java:480)
        at net.sf.colossus.server.Game.setupSplit(Game.java:805)
        at net.sf.colossus.server.Game.setupPhase(Game.java:775)
        at net.sf.colossus.server.Game.access$200(Game.java:31)
        at net.sf.colossus.server.Game$GamePhaseAdvancer.advancePhaseInternal(Game.java:739)
        at net.sf.colossus.server.Game$GamePhaseAdvancer.advancePhase(Game.java:721)
        at net.sf.colossus.server.Game.advancePhase(Game.java:709)
        at net.sf.colossus.server.Server.doneWithRecruits(Server.java:1260)
        at net.sf.colossus.server.SocketServerThread.callMethod(SocketServerThread.java:255)
        at net.sf.colossus.server.SocketServerThread.parseLine(SocketServerThread.java:104)
        at net.sf.colossus.server.SocketServerThread.run(SocketServerThread.java:65)
- Client.didSplit 134 Bu01 Bu07 2 24
- From client Blue: doneWithSplits

Bug: CowardSimpleAI ran out of markers, started trying to split with
   marker "null", entered infinite loop

Remove advancePhaseInternal from PhaseAdvancer; make private

Remove AWT dependency from server by moving image manipulation in
   VariantSupport to client side.

Need a way to pick a variant at random, selectable from the command line for
   stresstest.

The updateHistory flag used to avoid infinite loops should be an instance
   variable rather than an argument to many methods.

EASY Compute numLegions, numMarkers, numCreatures, titan power, total point 
   value on client side rather than passing them in player info.

EASY Disable "AIs stop when humans dead" if no human players at start of game.

Animated timer showing time left for AI in battles.

Have server send marker names.

Change some JDialogs to JFrames to allow separate minimizing?
Should be able to move recruit chart behind board, map.
OR
Make BattleMap a JDialog rather than a JFrame (moving menu), to fix focus.

Add link from client to LogWindow; advance scroll thumb at end of various
   phases.

Should be able to clear recruitChits in any phase.  Move to Graphics menu?
Allow displaying stuff during other players' turns.
Ability to dismiss and recall recruitChits

Real whole-legion battle eval function, including gang hits.

Refactor to eliminate duplicate code.  (Especially Movement, BattleMovement, 
   Strike, Creature/Critter/CreatureInfo)
Add interfaces like MovementOracle and LegionOracle to replace existing 
   hardcoded Client or Game references where possible.
Fix the Titan Creature/Critter problem.

Machine learning to tweak AI constants.

When getting both a PickRecruit and an AcquireAngel after a battle,
   make sure the PickRecruit is on top, because it's modal.
   Or make PickRecruit non-modal.

Observer clients, which can attach in mid-game.

Sometimes refuse remote newGame/loadGame/saveGame calls?

Cleanup network shutdown -- when game over or player eliminated, don't
   whine if its client drops.

Fully event-driven savegames.
Use identical events for network protocol.
Use events to support infinite undo/redo, toolbar with VCR controls to 
   step through games, stepping AI, etc.

Change Quit button in GetPlayers dialog to Cancel.  Go back to existing 
   game if there is one from Cancel, or quit if just starting.  Eliminate
   confirmation before calling dialog.

L&F should not show Windows if not allowed on this platform.
L&F needs to include GTK on Linux
Eliminate L&F menu entirely?

Add "no 2s or 5s" mulligan option.
Add optional additional handicap mulligans that can be used after turn 1.

Add UI for players to specify favorite colors.

ShowLegion on mouseover, not click, with permanent dialog.
Show zoomed area around mouse cursor in a small window, for big maps.

Add confirm dialogs (for conceding with titan, skipping recruits, ...)

Highlight entrances somehow.  Maybe use fixed boxes with an arrow to
   show entry side, instead of cascading.
Turn map to move player's entrance (or attacker's if observing) to 
   bottom.  Line up entering creatures rather than overlapping.
   Color-code entrances.
Make BattleMap less tall.  Move dice, etc. to one side.

Add SetupBattle dialog, to allow setting up standalone battles.
   (terrain, entry side, creatures in attacking and defending legions,
   angel/archangel available to summon, recruits available for terrain
   type, player scores for titan power.)

Track all players' markers on client side.
Add a ShowLegionMarkers window that shows each player's remaining markers.

Add a window that shows all players' units

Add a window that shows all game options.

Add movement and recruit animation.  Requires returning full paths for
   moves, not just destination hex.

JDK 1.4 changes:
   New focus model
   JProgressBar setIndeterminate()
   JFormattedTextField for some inputs?
   Logging API?
   asserts (make sure they're on)
   NetworkInterface / localhost

Make split prediction optional.

SVG chits.  Maybe SVG board and map, after we have SVG chits.  (No point
   before then -- just drags in Batik without giving infinite rescaling.)
Remove SVG code until we have the chits.

Place SummonAngel so that it doesn't overlap any of the player's markers
   with summonable angels.

Use creature-only images without chit background, and scale onto chits,
   avoiding overlap with symbols and allowing players to easily substitute
   images without editing.

Try PMD (lint tool).

Dead players' markers should be zero in StatusScreen.

PickRecruiter should allow clicking on the top row (if applicable),
   not just the bottom.

Try some Law of Demeter refactorings.

EngagementResults:
Legion won the battle in -1 turns
Legion earned 0 points
Losing legion's creatures need to be shown without ?
