yairm210 / Unciv

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

"Creates a [tileFilter] improvement on a specific tile" doesn't work #6576

Closed Caballero-Arepa closed 2 years ago

Caballero-Arepa commented 2 years ago

Trying to use the unique of "Creates a [tileFilter] improvement on a specific tile", and the game reads it, but upon clicking one of the green circles the game crashes.

To Reproduce

  1. Add the unique to a building, with any improvement: "Creates a [Farm] improvement on a specific tile"
  2. New game, construct the building
  3. When clicking one of the green circles, see crash

Crash Log

(Unciv discord server, bugs channel) https://discord.com/channels/586194543280390151/588357826758574106/966057960067432468

Expected behavior Game shouldn't crash obviously, and it should then place the improvement on the selected tile when the building finishes.

xlenstra commented 2 years ago
For those without discord, the linked message reads: **Platform:** Desktop **Version:** 4.0.6 **Rulesets:** [Policy mod, Victoria II Music, Warfare Expanded Unciv Bucketeer, RekMOD, Civilization 6 Mod, DeCiv Redux, 3rd and 4th Unique Component, Barbarian xp farm, Latin American_Civs, More Luxuries, Tech Stopper _Industrial_, Barbarian-xp-farm-master, Default units, Difficulty_Sandbox, Civ6Nations, Civ V - Vanilla, Civ5Nations, Civ style set by Bucketeer, Resource Recyclers, Civ V Leader portraits, Dreams of Steam, mi tileset, Civ Army Color Style Sheet, Alpha Frontier, Smoky Skies Redux, Civ V - Gods & Kings, Panamericana, Bubbly Borders Example, Closer Cities Distance of 1, Extra Resources] **Last Screen:** `com.unciv.ui.cityscreen.CityScreen` -------------------------------- OS: Windows 10 Java: Oracle Corporation 25.232-b09 Max Memory: 910 MB -------------------------------- **Message:** ``` com.unciv.logic.city.CityConstructions$getConstruction$NotBuildingOrUnitException: Farm is not a building or a unit! at com.unciv.logic.city.CityConstructions.getConstruction$core(CityConstructions.kt:232) at com.unciv.logic.city.CityConstructions.addToQueue(CityConstructions.kt:562) at com.unciv.ui.cityscreen.CityScreen$addTiles$1.invoke(CityScreen.kt:253) at com.unciv.ui.cityscreen.CityScreen$addTiles$1.invoke(CityScreen.kt:244) at com.unciv.ui.utils.ExtensionFunctionsKt$onClick$1.invoke(ExtensionFunctions.kt:78) at com.unciv.ui.utils.ExtensionFunctionsKt$onClick$1.invoke(ExtensionFunctions.kt:78) at com.unciv.ui.utils.ExtensionFunctionsKt$onClickEvent$1.clicked(ExtensionFunctions.kt:71) at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:88) at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:71) at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:355) at com.unciv.ui.crashhandling.CrashHandlingStage.access$touchUp$s80204510(CrashHandlingStage.kt:10) at com.unciv.ui.crashhandling.CrashHandlingStage$touchUp$1.invoke(CrashHandlingStage.kt:24) at com.unciv.ui.crashhandling.CrashHandlingStage$touchUp$1.invoke(CrashHandlingStage.kt:24) at com.unciv.ui.utils.ExtensionFunctionsKt$wrapCrashHandling$1.invoke(ExtensionFunctions.kt:333) at com.unciv.ui.crashhandling.CrashHandlingStage.touchUp(CrashHandlingStage.kt:24) at com.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:70) at com.badlogic.gdx.backends.lwjgl3.DefaultLwjgl3Input.update(DefaultLwjgl3Input.java:189) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:394) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:143) at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.(Lwjgl3Application.java:116) at com.unciv.app.desktop.DesktopLauncher.main(DesktopLauncher.kt:61) ``` **Save Mods:** ``` [Civilization 6 Mod, Civ Army Color Style Sheet] ``` **Save Data:**
Show Saved Game ``` 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 ```
SomeTroglodyte commented 2 years ago

Well, the code looks a bit unfinished. There's at least one expression evaluated without side effects or storing the results... Blame says Yair's work 14 months ago. Might have regressed in that time. Still, I would doubt at least one design decision: Which tile was selected is stored as improvementInProgress with turnsToImprovement==-1 and no direct association with the construction queue entry. So, even with the crash fixed, I'd expect weird behaviour when a Worker lands on such a tile, or when queueing several buildings that create a farm and then choosing the same tile for all of them and so on.

Is this reproducible with the public+current version of Civilization 6 Mod or would one need a manual modification, as the OP seems to suggest?

Caballero-Arepa commented 2 years ago

Is this reproducible with the public+current version of Civilization 6 Mod or would one need a manual modification, as the OP seems to suggest?

The test district is in the public ver. of Civ 6 mod, but is currently blacked out. So you need to just remove the /* and load the game.

Or you could copy-paste this: { "name": "Test District", "cost": 1, "hurryCostModifier": -100, "maintenance": 0, "uniques": ["Creates a [Farm] improvement on a specific tile"] },

SomeTroglodyte commented 2 years ago

public ver

Does not show in mod manager??? This one I assume - but it's not playable at all due to too many modcheck failures (from newgame - loading above game unsurprisingly crashes in TechManager.updateEra). That can't be 4.0.6 and the original Civilization 6 Mod. Meaning I'm no longer interested, amigo :colombia:

Caballero-Arepa commented 2 years ago

No, This one bruh

SomeTroglodyte commented 2 years ago

Then you should have said so - besides, the name differs from what the linked message says, so that's another hidden manipulation to cunfose oss

SomeTroglodyte commented 2 years ago

No, This one bruh

The savegame up above is not compatible with that mod, even after patching around the baseRuleset name -> Nation Brussels not found. Even after hacking all the city states to the different ones in your mod it fails - different natural wonders :cursing_face: . Have any better save to easily repro?

By the way - my working notes currently look like this:

UniqueType.CreatesOneImprovement support

xlenstra commented 2 years ago

Flyby: Made Citadel tile takeover a typed unique

Ah, I had fixed that as well in a local branch. I'll wait for your PR on this and work my thing around that

Caballero-Arepa commented 2 years ago

The savegame up above is not compatible with that mod, even after patching around the baseRuleset name -> Nation Brussels not found. Even after hacking all the city states to the different ones in your mod it fails - different natural wonders 🤬 . Have any better save to easily repro?

Oh, right, now the mod is different... let me get you another save with it's own mod.

What if building is bought?

Imo the improvement should be instantly placed as well

What if a city gets razed while owning a marked tile?

So, simple option: destroy the improvement if city is razed; Ideal, but complex option: Only destroy the imp. if it's unbuildable. If the imp. is a normal one (i.e: Fort) it doesn't get destroyed.

SomeTroglodyte commented 2 years ago

I said "my notes" so the question marks were addressed to me not you, all that was just to show it's far more complex to finish that feature than just fixing some mistake.

I'm 90% sure the code won't handle buying properly, but that's easier seen in the debugger than by code inspection. Which is no fun as the game slows to a crawl - 10s per click - with that mod on a small map, probably #6468 again. And your second hint - nope there is no improvement to destroy, but leaving the "marker"(s) would be an unrecoverable impediment, thus extra code is still needed to remove them. Same as with pillage and nuke, really, those would have destroyed the "marker" without cleaning the queue so a finished building would not place the imp. As I said, it's abusing turnsToImprovement = -1 as marker. I'm gradually becoming more attracted to changing the marker to a fresh field - but I already centralized that so it's just two places in code (two because: respect existing code regions).

... but gracias for paying attention!

Caballero-Arepa commented 2 years ago

Ok, here is another save, this is just with a simple specific mod: Test district.zip

In order:

**Thanks Xlenstra for the edits ;)

Caballero-Arepa commented 2 years ago

Platform: Desktop Version: 4.0.9 Rulesets: [Policy mod, Victoria II Music, Warfare Expanded Unciv Bucketeer, RekMOD, Civilization 6 Mod, DeCiv Redux, 3rd and 4th Unique Component, Barbarian xp farm, TS Industrial v2, Latin American_Civs, More Luxuries, Tech Stopper Industrial, Default units, Difficulty_Sandbox, Civ6Nations, Test district, Civ V - Vanilla, Civ5Nations, Civ style set by Bucketeer, Resource Recyclers, Civ V Leader portraits, Dreams of Steam, mi tileset, Civ Army Color Style Sheet, Alpha Frontier, HexaRealmTest, Smoky Skies Redux, Civ V - Gods & Kings, Panamericana, Bubbly Borders Example, Closer Cities Distance of 1, 5Hex Tileset, Extra Resources] Last Screen: com.unciv.ui.cityscreen.CityScreen


OS: Windows 10 Java: Oracle Corporation 25.232-b09 Max Memory: 910 MB


Message:

com.unciv.logic.city.CityConstructions$getConstruction$NotBuildingOrUnitException: Farm is not a building or a unit!
    at com.unciv.logic.city.CityConstructions.getConstruction$core(CityConstructions.kt:232)
    at com.unciv.logic.city.CityConstructions.addToQueue(CityConstructions.kt:562)
    at com.unciv.ui.cityscreen.CityScreen$addTiles$1.invoke(CityScreen.kt:253)
    at com.unciv.ui.cityscreen.CityScreen$addTiles$1.invoke(CityScreen.kt:244)
    at com.unciv.ui.utils.ExtensionFunctionsKt$onClick$1.invoke(ExtensionFunctions.kt:78)
    at com.unciv.ui.utils.ExtensionFunctionsKt$onClick$1.invoke(ExtensionFunctions.kt:78)
    at com.unciv.ui.utils.ExtensionFunctionsKt$onClickEvent$1.clicked(ExtensionFunctions.kt:71)
    at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:88)
    at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:71)
    at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:355)
    at com.unciv.ui.crashhandling.CrashHandlingStage.access$touchUp$s80204510(CrashHandlingStage.kt:10)
    at com.unciv.ui.crashhandling.CrashHandlingStage$touchUp$1.invoke(CrashHandlingStage.kt:24)
    at com.unciv.ui.crashhandling.CrashHandlingStage$touchUp$1.invoke(CrashHandlingStage.kt:24)
    at com.unciv.ui.utils.ExtensionFunctionsKt$wrapCrashHandling$1.invoke(ExtensionFunctions.kt:333)
    at com.unciv.ui.crashhandling.CrashHandlingStage.touchUp(CrashHandlingStage.kt:24)
    at com.badlogic.gdx.InputEventQueue.drain(InputEventQueue.java:70)
    at com.badlogic.gdx.backends.lwjgl3.DefaultLwjgl3Input.update(DefaultLwjgl3Input.java:189)
    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Window.update(Lwjgl3Window.java:394)
    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.loop(Lwjgl3Application.java:143)
    at com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application.<init>(Lwjgl3Application.java:116)
    at com.unciv.app.desktop.DesktopLauncher.main(DesktopLauncher.kt:61)

Save Mods:

[Civ V - Gods & Kings, Test district]

Save Data:

Show Saved Game ``` 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 ```
Caballero-Arepa commented 2 years ago
Save File ``` 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 ```
SomeTroglodyte commented 2 years ago

NotBuildingOrUnitException

Come on. Ooooold and boring and mouldy and buried in dust. Plain to see why here :stuck_out_tongue_winking_eye: - yes go on, read that line, it tries to add an improvement name to the city construction queue - so just name your building and its improvement the same! Problem solved! :roll_eyes: :laughing:

SomeTroglodyte commented 2 years ago

Progress, see checklist above. Now I'm out of ideas - or, to be precise, there were ideas to improve the code in my nightmares, and I forgot to jot them down.

That means testing. @ArchDuque-Pancake , I declare you testing manager. Please install Android Studio, and go ahead check out my branch and test. :wink: Seriously, is that within your scope or would you like to be able to test with a jar or apk? My tests were on a fresh game.

Testing To-Do

Some of these may be quite hard to set up a test situation for, I know. Do your best.

ALL others daring to help are of course welcome to try that branch out. I'm done with this for the moment, far too costly already, and may not react to questions for a day or two, but this won't be forgotten.

Caballero-Arepa commented 2 years ago

Alrighty, I can do it with Android Studio, but if I could get the .jar it could speed up the testing, it would help me, but don't worry if you don't want to provide it.

Anyways, thank you so much for your work on beforehand, testing will be started.

SomeTroglodyte commented 2 years ago

get the .jar

here, for a limited time. Why and when has it become so bloated?

Caballero-Arepa commented 2 years ago
Testing Progress - [x] Queue the Building -> asks for tile, on valid click -> queued (construction sound plays) and tile is marked - Correct - [x] Buy the Building from available -> asks for tile (no sound), on valid click -> Ask buy confirmation -> if Yes -> Coin sound and Improvement is placed - Correct - [x] Buy the Building from queue -> Ask buy confirmation -> if Yes -> Coin sound and Improvement is placed on the same tile as selected when queueing - Correct - [x] Move Worker onto marked tile and open Improvement picker -> everything disabled, Improvement shown as being constructed - Correct - [x] A city with such a building queued is razed to the ground -> Tile marker should disappear - Correct - [x] Automate city construction (for a human) places this -> Tile automatically chosen and marked - Correct - [x] A Great Person on a marked tile -> Great improvement action disabled - Correct - [x] Marked tile is pillaged -> Marker and Building in queue should disappear - Depends - [x] Marked tile is nuked -> Marker and Building in queue should disappear - Kinda - [x] AI chooses building and has less gold than buy threshold -> building queued with automatically chosen tile marked - Correct - [x] AI wants to construct or buy but has no viable tile -> it should choose something else - Correct - [ ] AI buys (has viable tile) -> gets the building and improvement
Caballero-Arepa commented 2 years ago

Testing results:

All marked above are successful.

Bugs:

SomeTroglodyte commented 2 years ago

can be placed on top of Natural wonders or Mountains

By manual choice or by automatics? How could I repro? Should only be possible if the TileInfo.canBuildImprovement function says yes, that's not changed by me AFAIK.

Cannot pillage

Well of course that would only be possible if there's something to pillage??? The "under construction" "marker" doesn't count as such, but it would be incompatible with what pillaging usually does. By the way, I have no idea what the current status on pillaging roads is... And nukes don't "pseudo-pillage' all possible tiles, there's the random factor before that. When a nuke treats a non-improved tile there can't be a conflict with the "under construction" "marker", so that should be absolutely unchanged by this branch. There's no other options - either the marker protects from pillage+nuke, or pillage+nuke can remove an improvement (removing marker too) while also unqueueing the building, or additional data in save games & memory. I chose option two...

The important part - either the building in the queue and the "under construction" "marker" are both still there or both gone. Unsure how to test that myself - maybe hotseat multiplayer?

I noticed the improvement may significantly reduce the tile yield, and still that tile would be auto-chosen - if it's the only feasible one. Upstream, the AI has no way to know the actual "value" (as in AI measure of benefit) of the building, as the "value" of the improvement can't be taken into account, and even more extra code for that - sorry, I'm too lazy. I did the bare minimum to automation (I believe) to avoid conflicts, AI is not really my thing.

SomeTroglodyte commented 2 years ago

Testing results

Respect! I couldn't have done it in that time (well, I also had RL taking precedence for a while). Muchas Gracias.

SomeTroglodyte commented 2 years ago

can be placed on top of Natural wonders or Mountains

When I try - those have a red circle, and clicking that just stops the "ask for tile" thing, the building stays unqueued/unbought. As I envisioned the UI should behave (or would you rather it continue the process and ignore the red-tile-click?). If you get green for a mountain - a mod thing?

SomeTroglodyte commented 2 years ago

... but I noticed a missing updateTileGroups call right after manually placing the target marker ... How did that happen? I fought hard earlier to make the mark visible when supposed to...

Caballero-Arepa commented 2 years ago

By manual choice or by automatics? How could I repro?

Both, I could do it, and AI as well. I was using an Academy as the improvement. imagen Test district.zip Note that improvements that explicitly say that can't be build somewhere, like moai, can't be placed aywhere. So the problem is only with improvements that don't have any restrictions to be placed on mauntains or wonders.

The important part - either the building in the queue and the "under construction" "marker" are both still there or both gone.

Both gone when there is something to pillage.

Unsure how to test that myself

I do it by setting two nations as humans, no need for multiplayer.

SomeTroglodyte commented 2 years ago

... I think I should tweak the color when tiles are technically allowed but choosing them would be a disadvantage. I have yellow if it would stop a Worker construction in progress, but not it it would kill a valuable Improvement. (My Civ6 mod copy doesn't mark Districts as Irremovable so that could be a big difference when that "Test District" places a Farm on it). I wouldn't really like to code an AI value comparison to control colors showing desirability, however. Yellow too if there is an improvement of any kind (exl roads) there....

Academy

Ah, that is maybe normally guarded against being plonked onto mountains only by the unit not being able to enter??? Valuable hint. -> Yes, TileInfo.L529 improvement.terrainsCanBeBuiltOn.isEmpty() && improvement.turnsToBuild == 0 && isLand -> true - not sure how to solve. adding a && !isImpassible() test would do it - but that feels like hardcoding and limiting combinations that a modder might otherwise get to work.

Caballero-Arepa commented 2 years ago

I think I should tweak the color when tiles

Yeah, they are a bit hard to spot. I did noticed the yellow dot and understood what it meant, I like it.

guarded against being plonked onto mountains only by the unit not being able to enter???

Yes, altough now that I think about it... it doesn't really matter, as the unique will only be only used in mods, so the modder should add "cannot be placed in []" if he doesn't want that to happen.

SomeTroglodyte commented 2 years ago

so the modder should

Happy to hear. But - needs dox. Where would that go...?

Caballero-Arepa commented 2 years ago

In the improvement json of course. For the case of Civ6 mod, districts are new so no problem there. *I did a test with Moais instead and in fact it didn't allow me to add them without coasts.

SomeTroglodyte commented 2 years ago

a bit hard to spot.

Still? I upped the alpha a bit, and thought it a big improvement. Don't want to hide everything on that tile. Then again, you could gain insight into which tile might be best by looking before triggering the please choose tile.

In the improvement json of course

No, the modder using the Unique themed here should find such special considerations in the modding wiki, and the problem is - auto generated file, no provision for extra text. Dox to help the modder find your solution, not dox left by the modder as to why his mod changes the Academy this way...

Caballero-Arepa commented 2 years ago

you could gain insight into which tile

Yeah, personally it's not a big deal, as it's mostly just on grassland tiles. And, the most important dots are the red and yellow ones, which are easy to see. So no need to change it if it was by me, I said it because other players might not see them, idk.

should find such special considerations in the modding wiki

I don't think it would be that hard to realise a fix for [my improvement] being able to be placed in a tile I don't want. Altough to be honest I dont quite understand fully your frase there... either way, I say leave it as it is, just let the modder decide where it can or cant be placed, idk.

SomeTroglodyte commented 2 years ago

What I said earleir "a missing updateTileGroups call" was wrong - that highlight I was missing only shows when the queue entry is selected, as intended. So, that leaves us with only cosmetic changes so far? I can update the jar easier than the PR/online branch as I had to merge another branch to even be able to fluidly test (which is why it shrank by 30%), and I don't want to mix. That jar changes the "please select tile" highlights only. Sources later.

SomeTroglodyte commented 2 years ago

It just came to me this is intended to replace the District Builder Units in Civ6 mods -> But no matter how, they either need protection or some (nonexisting) feature to refund the ability to grow to the allotted number of districts - if the builder is killed, the improvement nuked away (which can either place the "repair" state or destroy outright depending on uniques, and a repair state can be removed), - once you're one short you stay one short.... Not scope of that PR, but needs thought.