yairm210 / Unciv

Open-source Android/Desktop remake of Civ V
Mozilla Public License 2.0
8.32k stars 1.56k forks source link

Game crashed: java.lang.Exception: Can't reach this tile! #11040

Closed marek22k closed 7 months ago

marek22k commented 7 months ago

Is there an existing issue for this?

Game Version

4.10.4-gradle82 (flatpak on gnome with touchscreen)

Describe the bug

The game crashes.

Steps to Reproduce

No idea.

Screenshots

No response

Link to save file

Game before crash: https://gist.github.com/marek22k/f835c379fddfe5d0624fa04d0c6aff18

Operating System

Linux

Additional Information

Platform: Desktop Version: 4.10.4 (Build 963) Rulesets: [Policy mod, Civ V - Vanilla, Great Farmer, Resource Recyclers, Modern Joke Religions, Extra Buildings, Extra Wonders, Barbarian xp farm, Extra Units, Civ V - Gods & Kings, Yet Another Resource Mod, temp-1cdb265b, 5Hex Tileset, Extra Promotions, Logicians] Last Screen: com.unciv.ui.screens.worldscreen.WorldScreen


OS: Linux (amd64, 6.6.10-chrultrabook) Freedesktop SDK 23.08 (Flatpak runtime) Java: Flathub 21.9 Max Memory: 948 MB System default encoding: UTF-8


Message:

java.lang.Exception: Can't reach this tile!
    at com.unciv.logic.map.mapunit.movement.PathsToTilesWithinTurn.getPathToTile(UnitMovement.kt:801)
    at com.unciv.logic.map.mapunit.movement.UnitMovement.moveToTile(UnitMovement.kt:403)
    at com.unciv.logic.map.mapunit.movement.UnitMovement.moveToTile$default(UnitMovement.kt:370)
    at com.unciv.logic.automation.unit.BattleHelper.tryAttackNearbyEnemy(BattleHelper.kt:32)
    at com.unciv.logic.automation.unit.BattleHelper.tryAttackNearbyEnemy$default(BattleHelper.kt:15)
    at com.unciv.logic.automation.unit.UnitAutomation.tryAttacking(UnitAutomation.kt:259)
    at com.unciv.logic.automation.unit.UnitAutomation.automateUnitMoves(UnitAutomation.kt:225)
    at com.unciv.logic.automation.civilization.NextTurnAutomation.automateUnits(NextTurnAutomation.kt:390)
    at com.unciv.logic.automation.civilization.NextTurnAutomation.automateCivMoves(NextTurnAutomation.kt:71)
    at com.unciv.logic.civilization.managers.TurnManager.automateTurn(TurnManager.kt:339)
    at com.unciv.logic.GameInfo.nextTurn(GameInfo.kt:391)
    at com.unciv.ui.screens.worldscreen.WorldScreen$nextTurn$1.invokeSuspend(WorldScreen.kt:599)
    at com.unciv.ui.screens.worldscreen.WorldScreen$nextTurn$1.invoke(WorldScreen.kt)
    at com.unciv.ui.screens.worldscreen.WorldScreen$nextTurn$1.invoke(WorldScreen.kt)
    at com.unciv.utils.ConcurrencyKt$launchCrashHandling$1.invokeSuspend(Concurrency.kt:87)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
    at com.unciv.utils.CrashHandlingDispatcher$dispatch$1.invoke(Concurrency.kt:173)
    at com.unciv.utils.CrashHandlingDispatcher$dispatch$1.invoke(Concurrency.kt:173)
    at com.unciv.ui.crashhandling.CrashHandlingExtensionsKt$wrapCrashHandling$1.invoke(CrashHandlingExtensions.kt:17)
    at com.unciv.ui.crashhandling.CrashHandlingExtensionsKt$wrapCrashHandlingUnit$1.invoke(CrashHandlingExtensions.kt:33)
    at com.unciv.ui.crashhandling.CrashHandlingExtensionsKt$wrapCrashHandlingUnit$1.invoke(CrashHandlingExtensions.kt:33)
    at com.unciv.utils.CrashHandlingDispatcher.dispatch$lambda$0(Concurrency.kt:173)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:840)

Save Mods:

[Civ V - Gods & Kings, 5Hex Tileset, Barbarian xp farm, Extra Buildings, Extra Promotions, Extra Units, Extra Wonders, Great Farmer, Logicians, Modern Joke Religions, Policy mod, Resource Recyclers, Yet Another Resource Mod]

Save Data:

Show Saved Game https://gist.github.com/marek22k/185868e95b48e7168e7d3b8cd5bd3b0f

The same error also appears when the game is restarted.

tuvus commented 7 months ago

It comes from #11012. I will look into it sometime. And that's a lot of mods.

SomeTroglodyte commented 7 months ago

Tile @(-3.0,-15.0), Antium, Tundra, Hill, Emu, City center, Worker - Rome, Crossbowman - Rome - Crossbowman has 2 movement points, destination is Tile @(-1.0,-11.0), Grassland, Farm, Great Merchant - Egypt - entering a tile containing a civilian of another civ?? OK: unit.civ.isAtWarWith(unit.civ.gameInfo.getCivilization("Egypt")) is true. Still, that's 3 movement points to reach. So... šŸ¤·

that's a lot of mods

true

SomeTroglodyte commented 7 months ago

Wait - some of these modded extravaganzas have double-movement uniques made uncacheable by nonstandard conditionals. ... ..No - this Crossbowman only has Uncapturable <in [Friendly Land] tiles>.

tuvus commented 7 months ago

Does it have the Route March promotion?

From Extra-Promotions Route March: available for all military Land units (except Scouts.) First rank gives +2 movement while in friendly territory, the second gives +1 move anywhere that isn't enemy territory, and the third rank gives one extra move in foreign tiles.

SomeTroglodyte commented 7 months ago

I said "only" - when I had it in the debugger, that was the only line from unit.getUniques().tolist(). But - that may have been the wrong way to eval that question? That helper should cover promotions - or does it? Yes, that was the Loyalty or something promotion. But other sources for weirdly conditionalled movement? Dunno. Also - that mod combo has promotions all over the place, that may contradict/override? Didn't check.