Updated City Name Manager

I have a problem opening attachments in my e-mail.

Could you put it on fileshack.com (or something like it) and send me a link instead?
 
I attached the data below. Now, anyone can of course look at the data, but please only look at it for now!

Anyone who starts editing it before the data has been validated by someone who knows the City Name Manager get slapped with a trout! :splat:
 

Attachments

  • rawdata.txt
    182.6 KB · Views: 93
Just to be sure about the iDefault names:

Is that the original name and the names behind it the names that it will be changed to if the forementioned civ aquires it?

I also see a lot of things missing, but I guess they were already missing in the original file.

Like:

- Berlijn doesn't change back to Berlin if conquered by Germany, or does it, because Berlin is iDefault? I'm confused.

- I don't see Cicihar (Russian Qiqihaer) anywhere.
 
Just to be sure about the iDefault names:

Is that the original name and the names behind it the names that it will be changed to if the forementioned civ aquires it?
Not exactly. The Civ specific names are always valid for that plot (unless restricted in an exception, which is displayed inside a parenthesis). The default name is used if the Civ in question doens't have a entry to call its own. So Vikings acquiring something in China would get the default name for that tile, which would probably be something in Chinese. Because that tile wouldn't have any city name alias specific to Vikings. As an example.

I also see a lot of things missing, but I guess they were already missing in the original file.

Like:

- Berlijn doesn't change back to Berlin if conquered by Germany, or does it, because Berlin is iDefault? I'm confused.

- I don't see Cicihar (Russian Qiqihaer) anywhere.
Berlin will be the German name for that tile if:
1. iGermany:'Berlin' or
2. no iGermany entry but iDefault:'Berlin'

Cicihar (spelling?) is nowhere to be found in the default City Name Manager, so I guess that would have to be added then. (But lets just get to raw data in order first.)

Qiqihaer appears on the Chinese and Mogolian city name maps, and also in the Chinese and Japanese dynamic city name change code. (In Rhye's code.)
 
I saw the raw data and it looks good.

A few questions:

1. Based on what you said, in order for this to work the redundant entries that duplicate a certain coordinate need to be eliminated. I assume that these redundant entries are present in the raw data because you want the community to decide together which entries to keep and which to eliminate.

2. It seems that you have only retained three redundant entries. For example lines 535, 536 and 537 contain information pertaining to the tile with coordinates (59, 37) which is Tripoli, Libya. Line 535 uses the Roman Tripolis as default. Line 536 uses the Arab Tarabulus. Line 537 uses the Turkish Trablus. Tripoli is not an option for a default name; I assume it's because it only appears on the citynamemaps for the Western Euro Civs which spawn after the Romans & Arabs. I see that this "3 entry rule" is broken sometimes, but I haven't figured out why. I'm not 100% sure that this 3 entry rule is the real deal or just my hallucination.

3. Can you add a comment or something to demarcate which Civ is the source for the Default name?
 
I saw the raw data and it looks good.
Can anyone else validate it also?

1. Based on what you said, in order for this to work the redundant entries that duplicate a certain coordinate need to be eliminated. I assume that these redundant entries are present in the raw data because you want the community to decide together which entries to keep and which to eliminate.
Yeah, I'm not qualified to make these decisions without researching every single entry. And my script is either, for sure.

2. It seems that you have only retained three redundant entries. For example lines 535, 536 and 537 contain information pertaining to the tile with coordinates (59, 37) which is Tripoli, Libya. Line 535 uses the Roman Tripolis as default. Line 536 uses the Arab Tarabulus. Line 537 uses the Turkish Trablus. Tripoli is not an option for a default name; I assume it's because it only appears on the citynamemaps for the Western Euro Civs which spawn after the Romans & Arabs. I see that this "3 entry rule" is broken sometimes, but I haven't figured out why. I'm not 100% sure that this 3 entry rule is the real deal or just my hallucination.
There is no 3 entry rule. There only is a entry if 1. a city name appears in a city name map and 2. that same city name is used as a condition for city name change in the code.

This means, then, that Tripoli is only present in the city name maps and not as a conditions in the code. But we might still want Tripoli to be the default name. We are in charge - not my script.

The reason why entries are missing is because I have an additional script that weeds out identical posts (lined up after each-other). But its not perfect, so there are non-sequential double-posts.

3. Can you add a comment or something to demarcate which Civ is the source for the Default name?
Only if its necessary, because I think we'd wanna delete those later.
 
I agree with SR that some default names are inconsistent and should be 1 default 'language'.

For example: Default names for North African cities should be all Arabic or all Turkish or all Roman, etc. so that if (f.e.) China conquers more than one city there it would not be Tarabulus next to Qart-Hadasht.

To be sure:
When a civ aquires a city that doesn't have a name for that city it gets the default name, right?
 
I agree with SR that some default names are inconsistent and should be 1 default 'language'.
That would be your job - to pick the default name you wanna use. Unless you can come up with a set of rules for this that I can code into my script. What would those be then?

To be sure:
When a civ aquires a city that doesn't have a name for that city it gets the default name, right?
Yes, exactly. But to make it absolutely clear:

If we don't want any stinking default names we can get rid of those. I'll just nerf them, plain and simple. It was just a feature I came up with, basically using left over data from the conversion process. No need to eat the left-overs, right?

And also, I we don't want any default name for a specific tile, we just delete it.

So, why are there 3 entries for each tile?
Long story (read the rest of the thread) but this is preliminary raw data only. Generated by script. Developers are supposed to process that data so there will only be one entry per tile. So view them as "alternatives".
 
Ok, since nobody has been able to point out any deficiencies in the raw data I posted, I believe we can actually start processing it.

First of all: This is it.

What we have at this point is some data structures generated from the current CityNameManager.py file. So it changes absolutely nothing about the stuff that is already in there (Rhye's code and data).

Why I call it "raw" data is that I've deliberately generated duplicate - redundant - information. If you look at it more closely, most tiles are referenced on more than one line. This needs to be cleaned up so that there only remains one line for each tile. (If this is not done the new and improved City Name Manager won't work, simple as that.)

Here are examples from the actual data:
Code:
(22, 43): { iDefault:'Nueva Iberia', iEngland:'New Iberia', iFrance:'Nouvelle-Ibérie', iAmerica:'New Iberia' },
(22, 43): { iDefault:'Nouvelle Orléans', iPortugal:'Nova Orleães', iNetherlands:'New Orleans', iVikings:'New Orleans', iEngland:'New Orleans', iGermany:'New Orleans', iSpain:'Nueva Orleans', iAmerica:'New Orleans' },
(22, 43): { iDefault:'New Orleans', iPortugal:'Nova Orleães', iSpain:'Nueva Orleans', iFrance:'Nouvelle Orléans' },
Code:
(23, 42): { iDefault:'Nouvelle Orléans', iPortugal:'Nova Orleães', iNetherlands:'New Orleans', iVikings:'New Orleans', iEngland:'New Orleans', iGermany:'New Orleans', iSpain:'Nueva Orleans', iAmerica:'New Orleans' },
(23, 42): { iDefault:'New Orleans', iPortugal:'Nova Orleães', iSpain:'Nueva Orleans', iFrance:'Nouvelle Orléans' },
Code:
(23, 43): { iDefault:'Nouvelle Orléans', iPortugal:'Nova Orleães', iNetherlands:'New Orleans', iVikings:'New Orleans', iEngland:'New Orleans', iGermany:'New Orleans', iSpain:'Nueva Orleans', iAmerica:'New Orleans' },
(23, 43): { iDefault:'New Orleans', iPortugal:'Nova Orleães', iSpain:'Nueva Orleans', iFrance:'Nouvelle Orléans' },
(23, 43): { iDefault:'Nouvelle Orléans', iPortugal:'Nova Orleães', iNetherlands:'New Orleans', iVikings:'New Orleans', iEngland:'New Orleans', iGermany:'New Orleans', iSpain:'Nueva Orleans', iAmerica:'New Orleans' },
(23, 43): { iDefault:'New Orleans', iPortugal:'Nova Orleães', iSpain:'Nueva Orleans', iFrance:'Nouvelle Orléans' },
What we have here is 3 different New Orleans tiles - (22, 43), (23, 42) and (23, 43). This is redundant (but won't brake the system as such) and we only need one New Orleans tile. So we choose the one we want - and I will - for the sake of argument - choose the first one. (We always choose the one that is most accurate geographically, but I didn't check since this is hypothetical.) We delete the two others and are left with this:
Code:
(22, 43): { iDefault:'Nueva Iberia', iEngland:'New Iberia', iFrance:'Nouvelle-Ibérie', iAmerica:'New Iberia' },
(22, 43): { iDefault:'Nouvelle Orléans', iPortugal:'Nova Orleães', iNetherlands:'New Orleans', iVikings:'New Orleans', iEngland:'New Orleans', iGermany:'New Orleans', iSpain:'Nueva Orleans', iAmerica:'New Orleans' },
(22, 43): { iDefault:'New Orleans', iPortugal:'Nova Orleães', iSpain:'Nueva Orleans', iFrance:'Nouvelle Orléans' },
What we are looking at are 3 sets of data eminating from 3 different city name maps. This is still 2 too many (only one set of data per tile, remember?), but we should take a look at the data before discarding any of it. Firstly we look at the iDefault values for each:
Code:
(22, 43): { [COLOR="Red"]iDefault:'Nueva Iberia'[/COLOR], iEngland:'New Iberia', iFrance:'Nouvelle-Ibérie', iAmerica:'New Iberia' },
(22, 43): { [COLOR="Red"]iDefault:'Nouvelle Orléans'[/COLOR], iPortugal:'Nova Orleães', iNetherlands:'New Orleans', iVikings:'New Orleans', iEngland:'New Orleans', iGermany:'New Orleans', iSpain:'Nueva Orleans', iAmerica:'New Orleans' },
(22, 43): { [COLOR="Red"]iDefault:'New Orleans'[/COLOR], iPortugal:'Nova Orleães', iSpain:'Nueva Orleans', iFrance:'Nouvelle Orléans' },
The first one seems to be a Roman version so that clearly has to go, so we are left with the French and the English default name. Lets - again for the sake of argument only - decide on keeping the French default name. So now we're down to this:
Code:
(22, 43): { [COLOR="Red"]iDefault:'Nouvelle Orléans'[/COLOR], iPortugal:'Nova Orleães', iNetherlands:'New Orleans', iVikings:'New Orleans', iEngland:'New Orleans', iGermany:'New Orleans', iSpain:'Nueva Orleans', iAmerica:'New Orleans' },
One city, one tile, one data entry. What we have now is the coordinates of the tile, the default name of the tile, and dynamic city name change names for the Portuguese, the Dutch, the Vikings, the English, the Germans, the Spanish and the Americans.

This is where we need to get with every single city/tile/entry!

Now, sometimes the redundant data entries won't be compatible with each-other:
Code:
(28, 46): { [COLOR="Red"]iDefault:'Nieuwer-Amstel'[/COLOR], iNetherlands:'Wilmington', [COLOR="Red"]iVikings:(iGermany, 'Fort Kristina')[/COLOR] },
(28, 46): { [COLOR="Red"]iDefault:'Nieuwer-Amstel'[/COLOR], iNetherlands:'Wilmington', [COLOR="Red"]iVikings:(iNetherlands, 'Fort Kristina')[/COLOR] },
(28, 46): { [COLOR="Red"]iDefault:'Washington'[/COLOR], iJapan:'Washinton', iRussia:'Vashington' },
So we have the option of having Nieuwer-Amstel or Washington as the default name. But the dynamic city name change entries are all over the place. For starters, there are two "exceptions" present for the Vikings. In the first Nieuwer-Amstel line the Viking dynamic city name change will only happen if the city is German originally. And in the second one the Viking name change is limited to a Dutch city only.

This probably makes little sense and is just a consequence of how the present code works. So we make our own entry and delete all the ones above. We could - for argument's sake - end up with something like this:
Code:
(28, 46): { iDefault:'Washington', iJapan:'Washinton', iRussia:'Vashington', iVikings:'Fort Kristina' },
This is much better, and most importantly - only one Washington tile and only one entry for the tile.

So we basically do what we want with the raw data. There are mistakes in Rhye's code that are transferred to this setup, and we wanna find and correct those as we process the data. But some "exceptions" might also happen make sense (regardless if they are mistakes or not), so we don't just merge everything on principle either. Instead we make good decisions.

I'm not doing any of this data processing myself, so I'll just let the community come up with some way of working with it that gets the job done. Some discussion on specific tiles and cities is probably warranted. And it might be premature to start adding information to the data at this early stage, not?

And before anyone asks this - again:

No, this data will in no way, shape or form have presidency over the actual city name maps. Those are still king. Only when there is nothing in the city name map for the Civ will the default name for the founding tile be used. So this does add to the dynamic city founding names, but doesn't replace them.

And lastly, follow the syntax exactly! If you mess it up, the data will fail. No dynamic city change will work. At all.
 
Uh... Nueva Iberia is the name for that tile if Spain founds the city, so it is not the Roman version.

If Spain founds Nueva Iberia and France conquers it it will be called: Nouvelle-Ibérie.
If France founds Nouvelle Orléans on that same tile and Spain conquers it, it will be called: Nueva Orleans.

I personally have no problem with it being renamed Nouvelle Orléans even if the original was Nueva Iberia, although it would make the game less interesting especially you can't see who was the original founder anymore.

So what I'm trying to say is: One tile should have the possibility of having more than 1 entry for different 'original' names.

Another example is that city south of Washington that can have 3 different names:

- French: Fort Caroline (being renamed to Jacksonville when flipped to America)
- England: Savannah (stays Savannah)
- Spain: St. Augustine (stays St. Augustine)

Fort Caroline doesn't exist anymore as a settlement so it's logical that it's renamed, but the other two cities shouldn't be renamed and I would find it unlogical and unfun to rename them all to Jacksonville (or whatever).
 
So how the new setup isn't good anymore? :crazyeyes:

What exactly are you proposing, then? Can't you just edit those lines to get what you need?

And the editing I did in my example was just that - an example. I didn't change anything in the data - you do that.
 
OK, I finally had time to read the file, and I guess I got an issue.

The script might have messed up with some conquest-based renames.
For example, there are lines like:
Code:
(106, 47): { iDefault:'Sanshan', iChina:(iChina, 'Dalian'), iJapan:'Dairen', iRussia:'Dal'nij' },
(106, 47): { iDefault:'Dairen', iChina:'Dalian', iRussia:'Dal'nij' },
(106, 47): { iDefault:'Dal'nij', iChina:'Dalian', iJapan:'Dairen' },
where none of the options, or possible combinations of the options, is good enough to work like the original file.
To make it work, there should be something like this:
Code:
iDefault:'Sanshan', iRussia:'Dal'nij', iJapan:'Dairen', iRussia:(iChina, 'Dalian'), iJapan:(iChina, 'Dalian') },
and it might not be very easy for people to do fixes like this, unless they are already familiar with these names.
 
OK, I finally had time to read the file, and I guess I got an issue.

The script might have messed up with some conquest-based renames.
Are you positive that its my script and not Rhye's code that is to blame? (If you are, then I need to investigate and nobody gets to do any actual work on this in the meantime.)

In any case, aren't you guys gonna fix these things? There will be things to correct and improve upon. I'm just facilitating an easy way to do these enhancements - and also to spot the errors.

To make it work, there should be something like this:
Code:
iDefault:'Sanshan', iRussia:'Dal'nij', iJapan:'Dairen', iRussia:(iChina, 'Dalian'), iJapan:(iChina, 'Dalian') },
and it might not be very easy for people to do fixes like this, unless they are already familiar with these names.
So if you have already fixed this particular problem, what is the problem then? And who are these "people" you are referring to?

I thought the idea was that I give you the raw data - with errors and all - and you guys can process it. I'm not even interested in what tile should have what data, because that stuff is really beyond me. (Geography, that is. Don't know any.)
 
I can do East Asian tiles, where I have some knowledge.
But I can't really do some other places, say, Africa, and if nobody does these places, the eitire file won't work.
That's what I am worried about...

Are you positive that its my script and not Rhye's code that is to blame?

I don't know.:D
I might know if I can see the code to generate the file.
 
Ze code:
Spoiler :
Code:
def conversion():
        global index
        index = open('index.dat', 'w')
        for iX in range(124): #124
                for iY in range(68): #68
                        tCoords = (iX, iY)
                        print tCoords
                        for ePlayer in range(27):
                                entry = tCityMap[ePlayer][67-iY][iX]
                                if entry != "-1":
                                        print ePlayer, entry
                                        composeEntry(entry, tCoords, ePlayer)
        index.close()
        doubleEntries()
        
def composeEntry(entry, tCoords, ePlayer):
        string = getString(tCoords, entry)
        entries, lAliases = lookupAlias(entry, tCoords)
        entries = specialCases(entries, lAliases, tCoords, ePlayer)
        string += processEntries(entries)
        if len(entries) > 0:
                writeEntry(string)

def getString(tCoords, data):
        return "(" + str(tCoords[0]) + ", " + str(tCoords[1]) + "): { iDefault:'" + data + "', "

def processEntries(entries):
        string = ""
        for player in entries:
                city = entries[player]
                if isinstance(city, tuple):
                        string += player + ":(" + city[0] + ", '" + city[1] + "'), "
                else:
                        string += player + ":'" + city + "', "
        return string[:len(string)-2]

def lookupAlias(entry, tCoords):
        entries = {}
        lAliases = []
        for ePlayer in range(27) + [30]:
                alias = getAlias(entry, ePlayer)
                print "alias", lPlayers[ePlayer], alias
                if alias == "" or alias == entry: continue
                entries[lPlayers[ePlayer]] = alias
                if not alias in lAliases:
                        lAliases.append(alias)
        lAliases.append(entry)
        return entries, lAliases

def getAlias(name, ePlayer):
        alias, dummy = CNM.renameCities(name, ePlayer)
        return alias

def writeEntry(string):
        index.write(string + " },\n")

def specialCases(entries, lAliases, tCoords, ePlayer):
        if len(lAliases) == 0: return
        specialCases = entries.copy()
        for player in entries:
                entry = entries[player]
                for eCurrent in range(27):
                        alias = getAlias(entry, eCurrent)
                        if alias != "" and not alias in lAliases:
                                specialCases[lPlayers[eCurrent]] = (lPlayers[ePlayer], alias)
        return specialCases

def doubleEntries():
        index = open('index.dat', 'r')
        final = open('final.dat', 'w')
        previous = "start"
        while True:
                string = index.readline()
                print string
                if string == "": break
                if string != previous:
                        final.write(string)
                previous = string
        final.close()
        index.close()
The getAlias() function refers to a edited version of the CityNameManager.py file. Not included in this post. (The logic of Rhye's code is of course not edited. :rolleyes:)

If you think that the script can be improved or if you can think of some other data that could be generated, please tell me.

But I was really hoping that we could use the data already posted, because I was under the impression it was already validated. But I guess not... :p
 
I think I've wrote bad English.

Ok, I've tried to do what you said. If I've did someting wrong, please say it.

In the list, I've found this:
PHP:
(17, 37): { iDefault:'Tenochtitlán', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iMaya, 'Mekhiko'), iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 37): { iDefault:'Ciudad de México', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iSpain, 'Mekhiko'), iEngland:'Mexico City', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 37): { iDefault:'Mekhiko', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:'Mexico', iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 37): { iDefault:'Tenochtitlán', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iAztecs, 'Mekhiko'), iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 37): { iDefault:'Mexico City', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iAmerica, 'Mekhiko'), iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 38): { iDefault:'Tenochtitlán', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iMaya, 'Mekhiko'), iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 38): { iDefault:'Ciudad de México', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iSpain, 'Mekhiko'), iEngland:'Mexico City', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 38): { iDefault:'Mekhiko', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:'Mexico', iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 38): { iDefault:'Tenochtitlán', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iAztecs, 'Mekhiko'), iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(17, 38): { iDefault:'Mexico City', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iAmerica, 'Mekhiko'), iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Tenochtitlán', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iMaya, 'Mekhiko'), iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Ciudad de México', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iSpain, 'Mekhiko'), iEngland:'Mexico City', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Mekhiko', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:'Mexico', iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Tenochtitlán', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iAztecs, 'Mekhiko'), iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Mexico City', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iAmerica, 'Mekhiko'), iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },

I think the right tile is the tile where the Aztecs starts. I'm not sure, but I think it's tile (18, 37). So (17, 37) and (17, 38) are wrong.
PHP:
(18, 37): { iDefault:'Tenochtitlán', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iMaya, 'Mekhiko'), iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Ciudad de México', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iSpain, 'Mekhiko'), iEngland:'Mexico City', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Mekhiko', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:'Mexico', iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Tenochtitlán', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iAztecs, 'Mekhiko'), iEngland:'Mexico City', iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
(18, 37): { iDefault:'Mexico City', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iAmerica, 'Mekhiko'), iSpain:'Ciudad de México', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },

Next, I choosed the right iDeafault name. I choosed 'Ciudad de México'.
PHP:
(18, 37): { iDefault:'Ciudad de México', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:(iSpain, 'Mekhiko'), iEngland:'Mexico City', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },

Next, I did iRussia.
PHP:
(18, 37): { iDefault:'Ciudad de México', iTurkey:'Mexico', iPortugal:'Cidade do México', iCeltia:'Mexicopolis', iRussia:'Mekhiko', iEngland:'Mexico City', iFrance:'Mexico', iRome:'Mexicopolis', iNetherlands:'Mexico-stad', iAmerica:'Mexico City', iGermany:'Mexiko-Stadt', iVikings:'Mexico' },
 
Ok, I've tried to do what you said. If I've did someting wrong, please say it.
I think you did a good job of replicating my example. But lets not take away that Russian exception on a whim, because it could make sense. (They seldom do to me, but rather to those who actually know these things.) So that would have to be a judgment call, then. Who is judging these things, by the way?

It should also be noted that we can have exceptions like these - if we want to. We can even make our own!

But now I'm getting indications that this setup is flawed, alternatively that the raw data is flawed. So you need to wait awhile before you do any more work on this. Because it could all have to be redone.

I need a new validation on the raw data I posted. Halt all activities until we have this.
 
Top Bottom