Warcraft: War Heroes - Official Thread



  • @TheDog That should already be fixed. I'm not sure if a release has the fix or if you have to use a prerelease.



  • My
    Engine version is 2.0.20306

    Game version is 0.1.2


  • Admin

    A 2.1 was just released that has the latest fixes for this map.

    https://triplea-game.org/download/



  • @Frostion
    Playing Undead, I dont appear to be able to place Skeletons with Sevis?



  • Turn 25
    I was doing so well, with no errors till this one.
    Noted the AI has not been defending their capitals with too many units, thanks Devs.

    14bbffb2-62b9-48f4-80d2-3d6185639d70-image.png
    2.1.20365: CasualtySelector#selectCasualties:136 - IllegalStateException

    Log Message

    java.lang.IllegalStateException: sortedTargetsToPickFrom must have the same size as targetsToPickFrom list

    TripleA Version

    2.1.20365

    Java Version

    11.0.6

    Operating System

    Windows 10

    Stack Trace

    java.lang.IllegalStateException: java.lang.IllegalStateException: sortedTargetsToPickFrom must have the same size as targetsToPickFrom list
    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    	at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:600)
    	at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:678)
    	at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:737)
    	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateParallel(ReduceOps.java:919)
    	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
    	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    	at games.strategy.triplea.odds.calculator.ConcurrentBattleCalculator.calculate(ConcurrentBattleCalculator.java:234)
    	at games.strategy.triplea.ai.pro.util.ProOddsCalculator.callBattleCalc(ProOddsCalculator.java:224)
    	at games.strategy.triplea.ai.pro.util.ProOddsCalculator.callBattleCalc(ProOddsCalculator.java:200)
    	at games.strategy.triplea.ai.pro.util.ProOddsCalculator.calculateBattleResults(ProOddsCalculator.java:133)
    	at games.strategy.triplea.ai.pro.util.ProOddsCalculator.calculateBattleResults(ProOddsCalculator.java:116)
    	at games.strategy.triplea.ai.pro.ProNonCombatMoveAi.determineIfMoveTerritoriesCanBeHeld(ProNonCombatMoveAi.java:423)
    	at games.strategy.triplea.ai.pro.ProNonCombatMoveAi.doNonCombatMove(ProNonCombatMoveAi.java:98)
    	at games.strategy.triplea.ai.pro.AbstractProAi.move(AbstractProAi.java:135)
    	at games.strategy.triplea.ai.AbstractAi.start(AbstractAi.java:514)
    	at games.strategy.engine.framework.ServerGame.waitForPlayerToFinishStep(ServerGame.java:537)
    	at games.strategy.engine.framework.ServerGame.runStep(ServerGame.java:407)
    	at games.strategy.engine.framework.ServerGame.startGame(ServerGame.java:297)
    	at games.strategy.engine.framework.startup.launcher.LocalLauncher.launchInternal(LocalLauncher.java:61)
    	at games.strategy.engine.framework.startup.launcher.LocalLauncher.launchInternal(LocalLauncher.java:34)
    	at games.strategy.engine.framework.startup.launcher.AbstractLauncher.lambda$launch$0(AbstractLauncher.java:16)
    	at java.base/java.lang.Thread.run(Thread.java:834)
    Caused by: java.lang.IllegalStateException: sortedTargetsToPickFrom must have the same size as targetsToPickFrom list
    	at games.strategy.triplea.delegate.battle.casualty.CasualtySelector.selectCasualties(CasualtySelector.java:136)
    	at games.strategy.triplea.delegate.battle.Fire.selectCasualties(Fire.java:248)
    	at games.strategy.triplea.delegate.battle.Fire.selectCasualties(Fire.java:238)
    	at games.strategy.triplea.delegate.battle.Fire$2.execute(Fire.java:117)
    	at games.strategy.triplea.delegate.ExecutionStack.execute(ExecutionStack.java:34)
    	at games.strategy.triplea.delegate.battle.MustFightBattle.fight(MustFightBattle.java:722)
    	at games.strategy.triplea.odds.calculator.BattleCalculator.calculate(BattleCalculator.java:114)
    	at games.strategy.triplea.odds.calculator.ConcurrentBattleCalculator.lambda$calculate$4(ConcurrentBattleCalculator.java:222)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    	at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952)
    	at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926)
    	at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
    	at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
    	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
    
    

    WoW-U25.tsvg
    autosave_round_odd.tsvg
    autosave_round_even.tsvg


  • Admin

    Wow! 25 runds! I made the map and have never reached that many rounds 😄 Are you playing both Undead and Trolls? Or only Undead?

    Please give me a save of the last and final round you play so that I may study it. I would like to see how long it takes for you to level up and how the resources are balanced. To me it seems that you got too many special resources? More than you need? Are some in abundance and other s not?

    Does the skeletons still not work? I think you have to build them at a factory where you hero is located. Either when he drops by or when he resurrects there.

    PS: Hope the devs could evaluate this error. Have not seem that before.



  • Yes the skeletons work fine. You have to have your hero in a factory for him to produce them.



  • @TheDog I don't see this error reported in github. Did you click the "Report to TripleA" button?

    And I could duplicate the error with that save so it is really nice.



  • @TheDog I created a github issue https://github.com/triplea-game/triplea/issues/7020

    I also figured out why it is happening but I don't have a fix. That is in the issue.



  • Re: Warcraft: War Heroes - Official Thread

    @Frostion
    I only play as one race at a time.

    For resources food is scarce, but later in the game you have too much. Thats is because you are using your other resources to buy other cool stuff. So on balance it works fine as is.

    For those players who go beyond say 25 turns they will have excess XP, so a suicide (one use) unit/spell with an XP costs might be worth considering.

    Undead
    WoW-U25.tsvg

    Tauren
    WoW-T27.tsvg

    Currently playing Trolls only turn 6 so far.
    WoW-TR-06.tsvg

    I will try the skeletons later.



  • @Trevan
    Yes I tried to report it to Git Hub, it would not let me. Do I need a Git Hub account to post there?



  • @LaFayette

    Thanks, it much more stable.



  • @Frostion & @avshar
    Well that was quicker than I thought.

    Yes I can create Skeletons but only with Sevis at a Factory.



  • @Frostion
    The Troll hero cannot use the movement speed of 3 from the Balloon in Plaguewood, see turn 10.

    This might be due to the Totem?

    WoW-TR-10.tsvg



  • Dwarf turn 20
    This should be reproducible as it crashed again for me.

    2.1.20365: RemoveUnits#perform:44 - IllegalStateException

    Log Message

    Remote method call exception: Not all units present in:Thandol Strait. Trying to remove:[Flying-Machine owned by Dwarves, Troopship owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls] present:[Fish owned by Trolls, Troopship owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Flying-Machine owned by Dwarves, Flying-Machine owned by Dwarves]

    TripleA Version

    2.1.20365

    Java Version

    11.0.6

    Operating System

    Windows 10

    Stack Trace

    java.lang.IllegalStateException: Not all units present in:Thandol Strait.  Trying to remove:[Flying-Machine owned by Dwarves, Troopship owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls] present:[Fish owned by Trolls, Troopship owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Footmen owned by Trolls, Flying-Machine owned by Dwarves, Flying-Machine owned by Dwarves]
    	at games.strategy.engine.data.changefactory.RemoveUnits.perform(RemoveUnits.java:44)
    	at games.strategy.engine.data.GameData.performChange(GameData.java:433)
    	at games.strategy.engine.framework.ServerGame$1.gameDataChanged(ServerGame.java:92)
    	at jdk.internal.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at games.strategy.engine.message.unifiedmessenger.EndPoint.invokeSingle(EndPoint.java:136)
    	at games.strategy.engine.message.unifiedmessenger.EndPoint.lambda$invokeMultiple$0(EndPoint.java:120)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
    	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    	at games.strategy.engine.message.unifiedmessenger.EndPoint.invokeMultiple(EndPoint.java:121)
    	at games.strategy.engine.message.unifiedmessenger.EndPoint.invokeLocal(EndPoint.java:111)
    	at games.strategy.engine.message.unifiedmessenger.UnifiedMessenger.invoke(UnifiedMessenger.java:152)
    	at games.strategy.engine.message.UnifiedInvocationHandler.invoke(UnifiedInvocationHandler.java:48)
    	at com.sun.proxy.$Proxy16.gameDataChanged(Unknown Source)
    	at games.strategy.engine.framework.ServerGame.addChange(ServerGame.java:638)
    	at games.strategy.engine.delegate.DefaultDelegateBridge.addChange(DefaultDelegateBridge.java:91)
    	at games.strategy.triplea.delegate.GameDelegateBridge.addChange(GameDelegateBridge.java:62)
    	at games.strategy.triplea.delegate.battle.MustFightBattle.remove(MustFightBattle.java:603)
    	at games.strategy.triplea.delegate.battle.MustFightBattle.clearWaitingToDieAndDamagedChangesInto(MustFightBattle.java:456)
    	at games.strategy.triplea.delegate.battle.MustFightBattle$20.execute(MustFightBattle.java:1777)
    	at games.strategy.triplea.delegate.ExecutionStack.execute(ExecutionStack.java:34)
    	at games.strategy.triplea.delegate.battle.MustFightBattle.fight(MustFightBattle.java:722)
    	at games.strategy.triplea.delegate.battle.BattleDelegate.fightBattle(BattleDelegate.java:242)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at games.strategy.engine.delegate.DelegateExecutionManager$1.invoke(DelegateExecutionManager.java:120)
    	at com.sun.proxy.$Proxy12.fightBattle(Unknown Source)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at games.strategy.engine.message.unifiedmessenger.EndPoint.invokeSingle(EndPoint.java:136)
    	at games.strategy.engine.message.unifiedmessenger.EndPoint.lambda$invokeMultiple$0(EndPoint.java:120)
    	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
    	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    	at games.strategy.engine.message.unifiedmessenger.EndPoint.invokeMultiple(EndPoint.java:121)
    	at games.strategy.engine.message.unifiedmessenger.EndPoint.invokeLocal(EndPoint.java:111)
    	at games.strategy.engine.message.unifiedmessenger.UnifiedMessenger.invokeAndWait(UnifiedMessenger.java:96)
    	at games.strategy.engine.message.UnifiedInvocationHandler.invoke(UnifiedInvocationHandler.java:56)
    	at com.sun.proxy.$Proxy12.fightBattle(Unknown Source)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at games.strategy.engine.player.DefaultPlayerBridge$GameOverInvocationHandler.invoke(DefaultPlayerBridge.java:152)
    	at com.sun.proxy.$Proxy12.fightBattle(Unknown Source)
    	at games.strategy.triplea.ai.AbstractAi.battle(AbstractAi.java:609)
    	at games.strategy.triplea.ai.AbstractAi.start(AbstractAi.java:517)
    	at games.strategy.engine.framework.ServerGame.waitForPlayerToFinishStep(ServerGame.java:537)
    	at games.strategy.engine.framework.ServerGame.runStep(ServerGame.java:407)
    	at games.strategy.engine.framework.ServerGame.startGame(ServerGame.java:297)
    	at games.strategy.engine.framework.startup.launcher.LocalLauncher.launchInternal(LocalLauncher.java:61)
    	at games.strategy.engine.framework.startup.launcher.LocalLauncher.launchInternal(LocalLauncher.java:34)
    	at games.strategy.engine.framework.startup.launcher.AbstractLauncher.lambda$launch$0(AbstractLauncher.java:16)
    	at java.base/java.lang.Thread.run(Thread.java:834)
    
    

    WoW-TR-19-end.tsvg
    autosave_round_even.tsvg
    autosave_round_odd.tsvg



  • @TheDog Thanks for the save game. I see a issue in github that appears to be this one. I've copied the save there. https://github.com/triplea-game/triplea/issues/7026

    I can duplicate it with 2.1 but not with the latest master. So this might already be fixed in one of the pre-releases. I'm trying to figure out if it is really fixed.



  • I was wrong about it being fixed. There is some randomness to getting the error. I'm able to duplicate it and will be putting more details about it in the github issue.



  • @Frostion
    As I have a few games under my belt, here are some observation/suggestions.

    Unit buying
    Irregulars - the cheapest unit, good for fodder and gaining territory
    Footmen - good general purpose
    Pike - good anti cavalry
    Bow - I dont buy, poor value
    Crossbow - I dont buy, poor value
    Artillery - poor value, especially when the hero wields so much ranged fire power.

    Suggestions
    Cavalry - drop their PU, increase/double their Food cost, these are really good blitzers and great at causing mayhem in the enemies territories. The Food change is to use up the food surplus later in the game. Besides you have to feed the mount.
    Range 4 spells - too long, reduce to range 2 or 3

    Undead
    Skeletons - too cheap should be 10 or 15 mana
    Fire Thrower - appears poor value v Catapult in the Battle Calc

    Troll
    Berserkers - poor value also dont give Veteran so not worth it
    Dire Troll is too expensive as it specifically needs 5 Allied Irregulars to make it worth while
    Fire Canoe looks poor value and only moves 1 v Warship general purpose stats

    Do you want more observations/suggestions?



  • Some of what TheDog posted is how i feel as well but not all. My observations will differ a bit.

    All around i think the game is well balanced. Since there are four races on each side the randomness of the resource placement and helpful items means that IF you are playing only one of those races, the other three are almost guaranteed to have more of something you lack. You just need to figure out what you need to specialize in to be an effective ally.

    As to units, i think the current stats are mostly fine. I agree with TheDog that cavalry could be a bit more costly in food. I don't agree with his take on bowmen and crossbowmen. These to me seem to have been intended as basically improved Irregulars. Either gaining a defensive or offensive bonus but still basically Irregulars. The cost for them is not much more in PU's but you have to pay for the bonuses in food. I don't have a problem with that. Especially in the later game when there is such a huge surplus most of the time.

    I don't agree with the take on artillery either. Its a nice way to have powerful attacks like a hero when your hero is not present. Or if you do not have enough mana or gold for whatever reason to buy the good supporting units.

    I do agree that spells are a bit O.P. with their range, 4 seems excessive. I also agree with the troll Berserkers not being worth it. I have not once bought them. The Fire Canoe i also agree with. Its basically pointless. At that speed its almost purely a defensive weapon.

    All in all though like i said this game seems very well thought out. If the technical glitches can be ironed out it may well be a favorite of mine.


  • Admin

    @TheDog @avshar Great feedback! I have have had little time to work on this map lately, but a thorough evaluation of your save games and feed back is on my to-do-list (like your agreements and disagreements).

    Also, the potential map-error with the undead movement of the balloon.

    Any errors, shortcomings, inaccuracies or misinformation in like tooltips or notes are also very welcome 😁


Log in to reply