Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Caballero-Arepa opened this issue Apr 19, 2022 · 32 comments · Fixed by #6687
Closed

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

Caballero-Arepa opened this issue Apr 19, 2022 · 32 comments · Fixed by #6687

Comments

@Caballero-Arepa
Copy link
Contributor

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
Copy link
Collaborator

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.<init>(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
Copy link
Collaborator

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
Copy link
Contributor Author

Caballero-Arepa commented Apr 25, 2022

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
Copy link
Collaborator

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 🇨🇴

@Caballero-Arepa
Copy link
Contributor Author

No, This one bruh

@SomeTroglodyte
Copy link
Collaborator

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 SomeTroglodyte self-assigned this May 2, 2022
@SomeTroglodyte
Copy link
Collaborator

SomeTroglodyte commented May 2, 2022

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 🤬 . Have any better save to easily repro?

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

UniqueType.CreatesOneImprovement support

  • UniqueType it
  • Centralize knowledge how a tile is marked as target for that building
  • Ensure tile display knows - was OK
  • Prevent selecting tiles where target improvement will be finished next turn anyway?? No - mark yellow if any improvement in progress
  • Ensure Workers don't cancel the marked tiles
  • Ensure removing the building frees the tile - was there - cleanup
  • What if building is bought? (AI also goes through CityConstructions.purchaseConstruction)
  • What if tile is pillaged?
  • Does AI pillage call the fixed code? Yes, UnitAutomation.tryPillageImprovement -> UnitActions.getPillageAction
  • What if we're nuked with the building in the queue? -> go through centralized pillaging code
  • What if the unique fingers an improvement not suitable for improvementInProgress?
  • What if e.g. a Great person places its Thing on a marked tile?
  • Great person improvement placing AI? Yes - automateGreatGeneral and automateImprovementPlacer go through UnitActions.getImprovementConstructionActions
  • Flyby: Made Citadel tile takeover a typed unique
  • What if a city gets razed while owning a marked tile?
  • City automation places the building w/o assigning a tile?
  • postpone the construction sound on addToQueue until tile chosen
  • Make sure, when AI buys, that a check was done that at least 1 tile can accept the improvement
  • rename Building.getImprovement, make specific use clearer
  • Cache hasUnique and getImprovement for this usecase
  • Toast to prompt "please select a tile"
  • Select a different construction while "select tile" is active should remove highlights + placeTile var.
  • Worker on a marked tile should be idle (No yellow "Construct improvement")
  • Select a constructing building in the queue could highlight "the" tile?
  • Buying the Building from the Queue should not ask for the tile again?

@xlenstra
Copy link
Collaborator

xlenstra commented May 2, 2022

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
Copy link
Contributor Author

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
Copy link
Collaborator

SomeTroglodyte commented May 2, 2022

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
Copy link
Contributor Author

Caballero-Arepa commented May 2, 2022

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

In order:

  • Crash log
  • Save

**Thanks Xlenstra for the edits ;)

@Caballero-Arepa
Copy link
Contributor Author

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
Copy link
Contributor Author

Caballero-Arepa commented May 2, 2022

Save File
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

@SomeTroglodyte
Copy link
Collaborator

NotBuildingOrUnitException

Come on. Ooooold and boring and mouldy and buried in dust. Plain to see why here 😜 - 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! 🙄 😆

@SomeTroglodyte
Copy link
Collaborator

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. 😉 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

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

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
Copy link
Contributor Author

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
Copy link
Collaborator

get the .jar

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

@Caballero-Arepa
Copy link
Contributor Author

Caballero-Arepa commented May 4, 2022

Testing Progress
  • Queue the Building -> asks for tile, on valid click -> queued (construction sound plays) and tile is marked - Correct
  • 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
  • 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
  • Move Worker onto marked tile and open Improvement picker -> everything disabled, Improvement shown as being constructed - Correct
  • A city with such a building queued is razed to the ground -> Tile marker should disappear - Correct
  • Automate city construction (for a human) places this -> Tile automatically chosen and marked - Correct
  • A Great Person on a marked tile -> Great improvement action disabled - Correct
  • Marked tile is pillaged -> Marker and Building in queue should disappear - Depends
  • Marked tile is nuked -> Marker and Building in queue should disappear - Kinda
  • AI chooses building and has less gold than buy threshold -> building queued with automatically chosen tile marked - Correct
  • 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
Copy link
Contributor Author

Caballero-Arepa commented May 4, 2022

Testing results:

All marked above are successful.

Bugs:

  • Building can be placed on top of Natural wonders or Mountains
    imagen
  • Cannot pillage the marked tile if there is no previous improvement. Same with nukes, explotion happens but marker continues. *Marker disappears correctly when there is already an improvement.
  • The last check I haven't managed to do them yet

@SomeTroglodyte
Copy link
Collaborator

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
Copy link
Collaborator

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
Copy link
Collaborator

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
Copy link
Collaborator

... 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
Copy link
Contributor Author

Caballero-Arepa commented May 4, 2022

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
Copy link
Collaborator

SomeTroglodyte commented May 4, 2022

... 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
Copy link
Contributor Author

Caballero-Arepa commented May 4, 2022

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
Copy link
Collaborator

so the modder should

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

@Caballero-Arepa
Copy link
Contributor Author

Caballero-Arepa commented May 4, 2022

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
Copy link
Collaborator

SomeTroglodyte commented May 4, 2022

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
Copy link
Contributor Author

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
Copy link
Collaborator

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
Copy link
Collaborator

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants