Comments (11)
Wow! Can you please provide the autosave of the turn before, so we can debug how this happened?
from unciv.
Wow! Can you please provide the autosave of the turn before, so we can debug how this happened?
Ah crap, I do not have access to those autosaves anymore... I already started a new game, I guess they have been overwritten... I did not know providing a save more turns prior to a bug occuring is useful for debugging. I will remember this for the next time I submit a bug report!
I hope this save and bug report is still somewhat useful for now.
from unciv.
The notification is correct.
Load your save, go to diplomacy though the "Belgrade" city's menu -> Belgrade the City belongs to Kathmandu the Nation. How you managed to do that is another matter... Look at the replay: Border changes colour from turn 212 to turn 213 - Kathmandu the Nation conquered Belgrade then lost Kathmandu the City to Babylon on turn 253.
In other words: Not city destroyed but city-state destroyed - key wording. Should we rename City-States that happen to survive losing their Capital to maybe "Ex-Kathmandu"?1
Footnotes
-
Or patterned after "The
Jo... pardon, -Artist Formerly Unknown As X"? â©
from unciv.
The notification is correct.
Load your save, go to diplomacy though the "Belgrade" city's menu -> Belgrade the City belongs to Kathmandu the Nation. How you managed to do that is another matter... Look at the replay: Border changes colour from turn 212 to turn 213 - Kathmandu the Nation conquered Belgrade then lost Kathmandu the City to Babylon on turn 253.
In other words: Not city destroyed but city-state destroyed - key wording. Should we rename City-States that happen to survive losing their Capital to maybe "Ex-Kathmandu"?1
Wow, great find! I did not know city-states could do that, haha.
from unciv.
did not know city-states could do that
They can, though it needs several unlikely happenstances. You seen them conquering another city from time to time, but they always raze and go back to their one-loneliness. In this case, they couldn't - either because it's forbidden to raze an original capital, or because they lost their own before they could raze, or both.
I'll leave this open - somebody decide
a) Rare and fine as is
b) Implement hint in such a case - change notification text to express they lost their last city but it wasn't their own original capital - if and only if that is the case. Either only for CS or for all Nations?
from unciv.
I'm definitely fine with it as-is, but having the city-state AI change the name to "new X" would be a cool Easter egg for this edge case
from unciv.
Easter egg
Playing to Temptation, eh? Well, changing Nation.name or civName is out of the question. Regrettably - if we had that open feature where a Nation could be played by more than one Civilization, possibly with different Leaders - then we'd probably already have the flexibility...
So, a displayName...
With civName having 498 'value-read' or 'receiver' places in our code... Could be a chore to find all UI-going places.
Uh, and civName should definitely have a Kdoc - and be private set
.
Like this:
Subject: [PATCH] civName linting
---
Index: tests/src/com/unciv/logic/map/TileImprovementConstructionTests.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/tests/src/com/unciv/logic/map/TileImprovementConstructionTests.kt b/tests/src/com/unciv/logic/map/TileImprovementConstructionTests.kt
--- a/tests/src/com/unciv/logic/map/TileImprovementConstructionTests.kt (revision 008fbea81788b1b39caffeda5b35e5762e662704)
+++ b/tests/src/com/unciv/logic/map/TileImprovementConstructionTests.kt (date 1713709184698)
@@ -56,7 +56,7 @@
tile.setTransients()
if (improvement.uniqueTo != null) {
- civInfo.civName = improvement.uniqueTo!!
+ civInfo.setNameForUnitTests(improvement.uniqueTo!!)
}
val canBeBuilt = tile.improvementFunctions.canBuildImprovement(improvement, civInfo)
@@ -92,7 +92,7 @@
for (improvement in testGame.ruleset.tileImprovements.values) {
if (!improvement.uniques.contains("Can only be built on [Coastal] tiles")) continue
- civInfo.civName = improvement.uniqueTo ?: "OtherCiv"
+ civInfo.setNameForUnitTests(improvement.uniqueTo ?: "OtherCiv")
val canBeBuilt = coastalTile.improvementFunctions.canBuildImprovement(improvement, civInfo)
Assert.assertTrue(improvement.name, canBeBuilt)
}
@@ -104,7 +104,7 @@
for (improvement in testGame.ruleset.tileImprovements.values) {
if (!improvement.uniques.contains("Can only be built on [Coastal] tiles")) continue
- civInfo.civName = improvement.uniqueTo ?: "OtherCiv"
+ civInfo.setNameForUnitTests(improvement.uniqueTo ?: "OtherCiv")
val canBeBuilt = tile.improvementFunctions.canBuildImprovement(improvement, civInfo)
Assert.assertFalse(improvement.name, canBeBuilt)
}
@@ -114,7 +114,7 @@
fun uniqueToOtherImprovementsCanNOTBeBuilt() {
for (improvement in testGame.ruleset.tileImprovements.values) {
if (improvement.uniqueTo == null) continue
- civInfo.civName = "OtherCiv"
+ civInfo.setNameForUnitTests("OtherCiv")
val tile = tileMap[1,1]
val canBeBuilt = tile.improvementFunctions.canBuildImprovement(improvement, civInfo)
Assert.assertFalse(improvement.name, canBeBuilt)
@@ -165,7 +165,7 @@
tile.resource = "Sheep"
tile.setTransients()
tile.addTerrainFeature("Hill")
- civInfo.civName = "Inca"
+ civInfo.setNameForUnitTests("Inca")
for (improvement in testGame.ruleset.tileImprovements.values) {
if (!improvement.uniques.contains("Cannot be built on [Bonus resource] tiles")) continue
Index: tests/src/com/unciv/testing/TestGame.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/tests/src/com/unciv/testing/TestGame.kt b/tests/src/com/unciv/testing/TestGame.kt
--- a/tests/src/com/unciv/testing/TestGame.kt (revision 008fbea81788b1b39caffeda5b35e5762e662704)
+++ b/tests/src/com/unciv/testing/TestGame.kt (date 1713709184746)
@@ -133,7 +133,7 @@
val civInfo = Civilization()
civInfo.nation = nation
civInfo.gameInfo = gameInfo
- civInfo.civName = nation.name
+ civInfo.setNameForUnitTests(nation.name)
if (isPlayer) civInfo.playerType = PlayerType.Human
civInfo.setTransients()
Index: core/src/com/unciv/logic/civilization/Civilization.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt
--- a/core/src/com/unciv/logic/civilization/Civilization.kt (revision 008fbea81788b1b39caffeda5b35e5762e662704)
+++ b/core/src/com/unciv/logic/civilization/Civilization.kt (date 1713709504227)
@@ -58,6 +58,7 @@
import com.unciv.models.translations.tr
import com.unciv.ui.components.extensions.toPercent
import com.unciv.ui.screens.victoryscreen.RankingType
+import org.jetbrains.annotations.VisibleForTesting
import kotlin.math.max
import kotlin.math.min
import kotlin.math.roundToInt
@@ -141,7 +142,16 @@
/** The Civ's gold reserves. Public get, private set - please use [addGold] method to modify. */
var gold = 0
private set
+
+ /** The Civ's name
+ *
+ * - must always be equal to Nation.name (except in the unit test code, where only local consistency is needed)
+ * - used as uniquely identifying key, so no two players can used the same Nation
+ * - Displayed and translated as-is
+ */
var civName = ""
+ private set
+
var tech = TechManager()
var policies = PolicyManager()
var civConstructions = CivConstructions()
@@ -701,6 +711,11 @@
//region state-changing functions
+ @VisibleForTesting
+ fun setNameForUnitTests(name: String) {
+ civName = name
+ }
+
/** This is separate because the REGULAR setTransients updates the viewable ties,
* and updateVisibleTiles tries to meet civs...
* And if the civs don't yet know who they are then they don't know if they're barbarians =\
Index: tests/src/com/unciv/logic/map/UnitMovementTests.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/tests/src/com/unciv/logic/map/UnitMovementTests.kt b/tests/src/com/unciv/logic/map/UnitMovementTests.kt
--- a/tests/src/com/unciv/logic/map/UnitMovementTests.kt (revision 008fbea81788b1b39caffeda5b35e5762e662704)
+++ b/tests/src/com/unciv/logic/map/UnitMovementTests.kt (date 1713709184754)
@@ -176,7 +176,7 @@
fun canNOTPassThroughTileWithEnemyUnits() {
val barbCiv = Civilization()
barbCiv.gameInfo = testGame.gameInfo
- barbCiv.civName = Constants.barbarians // they are always enemies
+ barbCiv.setNameForUnitTests(Constants.barbarians) // they are always enemies
barbCiv.nation = Nation().apply { name = Constants.barbarians }
testGame.gameInfo.civilizations.add(barbCiv)
from unciv.
Nonono change the city name!!
That's already built in and supported
from unciv.
you mean in this case, rename the City "Belgrade" which was formerly owned and founded by Belgrade the Nation, and is now the last bastion of the Nation Kathmandu - to - "New Kathmandu (formerly known as Belgrade)" (...or... to "Belgrade (last bastion of Kathmandu, the wussies that managed to lose their name-giving capital)" ... đ€ )...
Won't change the observation of this issue - the notification doesn't display any city name, it just has a city-pointing LocationAction. Becomes clearer only after clicking it.
Also, I don't think CityButton is able to wrap...?
Seems to me some more effort is involved anyway.
from unciv.
... and translatability of that easter-egg name, and the "city names exhausted" feature and its non-translatability, ...
save
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
(Thank Yair for that console, for without, it would have been a nightmare to stage such a save)
from unciv.
Force-wrapping that (\n
in the name) isn't too pretty but bearable?:
from unciv.
Related Issues (20)
- Feature request: the City-state "Manila" be renamed to "Maynila" HOT 1
- Warrior vanished from map HOT 5
- Russian translation for number of civilizations too long HOT 5
- Cannot Build HOT 4
- Feature request: Button to disband units in overview HOT 9
- FPS cap HOT 7
- Window mode issues HOT 3
- "Hidden from users" not hiding triggerable effect on event notification HOT 4
- When i tap to chek how mi relationship with a country is going, give me an error HOT 3
- Function to disable mods HOT 2
- Promotion crash HOT 3
- Automated units and actions HOT 12
- Start new game issues - e.g. Map Type selection sometimes fails HOT 1
- Technology cost discrepancy HOT 5
- éČăăȘă
- RFC: Telling stories - Ideas and related observations HOT 3
- Units without vision cannot be seen when moved into the fog HOT 2
- Game crash on starting new game after deleting mod HOT 20
- Feature request: Put resource point value for worker tile improvement priority in the settings. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
đ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. đđđ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google â€ïž Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from unciv.